Cách chặn truy cập internet vào một số chương trình trên Linux


20

Gần đây, tôi đã gặp phải vấn đề giới hạn truy cập Internet đối với các chương trình cụ thể. Bất cứ ai cũng có thể đề nghị một cách tốt để làm điều đó, mà không cần sử dụng bất kỳ phần mềm cụ thể nào?

Câu trả lời:


31

Giải pháp cho tôi tình cờ là thẳng tiến.

  1. Tạo, xác nhận nhóm mới ; thêm người dùng cần thiết vào nhóm này:
    • Tạo nên: groupadd no-internet
    • Xác thực: grep no-internet /etc/group
    • Thêm người dùng: useradd -g no-internet username

      Lưu ý: Nếu bạn đang sửa đổi người dùng hiện có, bạn nên chạy: usermod -a -G no-internet userName kiểm tra với:sudo groups userName

  2. Tạo một tập lệnh trong đường dẫn của bạn và làm cho nó có thể thực thi được:
    • Tạo nên: nano /home/username/.local/bin/no-internet
    • Thực thi: chmod 755 /home/username/.local/bin/no-internet
    • Nội dung: #!/bin/bash
                    sg no-internet "$@"

  3. Thêm quy tắc iptables để bỏ hoạt động mạng cho nhóm không có internet :
    • iptables -I OUTPUT 1 -m owner --gid-owner no-internet -j DROP

      Lưu ý: Đừng quên thực hiện các thay đổi vĩnh viễn, vì vậy nó sẽ được áp dụng tự động sau khi khởi động lại . Làm điều đó, phụ thuộc vào phân phối Linux của bạn.


   4. Kiểm tra nó, ví dụ trên Firefox bằng cách chạy:

  • no-internet "firefox"

Trong trường hợp bạn muốn tạo một ngoại lệ và cho phép một chương trình truy cập mạng cục bộ :

  • iptables -A OUTPUT -m owner --gid-owner no-internet -d 192.168.1.0/24 -j ACCEPT
  • iptables -A OUTPUT -m owner --gid-owner no-internet -d 127.0.0.0/8 -j ACCEPT
  • iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP

LƯU Ý: Trong trường hợp sinh sản, các quy tắc sẽ được duy trì. Ví dụ: nếu bạn chạy một chương trình không có quy tắc không có internet và chương trình đó sẽ mở cửa sổ trình duyệt, các quy tắc sẽ vẫn được áp dụng.


2
Một vài lưu ý Ilia: Ad 1: - để sửa đổi người dùng hiện tại: usermod -a -G groupName userName - kiểm tra với: sudo Groups userName Ad 3: - Tôi đã có rất nhiều quy tắc trong iptables, Vị trí của quy tắc mới là rất quan trọng . nên là quy tắc đầu tiên trong chuỗi OUTPUT. Do đó, tôi sử dụng insert: iptables -I OUTPUT 1 -m own --gid-own no-internet -j DROP Để cho phép truy cập vào LAN: đảm bảo các quy tắc ACCEPT nằm trên quy tắc DENY. Hoạt động như một lá bùa. Sử dụng nó ví dụ trên Wifiguard. Prog kiểm tra wlan cho các thiết bị không xác định, nhưng "điện thoại nhà" mỗi khi bắt đầu.

Kịch bản sẽ chỉ truyền lệnh. Nếu bạn thử khởi chạy một chương trình với các tham số, bạn nên sử dụng "$ @" thay vì "$ 1". Vì một số lý do, tôi đã phải tạm thời lưu trữ nó trong một biến để bash xử lý chính xác: cmd = "$ @"; sg không-internet "$ {cmd}"
onse

sử dụng "noi Internet" thay vì "không có internet". Vì bất kỳ lý do gì, Ubuntu 14.04 không thể xử lý dấu gạch ngang khi bạn cố gắng sử dụng sg hoặc chgrp (nó nhắc nhập mật khẩu, sau đó không thành công).

1
unshare -n YourAppToBlock> sử dụng "noi Internet" thay vì "no-internet". có lẽ, 'không \ - internet'?
SarK0Y

Tôi đã thử nó giống như mô tả nhưng đối với tôi, sau khi thêm tôi vào "không có internet" và đặt các bảng ip tôi không thể kết nối với internet nữa (có và không có tập lệnh bash không có internet).
Viatorus
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.