Các câu trả lời khác đang sử dụng iptables -Itrong các ví dụ của họ, thường không phải là những gì bạn nên sử dụng.
iptables sẽ thực thi quy tắc đầu tiên phù hợp, vì vậy thứ tự của các quy tắc là rất quan trọng. -Ilà lệnh "insert" và nên được sử dụng với tham số chỉ mục để chỉ định vị trí trong danh sách quy tắc đã cho. -Alà lệnh "chắp thêm", sẽ thêm quy tắc vào cuối danh sách.
Trong một số biến dạng (có lẽ là tất cả) sử dụng -Imà không có tham số chỉ mục sẽ thêm quy tắc vào chỉ mục một, làm cho nó trở thành quy tắc đầu tiên được kiểm tra. Trong trường hợp này nếu lệnh cuối cùng bạn chạy iptables -I INPUT -s tcp 0.0.0.0/0 -j DROPthì iptables sẽ giảm tất cả lưu lượng truy cập, bất kể bạn có bất kỳ ACCEPTquy tắc nào sau đó trong chuỗi hay không.
Đây là một mẫu thiết lập quy tắc chỉ cho phép SSH từ một IP duy nhất:
Bắt đầu mà không có quy tắc:
#> iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Thêm quy tắc "cho phép SSH từ 1.2.3.4" mới:
#>iptables -A INPUT -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT
Chặn SSH từ tất cả các IP khác:
#>iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP
Bây giờ chuỗi INPUT của bạn sẽ trông như sau:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 1.2.3.4 0.0.0.0/0 tcp dpt:22
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Sau này, nếu bạn cần lập danh sách trắng IP thứ hai, bạn có thể sử dụng -Itham số để đặt nó trước quy tắc danh sách đen.
#>iptables -I INPUT 2 -p tcp -s 4.3.2.1 --dport 22 -j ACCEPT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 1.2.3.4 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 4.3.2.1 0.0.0.0/0 tcp dpt:22
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Lưu ý rằng việc sử dụng -I INPUT 2thêm quy tắc mới làm quy tắc số 2 và chuyển quy tắc DROP sang số 3.
iptableshỗ trợ đảo ngược với toán tử bang trong trường hợp bạn muốn thực hiện một mục tiêuDROP. Ví dụ:iptables -I INPUT -p tcp ! -s <permittedIP> -j DROP