Câu trả lời:
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 ipset
và 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
và -o lo
chắc chắn sẽ gây ra sự cố cho một số ứng dụng nhất định.
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
Đâ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
lo
trong ví dụ trên được loại trừ khỏi trạng thái khớp và luôn được phép.
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
yourIPaddress
tô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 22
trong 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?
-p tcp
này rất quan trọng ở đây vì --dport
không hoạt động mà không có nó. Tôi cũng sẽ đề nghị sử dụng -j REJECT
thay DROP
vì bởi vì REJECT
làm cho cổng giống hệt với cổng đóng và DROP
là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 DROP
các cổng được cấu hình từ các cổng thực sự đóng.
Dưới đây là ví dụ làm việc đầy đủ.
Cũng làm cho các ứng dụng hoạt động (re: nhận xét của tôi về Keepass không bắt đầu)