iptables: --protocol tcp 대 --match tcp, 어떤 설명이 있나요?

iptables: --protocol tcp 대 --match tcp, 어떤 설명이 있나요?

다음과 같이 필터링되는 게시물이 많이 있습니다 iptables.

-A INPUT -p tcp -m tcp --dport xxxxx -j ACCEPT

이것은 내 줄과 동일해야 합니다.

--append INPUT --protocol tcp --match tcp --destination-port xxxxx --jump ACCEPT

이 줄에 대한 내 질문은--TCP 일치우리처럼~해야 한다이미 합의를 알고 있음TCP 입니다, 아니면 이것이 더 많은 것을 유발할까요? 나는 이 맥락에서 그것이 무엇을 의미하는지 이해하지 못합니다.

답변1

아래 설명에서 모듈은 다음을 의미합니다.사용자 모드 iptables 명령커널 모듈이 아닌 모듈입니다(물론 관련이 있지만 설명은 필요하지 않습니다).

iptablesIPv4가 관련되어 있습니다. 모든IPv4 패킷하나 있다규약대지. --protocol tcp내장된 기능을 사용하세요iptables코드는 이를 주어진 값과 비교합니다. 베이스iptables명령 자체는 기본 IPv4 계층에 대해 많이 알지 못합니다. 특정 TCP 포트를 확인하는 등 별도의 필요가 없는 경우iptables더 이상은 없습니다. 예를 들어:

iptables -A INPUT -p tcp -j ACCEPT

모듈이 로드되지 않습니다.전송 제어 프로토콜. 그리고 우리는 그를 다시는 볼 수 없을 것입니다 -m tcp.

베이스iptables명령이 포트를 모릅니다. 프로토콜 테스트 후 알 수 없는 옵션을 지정할 때의 배려로,iptables프로토콜 이름이 있는 모듈을 자동으로 로드하는 것이 -m이 옵션의 역할입니다. 따라서 백그라운드에서 옵션을 iptables -A INPUT -p tcp --dport 5555찾을 수 없으면 --dport해당 옵션이 자동으로 -m tcp앞에 삽입됩니다. 이제 --dport옵션을 다시 확인하세요.전송 제어 프로토콜모듈과 모듈은 --dport옵션에 대해 알고 이를 처리합니다. 그렇기 때문에 다음을 수행할 때:

iptables -A INPUT -p tcp --dport 5555

규칙을 덤프하면 iptables-save결과에 다음이 표시됩니다.

-A INPUT -p tcp -m tcp --dport 5555

종종 사람들은 입력하지 않고 -m tcp규칙 덤프에서 결과를 복사하는 것이 더 쉽고 명령에 구문 오류가 없다는 것을 의미하기 때문에 규칙 덤프에서 결과를 복사합니다.

이것을 확신하고 싶다면 아래에서 일어나는 일을 지켜보십시오.스트레스--dportICMP 프로토콜에 대한 옵션을 지정한 -p icmp후 옵션을 제공하거나 제공하지 않는 예 (포트 개념 없음):

# strace iptables -A INPUT -p icmp 2>&1 |egrep 'icmp|write'
execve("/usr/sbin/iptables", ["iptables", "-A", "INPUT", "-p", "icmp"], [/* 15 vars */]) = 0

그리고

# strace iptables -A INPUT -p icmp --dport 5555 2>&1 |egrep 'icmp|write'
execve("/usr/sbin/iptables", ["iptables", "-A", "INPUT", "-p", "icmp", "--dport", "5555"], [/* 15 vars */]) = 0
stat("/usr/lib/x86_64-linux-gnu/xtables/libipt_icmp.so", {st_mode=S_IFREG|0644, st_size=14464, ...}) = 0
open("/usr/lib/x86_64-linux-gnu/xtables/libipt_icmp.so", O_RDONLY|O_CLOEXEC) = 3
getsockopt(3, SOL_IP, IPT_SO_GET_REVISION_MATCH, "icmp\0\177\0\0\207\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0!\0\0\0\0\0", [30]) = 0
write(2, "iptables v1.8.3 (legacy): ", 26iptables v1.8.3 (legacy): ) = 26
write(2, "unknown option \"--dport\"", 24unknown option "--dport") = 24
write(2, "\n", 1
write(2, "Try `iptables -h' or 'iptables -"..., 61Try `iptables -h' or 'iptables --help' for more information.

알 수 없는 iptables 옵션이 존재하여 모듈 로딩이 트리거되었습니다.ICMP(문서 libipt_icmp.so) 계약 때문에ICMP임명되다. 모듈은 해당 옵션도 처리할 수 --dport없으므로iptables명령이 실패했습니다.

관련 정보