iptables: cho phép một số ips nhất định và chặn tất cả các kết nối khác


26

Làm cách nào để cho phép một số ips nhất định và chặn tất cả các kết nối khác trong iptables?


Gilles thể hiện khái niệm như sau: Thêm quy tắc ACCEPT cho từng điều cụ thể mà bạn muốn cho phép theo IP nguồn hoặc bằng cấp khác, sau đó đặt chính sách mặc định thành DỰ ÁN.
Caleb

Câu trả lời:


27

Tôi đã viết một bài đăng blog về các quy tắc Iptables cơ bản cho người dùng máy tính để bàn từ lâu và có lẽ bạn nên đọc nó, và bài viết được liên kết của nó về thiết kế tường lửa Stateful . Nhưng kernel trước 2.6,39 (bao gồm ipsetvà bạn có thể muốn sử dụng nó cho IP của danh sách trắng nếu bạn có nhiều hơn 10 đến danh sách trắng (trong đó 10 là tùy ý)).

Trước tiên, xử lý các trạng thái mà chúng tôi biết rằng chúng tôi muốn chấp nhận hoặc loại bỏ và giao diện.

iptables -P FORWARD DROP # we aren't a router
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP # Drop everything we don't accept

Nếu bạn chỉ muốn thực hiện một sự cho phép bằng IP mà không có trạng thái

iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP

bạn có thể gặp phải vấn đề khi làm điều này và tôi khuyên bạn nên sử dụng trạng thái để làm cho cuộc sống của bạn dễ dàng hơn. Ví dụ, không cho phép -i lo-o lochắc chắn sẽ gây ra sự cố cho một số ứng dụng nhất định.


4
Thay vì DROP, bạn nên THAM KHẢO các gói không mong muốn, vì nó giúp chẩn đoán các vấn đề dễ dàng hơn rất nhiều và ngăn ngừa thời gian chờ. Xem Từ chối các gói IP có lỗi ICMP, hoặc chỉ bỏ chúng?
Gilles 'SO- ngừng trở nên xấu xa'

Tôi đã thử cả hai thiết lập và KeePass2 sẽ không bắt đầu, có ý kiến ​​gì không? Ngoài ra, nếu tôi làm điều iptables -Fđó có nghĩa là phải xóa tất cả các quy tắc, thậm chí không thể ping
ubfox.com

@PawelCioch tại sao KeePass2 vẫn cần kết nối internet?
Alex

@Alex để lưu trữ tệp DB ở vị trí từ xa, điều này tôi muốn IP đơn. Nhưng tôi tìm ra mọi thứ, thiết lập phức tạp hơn ví dụ ở đây
Pawel Cioch

10

Đây là một ví dụ (chưa được kiểm tra!) Chỉ chặn các kết nối đến . Các kết nối qua giao diện loopback, đến từ 192.168.3.x, ICMP hoặc tới cổng SSH đều được cho phép. Tất cả các kết nối khác đều bị từ chối.

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT

@Gilles để sử dụng đúng các trạng thái LIÊN QUAN và THÀNH LẬP, bạn cần khớp gói ban đầu làm trạng thái MỚI. lotrong ví dụ trên được loại trừ khỏi trạng thái khớp và luôn được phép.
chim cánh cụt359

@ penguin359: Bạn có thể giải thích lý do tại sao MỚI là cần thiết? Tôi ở xa một chuyên gia về iptables, tôi đã sao chép một phần các quy tắc này từ bộ định tuyến gia đình của mình, không phù hợp với MỚI. Theo như tôi hiểu, tất cả những gì còn lại sau quy tắc đầu tiên là các gói MỚI (hoặc KHÔNG GIỚI HẠN). (Nếu tôi ở quá xa và bạn không thể giải thích trong một bình luận, hãy đăng các phiên bản của bạn với lời giải thích và tôi sẽ xóa của tôi.)
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles Tôi luôn bỏ trạng thái INVALID trước khi chấp nhận bất cứ điều gì ... điều này làm cho bất cứ điều gì không phải là LIÊN QUAN, LIÊN QUAN, THÀNH LẬP, phải là trạng thái MỚI. Nhưng tôi không biết bất kỳ lý do nào mà mọi thứ khác phải chỉ định MỚI. Về lý thuyết mặc dù nếu bạn không xử lý INVALID và bạn không chỉ định MỚI, cuối cùng bạn có thể chấp nhận INVALID. Nhưng một khi INVALID được xử lý, đối với tôi, việc kiểm tra trạng thái MỚI trên mọi quy tắc đơn giản chỉ cần xử lý nhiều hơn cho gói.
xenoterracide

@Gilles cũng là một chính sách từ chối mặc định là xấu, bởi vì nó gửi một gói từ chối cho mỗi gói được nhận, điều này tạo ra một cuộc tấn công DOS.
xenoterracide

@xenoterracide: Điểm tốt. Nên sử dụng DỰ ÁN bao giờ? Tôi đã hỏi: Từ chối các gói IP có lỗi ICMP, hoặc chỉ bỏ chúng?
Gilles 'SO- ngừng trở nên xấu xa'

7

Quy tắc dưới đây sẽ chỉ cho phép IP của bạn và Chặn tất cả các IP khác qua cổng 22 hoặc ssh. Kiểm tra với một thiết bị đầu cuối mới trước khi ngắt kết nối.

iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP

3
cảm ơn bạn đã trả lời ngắn gọn Điều này sẽ thay đổi như thế nào nếu tôi muốn cho phép một vài IP và dải IP. Ở vị trí của yourIPaddresstôi có thể thêm một vài địa chỉ IP và các dãy? Và nếu tôi đang sử dụng SSH trên một cổng không chuẩn như 2888, thì lệnh sẽ thay đổi 22trong ví dụ của bạn thành 2288? Ngoài ra, điều này cũng sẽ chặn rsync, sftp, vv cho máy chủ này từ tất cả các IP ngoại trừ các IP được phép?
PKHunter

1
Lưu ý rằng điều -p tcpnày rất quan trọng ở đây vì --dportkhông hoạt động mà không có nó. Tôi cũng sẽ đề nghị sử dụng -j REJECTthay DROPvì bởi vì REJECTlàm cho cổng giống hệt với cổng đóng và DROPlàm cho các gói được chuyển đến cổng đó có màu đen. Trong thực tế, kẻ tấn công từ xa có thể phát hiện DROPcác cổng được cấu hình từ các cổng thực sự đóng.
Mikko Rantalainen

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.