2011-10-09 35 views
14

Tôi cần mở Windows Firewall cho các kết nối gửi đi cho một ứng dụng tôi đang viết.Làm cách nào để Thêm Ngoại lệ Tường lửa Windows Outbound?

Những câu trả lời tốt nhất mà tôi đã có thể xác định vị trí đang ở đây:

http://www.shafqatahmed.com/2008/01/controlling-win.html

http://www.vincenzo.net/isxkb/index.php?title=Adding_a_rule_to_the_Windows_firewall

Vấn đề là phương pháp mà chỉ tạo ra một inbound quy tắc, và không phải là một outbound qui định. (Cả C# và kịch bản InnoSetup đều sử dụng cùng một phương thức.) Điều này hoàn toàn vô dụng đối với tôi.

Hành vi mặc định cho Tường lửa của Windows là cho phép lưu lượng gửi đi, nhưng điều đó không đảm bảo rằng ai đó sẽ không thay đổi điều đó.

Tôi muốn thực hiện việc này trong trình cài đặt (sử dụng InnoSetup) thay vì thực hiện trong C#.

Tôi đã bỏ lỡ điều gì đó?

Có ai biết cách tạo quy tắc gửi đi không?

Trả lời

1

TechNet làm: Create an Outbound Port Rule on Windows 7, Windows Vista, Windows Server 2008 or Windows Server 2008 R2

Mặc dù tôi giả sử bạn có nghĩa là để tạo các quy tắc như vậy programatically, nếu đó là trường hợp bạn có thể quan tâm Working with Group Policy Objects Programmatically.

Cuối cùng nếu bạn dự định thực hiện điều đó trong khi cài đặt, InnoSetup sẽ có thể hợp nhất các khóa registry cần thiết tại thời điểm thiết lập.

0

Đây là một trong nhiều tác vụ có thể được chuyển tới các công cụ dòng lệnh của Windows. netsh làm những điều thích hợp, nhưng nó (giống như mọi thứ khác netsh làm) là bên cạnh không thể tìm thấy. Các phiên bản đơn giản là:
netsh firewall add allowedprogram <path> <name>
Để biết thêm chi tiết, hãy chạy:
netsh firewall add allowedprogram ?

Đây có thể được thực hiện hoặc trong phần [Run] hoặc bằng cách gọi Exec.

Lưu ý rằng điều này được khấu hao trong Windows 7; nếu bạn chỉ nhắm mục tiêu Vista/2008 trở lên, bạn nên sử dụng netsh advfirewall firewall thay thế. Microsoft có an article khi chuyển đổi từ phiên bản cũ, nhưng tôi vẫn phải hỗ trợ XP, vì vậy tôi chưa thực hiện việc này.

22

Bạn có thể sử dụng netsh nếu bạn cần thêm một số ngoại lệ cho ứng dụng của mình.

ghi trong dòng lệnh (đối với XP):

netsh firewall add allowedprogram ? 

ghi trong dòng lệnh (đối với W7):

netsh advfirewall firewall add rule ? 

Sự khác biệt này becouse netsh firewall lệnh bị phản đối.Thay vào đó, chúng ta phải sử dụng lệnh netsh advfirewall firewall.

Thông tin thêm về cách sử dụng lệnh tường lửa netsh advfirewall thay vì lệnh netsh firewall chúng ta có thể thấy trong cơ sở kiến ​​thức đó: http://go.microsoft.com/fwlink/?linkid=121488

Ví dụ:

Thêm một quy tắc cho giao thông đến mà không cần đóng gói bảo mật cho messenger. exe:

netsh advfirewall firewall add rule name="allow messenger" dir=in program="c:\programfiles\messenger\msmsgs.exe" security=authnoencap action=allow 

Thêm một quy tắc cho giao thông đi tại cảng 80:

netsh advfirewall firewall add rule name="allow80" protocol=TCP dir=out localport=80 action=block 

Thêm quy tắc để giao thông nội địa với mã hóa an toàn giao thông & cho TCP thông qua cổng 80:

netsh advfirewall firewall add rule name="Require Encryption for Inbound TCP/80" protocol=TCP dir=in localport=80 security=authdynenc action=allow 
1

Vấn đề với netsh là nó không hoạt động trên một số phiên bản Windows (ví dụ Windows Vista Basic). Đó là lý do tại sao nên thêm ngoại lệ mà không sử dụng netsh. This article contains sample Inno Setup code.

+0

Điều đó cũng không đáng tin cậy trên các phiên bản Windows; Xem các nhận xét trên MSDN: * "Windows Firewall API có sẵn để sử dụng trong các hệ điều hành được chỉ định trong phần Yêu cầu. Nó có thể bị thay đổi hoặc không có trong các phiên bản tiếp theo. Đối với Windows Vista trở lên, sử dụng Tường lửa Windows với Bảo mật Nâng cao API được đề xuất "*, Yêu cầu: Khách hàng được hỗ trợ tối thiểu: Windows Vista, Windows XP SP2; Máy chủ được hỗ trợ tối thiểu: Windows Server 2003 với SP1. Vì vậy, như bạn có thể thấy, ngay cả trên Windows Vista là phần API này của nó không được khuyến khích. MS đôi khi điên :-) – TLama

Các vấn đề liên quan