Các câu trả lời khác đang sử dụng iptables -I
trong 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. -I
là 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. -A
là 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 -I
mà 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 DROP
thì iptables sẽ giảm tất cả lưu lượng truy cập, bất kể bạn có bất kỳ ACCEPT
quy 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 -I
tham 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 2
thêm quy tắc mới làm quy tắc số 2 và chuyển quy tắc DROP sang số 3.
iptables
hỗ 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