Làm thế nào để kiểm soát truy cập internet cho mỗi chương trình?


59

Tôi muốn sử dụng một phần mềm để kiểm soát chương trình nào có thể kết nối với internet. Tôi biết rằng hành vi này được liên kết với từ "tường lửa", nhưng một số người dùng Linux rất khó chịu nếu ai đó yêu cầu Tường lửa cá nhân. Tôi không muốn làm bạn thất vọng vì yêu cầu một chương trình như vậy.
Tôi không muốn "cổng an toàn" hoặc những thứ khác mà Tường lửa cá nhân hứa hẹn trên Windows. Tôi nhìn vào iptablesnhưng nó không phù hợp với yêu cầu của tôi.

Tôi đã thấy một câu trả lời tuyệt vời ở đây ( "Cách chặn truy cập internet cho các ứng dụng rượu vang" ) nhưng thật khó chịu khi thiết lập điều này.

Có phần mềm nào yêu cầu mỗi chương trình nếu nó có thể truy cập internet không?


trên mac có một phần mềm gọi là snitch nhỏ thực hiện điều này. Tôi nghĩ cũng có phiên bản windows ...
Alvar

Câu trả lời:


6

Có một kịch bản Perl trong diễn đàn Ubuntu của Đức ( Google dịch sang tiếng Anh ) dường như làm điều đó. Tôi chưa bao giờ thử nó và tôi đã không xem xét kỹ hơn về kịch bản, nhưng có lẽ nó hiệu quả với bạn. Mô tả chỉ bằng tiếng Đức nên bạn có thể cần một dịch vụ dịch thuật (như Google Dịch; xem ở trên).


Tôi sẽ có một cái nhìn vào nó. Thật thú vị khi có thể là công cụ phù hợp. Thật không may, không có gui, nhưng nó không thể ngăn tôi :)
guerda

34

Trong trường hợp bạn vẫn đang tìm kiếm loại ứng dụng này, tôi hiện đang phát triển chính xác ứng dụng đó: http : //douanản.com / https : //gllab.com/douan Ứng dụng / Doane

Ứng dụng của tôi chặn mọi ứng dụng không xác định (phiên bản mới của ứng dụng được ủy quyền bị chặn) và hỏi bạn nếu bạn cho phép hoặc từ chối lưu lượng truy cập của ứng dụng đó.

Có một cái nhìn vào trang web ;-)

chụp màn hình


Mát mẻ! Tôi cũng đã xem ppa nhưng không có gói nào ở đó mặc dù ứng dụng được tạo ra ở đó. Ngoài ra tôi tự hỏi nếu nó có thể hiển thị ip được phân giải thành một tên trang web có thể đọc được? Và, tôi sẽ làm theo các hướng dẫn biên dịch, tôi đã thấy nhiều mẹo cho các gói ub Ubuntu ở đó và tôi sẽ sử dụng checkinstall để tạo bản sao các gói .deb cục bộ của mình để dễ dàng quản lý nâng cấp (gỡ bỏ / cài đặt). Tôi có thể kiểm tra cài đặt có thể được sử dụng để tạo phân phối của bạn quá tôi nghĩ.
Sức mạnh Bảo Bình

Bạn có thể mở yêu cầu tính năng trên Github ( github.com/Douane/Douane/issues ) :)
ZedTuX

2
uh, có vẻ như chính xác những gì tôi cần !! Nhưng tôi không thể tìm thấy một gói để cài đặt nó trên Ubuntu.
azerafati 14/03/2016

Vẫn không gói cho Ubuntu?
Anwar

1
Douan Ứng dụng đã trở lại! :)
ZedTuX

26

Tôi tìm thấy một giải pháp thuận tiện mà giải quyết vấn đề. Bạn tạo một nhóm không bao giờ được phép sử dụng internet và bắt đầu chương trình với tư cách là thành viên của nhóm này.

  1. Tạo một nhóm no-internet. Đừng không tham gia nhóm này

    sudo addgroup no-internet
    
  2. Thêm quy tắc vào iptables ngăn tất cả các quy trình thuộc nhóm no-internetsử dụng mạng (sử dụng ip6tablesđể ngăn chặn lưu lượng IPv6)

    sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
    
  3. Thực thi sudo -g no-internet YOURCOMMANDthay vì YOURCOMMAND.

Bạn có thể dễ dàng viết một tập lệnh bao bọc sử dụng sudo cho bạn. Bạn có thể thoát khỏi dấu nhắc mật khẩu bằng cách thêm

%sudo     ALL=(:no-internet)      NOPASSWD: ALL

hoặc, một cái gì đó tương tự với sudo visudo

Sử dụng iptables-saveiptables-restoređể duy trì các quy tắc tường lửa.


1
Tôi đã thử hướng dẫn của bạn, sudo -g no-internet firefoxkết nối nhanh hơn so với mặc định. Nó không hoạt động.
kenn

1
@kenn Tôi chỉ có thể nói rằng nó hoạt động tốt ở đây. Tôi đoán rằng bạn đang làm gì đó sai khi tạo quy tắc. Không lưu quy tắc, không làm cho tập lệnh thực thi hoặc đại loại như thế.
Tim

Tôi đã khởi động lại và áp dụng các quy tắc trên một lần nữa mà không gặp may
kenn

1
làm việc hoàn hảo cho tôi, ngay cả với firefox. cảm ơn bạn!
Kostanos

1
Điều này dường như không hoạt động đối với tôi, trên Ubuntu 19.04. Tôi đã phải cài đặt iptables-kiên trì để cho phép các thay đổi được lưu giữa các lần khởi động lại. (Vì vậy, bạn có thể muốn thêm nó vào giải pháp ở trên). Tuy nhiên, sudo -g no-fire firefox không hạn chế Firefox truy cập internet. Về mặt khái niệm, giải pháp này có vẻ như nó nên hoạt động. Có một cái gì đó cơ bản đang bị bỏ qua? Ví dụ, chúng ta có cần thiết lập BÓNG ipv4 và ipv6 để thực hiện công việc này không?
PJ Singh

5

Đã có một tường lửa trong Ubuntu ufw, nhưng nó bị tắt theo mặc định. Bạn có thể kích hoạt và sử dụng nó bằng dòng lệnh hoặc giao diện của nó, gufw , có thể cài đặt trực tiếp từ Trung tâm phần mềm Ubuntu.

Nếu bạn cần chặn truy cập internet vào một ứng dụng cụ thể, bạn có thể dùng thử LeopardFlower , phiên bản vẫn đang ở phiên bản beta và nó không có sẵn trong Trung tâm phần mềm Ubuntu:


4

Chạy một chương trình dưới một người dùng khác sẽ sử dụng các tệp cấu hình cho người dùng đó chứ không phải của bạn.

Đây là một giải pháp không yêu cầu sửa đổi các quy tắc tường lửa và chạy trong cùng một người dùng (thông qua sudo) với môi trường được sửa đổi, nơi người dùng của bạn my_uservà ứng dụng bạn muốn chạy là my_app:

# run app without access to internet
sudo unshare -n sudo -u my_user my_app

Để biết thêm chi tiết xem man unsharecâu trả lời này .

Tường lửa GUI Linux

Nếu bạn đang tìm kiếm một tường lửa GUI tôi đã có kết quả tốt với OpenSnitch - nó chưa có trong repos ubfox và tôi sẽ không gọi nó là cấp độ sản xuất, nhưng theo các bước xây dựng từ trang github đã làm việc cho tôi.


3

@psusi: Tôi thực sự mong mọi người sẽ không bán rong thông tin xấu và không hữu ích. IPTables cho phép một người làm điều này, vì vậy tôi hầu như không coi đó là "sự ngu ngốc". Chỉ cần nói "KHÔNG" mà không hiểu trường hợp sử dụng là hơi hẹp hòi. http://www.debian-adftime.org/article/120/Application_level_firewalling

EDIT bồ đề.zazen

LƯU Ý - TÙY CHỌN NÀY ĐƯỢC KHAI THÁC TỪ IPTABLES NĂM 2005, 8 NĂM TRƯỚC KHI TRẢ LỜI NÀY ĐƯỢC BÀI VIẾT

XEM - http://www.spinics.net/lists/netfilter/msg49716.html

cam kết 34b4a4a624bafe089107966a6c56d2a1aca026d4 Tác giả: Christoph Hellwig Ngày: CN 14 tháng 8 17:33:59 2005 -0700

[NETFILTER]: Xóa lạm dụng tasklist_lock trong chủ sở hữu ipt {, 6}

Xé toạc khớp cmd / sid / pid vì nó bị hỏng không thể trộn được và cản trở việc khóa các thay đổi đối với tasklist_lock.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
Signed-off-by: Patrick McHardy <kaber@xxxxxxxxx>
Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>

2
Đối với bất cứ ai xem xét việc gắn cờ này: Đây không phải là một nhận xét thay vào đó, nó trả lời câu hỏi đã được hỏi . @ user141987 Tuy nhiên, tôi khuyên bạn nên mở rộng điều này để cung cấp thêm thông tin về cách thiết lập iptablesđể thực hiện các hạn chế trên mỗi ứng dụng. Tôi khuyên bạn nên bao gồm các thông tin quan trọng trong câu trả lời của bạn (và vẫn cung cấp liên kết, để tham khảo).
Eliah Kagan

2
iptables KHÔNG lọc theo ứng dụng.
Panther

Bài báo đó dường như là thông tin sai lệch vì không có lựa chọn như vậy. Lý do tại sao các yêu cầu tạo ra một tùy chọn như vậy trong quá khứ đã bị từ chối là vì nó vốn không đáng tin cậy; một ứng dụng có thể chỉ cần thay đổi tên của nó.
psusi

3
@psusi Bạn có nói "Nếu kernel của bạn được biên dịch bằng CONFIG_IP_NF_MATCH_OWNER thì bạn có thể định cấu hình tường lửa iptables của mình để cho phép hoặc từ chối các gói trên cơ sở mỗi lệnh" không chính xác? Hoặc đơn giản là hầu hết các hạt nhân không bao gồm tùy chọn? Nếu điều này là không chính xác, có nguồn thông tin nào gỡ lỗi nó không? (Ngoài ra, xin lưu ý rằng mục đích chính của các hạn chế tường lửa trên mỗi ứng dụng không phải là cố gắng làm cho nó hoàn toàn an toàn để chạy các ứng dụng không tin cậy. Mục đích chủ yếu là cung cấp cho người dùng một biện pháp kiểm soát ngoài các tùy chọn cấu hình tích hợp của ứng dụng. )
Eliah Kagan

Tùy chọn này đã bị xóa khỏi kernel vào năm 2005, 8 năm trước khi câu trả lời này được đưa ra - spinics.net/lists/netfilter/msg49716.html và mặc dù các khiếu nại ngược lại là không chính xác, bạn KHÔNG thể lọc bộ lọc ứng dụng với iptables.
Panther

3

Một lựa chọn khác là firejail . Nó chạy ứng dụng bên trong hộp cát nơi bạn điều khiển nếu ứng dụng có thể nhìn thấy mạng:

firejail --net=none firefox

Lệnh này sẽ khởi động trình duyệt Firefox mà không cần truy cập internet. Lưu ý rằng bản phân phối firejail trong repo Ubuntu đã lỗi thời - tốt hơn nên tải xuống phiên bản LTS mới nhất của nó từ trang chủ firejail.


2

Tôi đã tìm thấy giải pháp được đăng ở đây là một giải pháp tốt. Nó liên quan đến việc tạo ra một nhóm người sử dụng mà internet được cho phép , và thiết lập các quy tắc tường lửa để cho phép truy cập chỉ dành cho nhóm này. Cách duy nhất để một ứng dụng truy cập internet là nếu nó được điều hành bởi một thành viên của nhóm này. Bạn có thể chạy các chương trình trong nhóm này bằng cách mở shell với sudo -g internet -s.

Để tóm tắt lại những gì trong bài tôi đã liên kết ở trên:

  1. Tạo nhóm "internet" bằng cách nhập nội dung sau vào trình bao: sudo groupadd internet

  2. Đảm bảo rằng người dùng sẽ chạy tập lệnh bên dưới được thêm vào sudonhóm /etc/group. Nếu bạn kết thúc sửa đổi tệp này, thì bạn sẽ cần phải đăng xuất và đăng nhập lại trước khi đoạn script bên dưới hoạt động.

  3. Tạo một tập lệnh chứa các phần sau và chạy nó:

    #!/bin/sh
    # Firewall apps - only allow apps run from "internet" group to run
    
    # clear previous rules
    sudo iptables -F
    
    # accept packets for internet group
    sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT
    
    # also allow local connections
    sudo iptables -A OUTPUT -p tcp -d 127.0.0.1 -j ACCEPT
    sudo iptables -A OUTPUT -p tcp -d 192.168.0.1/24 -j ACCEPT
    
    # reject packets for other users
    sudo iptables -A OUTPUT -p tcp -j REJECT
    
    # open a shell with internet access
    sudo -g internet -s
    
  4. Bằng cách chạy đoạn mã trên, bạn sẽ có một vỏ trong đó bạn có thể chạy các ứng dụng có truy cập internet.

Lưu ý rằng tập lệnh này không làm gì để lưu và khôi phục các quy tắc tường lửa của bạn. Bạn có thể muốn sửa đổi tập lệnh để sử dụng các lệnh iptables-saveiptables-restoreshell.


1

Để tốt hơn hoặc tồi tệ hơn, Linux sử dụng một cách tiếp cận khác. Không có giao diện đồ họa đơn giản để cung cấp chức năng này. Có nhiều cuộc thảo luận về chủ đề này trên internet và bạn có thể tìm thấy các cuộc thảo luận thú vị nếu bạn tìm kiếm trên google. Mặc dù tranh luận rất thú vị, cho đến nay vẫn chưa có một nhóm lập trình viên chuyên dụng nào muốn viết và duy trì chức năng này.

Các công cụ cung cấp chức năng này trong Linux là Apparmor, Selinux và Tomoyo.

Không có công cụ nào trong số này quá dễ học và tất cả đều có ưu điểm và nhược điểm. Cá nhân tôi thích SELinux hơn, mặc dù SELinux có đường cong học tập dốc hơn.

Xem:

http://www.linuxbsdos.com/2011/12/06/3-application-level-firewalls-for-linux-distribution/

Có (là) một ứng dụng đã được tham chiếu rồi, da báo. Tôi không chắc chắn về tình trạng / bảo trì.




0

Không, điều đó là không thể. Nó cũng không phải là một phần của định nghĩa truyền thống về tường lửa. Đó là điều mà Microsoft đã đưa ra khá gần đây trong một nỗ lực để giải quyết các vấn đề bảo mật hệ điều hành bị hỏng cơ bản của họ. Nó được coi là điên rồ và không khả thi trong cộng đồng Linux vì một chương trình không được phép có thể đơn giản chạy một chương trình khác và có quyền truy cập theo cách đó.

Nếu bạn không thích những gì một chương trình đang làm trên mạng khi bạn chạy nó, thì đừng chạy chương trình đó.


7
Tường lửa của Microsoft không phải là tường lửa lớn đầu tiên cung cấp chức năng này. Nó thậm chí không phải là tường lửa Windows đầu tiên cung cấp nó. BlackIce Defender, ZoneAlarm và một loạt các tường lửa phần mềm khác cho Windows trước khi giới thiệu Windows Internet Connection Firewall theo năm. Hơn nữa, không có sự đồng thuận như vậy trong cộng đồng Linux. Chúng tôi thường sử dụng AppArmor (hoặc SELinux) để hạn chế hành vi của các ứng dụng (và tôi tự hỏi liệu AppArmor có thể thích nghi với mục đích này không ...). Không có lý do gì "sai" khi muốn kiểm soát những ứng dụng nào có thể truy cập Internet.
Eliah Kagan

Và, như một số câu trả lời khác có thể chứng thực, các hạn chế tường lửa trên mỗi ứng dụng là hoàn toàn có thể ; chức năng này được tích hợp vào iptables / netfilter!
Eliah Kagan

Không, cả netfilter và iptables đều không thể lọc trên mỗi ứng dụng. Họ có thể lọc theo người dùng và cổng nhưng không phải cho mỗi ứng dụng.
Panther

"Có thể đơn giản chạy khác" ???? Sau đó, rõ ràng người tạo ra một chương trình như vậy mà không chặn các tiến trình con của chương trình đích là rất thiếu sót.
trusktr
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.