Câu trả lời:
Với -p tcp
tùy chọn, mô-đun tcp đã được tải và do đó nó hơi dư thừa và không bắt buộc phải sử dụng -m tcp
tùy chọn này và tôi không thấy bất kỳ lý do nào khiến việc sử dụng tùy chọn này sẽ giúp quy tắc an toàn hơn.
Vui lòng xem trang người dùng iptables để hiểu rõ hơn và so sánh:
Giao thức -p, --protatio [!]
Giao thức của quy tắc hoặc của gói để kiểm tra. Giao thức được chỉ định có thể là một trong các tcp, udp, icmp hoặc tất cả hoặc nó có thể là một giá trị số, đại diện cho một trong các giao thức này hoặc một giao thức khác. Tên giao thức từ / etc / giao thức cũng được cho phép. Một "!" đối số trước khi giao thức đảo ngược kiểm tra. Số không tương đương với tất cả. Tất cả giao thức sẽ khớp với tất cả các giao thức và được coi là mặc định khi tùy chọn này bị bỏ qua.
...
Phần mở rộng phù hợp
iptables có thể sử dụng các mô-đun khớp gói mở rộng. Chúng được tải theo hai cách: ngầm định, khi -p hoặc --protatio được chỉ định hoặc với các tùy chọn -m hoặc --match, theo sau là tên mô-đun phù hợp; sau đó, các tùy chọn dòng lệnh bổ sung khác nhau sẽ khả dụng, tùy thuộc vào mô-đun cụ thể. Bạn có thể chỉ định nhiều mô-đun khớp mở rộng trong một dòng và bạn có thể sử dụng các tùy chọn -h hoặc --help sau khi mô-đun được chỉ định để nhận trợ giúp cụ thể cho mô-đun đó.
Và để biết danh sách các tùy chọn có sẵn với -p tcp
xem tại đây:
http://ipset.netfilter.org/iptables-extensions.man.html#lbCF
Như đã nêu ở trên, với việc sử dụng -m
tùy chọn, có thể thêm các mô-đun mở rộng và sau đó có nhiều tùy chọn phù hợp hơn. Ví dụ mô-đun cpu :
CPU
[!] - số điện thoại
Kết hợp cpu xử lý gói này. cpus được đánh số từ 0 đến NR_CPUS-1 Có thể được sử dụng kết hợp với RPS (Chỉ đạo gói từ xa) hoặc các NIC đa cấp để phân tán lưu lượng mạng trên các hàng đợi khác nhau.
Thí dụ:
iptables -t nat -A PREROUTING -p tcp --dport 80 -m cpu --cpu 0 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -p tcp --dport 80 -m cpu --cpu 1 -j REDIRECT --to-port 8081
Có sẵn kể từ Linux 2.6.36.
Danh sách đầy đủ các phần mở rộng iptables.
Câu hỏi thêm từ OP: Tôi không hiểu những gì -m phù hợp. Chuỗi nào? -m tcp phù hợp với những gì? Nó cố gắng tìm từ "tcp" ở đâu?
Trả lời: -m
là để khớp tên mô-đun và không phải chuỗi. Bằng cách sử dụng một mô-đun cụ thể, bạn có được các tùy chọn nhất định để phù hợp. Xem ví dụ mô-đun cpu ở trên. Với -m tcp
mô-đun tcp được tải. Mô-đun tcp cho phép các tùy chọn nhất định: --dport, --sport, --tcp-flags, --syn, --tcp-option
sử dụng trong các quy tắc iptables. Nhưng việc sử dụng -p tcp
đã kích hoạt mô-đun tcp, đó là lý do tại sao người ta vẫn có thể sử dụng các tùy chọn đó ngay cả khi không sử dụng -m tcp
. Hy vọng nó sẽ xóa tất cả sự nhầm lẫn của bạn.
-m
tùy chọn thực sự được sử dụng để tải extension modules
cung cấp tùy chọn bổ sung. Xem câu trả lời cập nhật của tôi và các liên kết ví dụ.
-m tcp
tùy chọn. --dport
là một phần của mô-đun tcp và sẽ chỉ hoạt động với -p tcp
. Vui lòng tham khảo câu trả lời của tôi một lần nữa.