![iptables가 표시된 패킷을 수신할 수 없는 이유는 무엇입니까?](https://linux55.com/image/88907/iptables%EA%B0%80%20%ED%91%9C%EC%8B%9C%EB%90%9C%20%ED%8C%A8%ED%82%B7%EC%9D%84%20%EC%88%98%EC%8B%A0%ED%95%A0%20%EC%88%98%20%EC%97%86%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
ping 명령 옵션에 대해 배우고 있습니다. 그 안에서 패킷의 플래그를 설정하는 -m 옵션을 찾았습니다.
다음 명령은 10으로 표시된 패킷을 192.168.2.65로 보냅니다.
ping -m 10 192.168.2.65
아래 명령을 사용하면 대상에서 패킷을 수신할 수 있습니다.
iptables -A INPUT -m mark --mark 0xa -j ACCEPT
그러나 위의 명령은 표시된 패킷을 수신하지 못했습니다. 위의 iptables 명령은 아무것도 반환하지 않습니다.
참고: 우리 모두는 루트 액세스 권한을 가지고 있습니다.
답변1
이 태그는 내부적이며 패킷이나 헤더의 어디에도 포함되지 않습니다.
INPUT
즉, 실제 아웃바운드 연결을 만들 때 해당 정보가 손실되어 대상 서버의 테이블에는 표시되지 않지만 OUTPUT
원래 시스템의 테이블에는 표시됩니다.
ping에서 태그를 지원하는 목적은 아웃바운드 라우팅 규칙을 허용하는 것입니다.
답변2
@Julie Pelletier의 답변은 100% 정확하지만 이해하지 못할 수도 있습니다.
첫째, 댓글에서 여러 번 언급했듯이 마크업은아니요회선의 이더넷 패킷으로 변환됩니다. 따라서 서버 A에서 서버 B를 ping하면 서버 B는 태그를 감지하지 못합니다. 무엇이든 하려면 서버 A를 단독으로 사용해야 합니다. 따라서 OUTPUT 체인에 규칙을 삽입/추가해야 합니다.보내는 사람무엇이든 보십시오.
이제 어떻게 사용하는지 살펴보겠습니다 iptables
. 먼저 OUTPUT에서 어떤 규칙이 활성화되어 있는지 확인하려고 합니다.
root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
root@roran:~#
글쎄, 규칙은 없습니다. 규칙을 정의해 보겠습니다.
root@roran:~# iptables -I OUTPUT -m mark --mark 0xa -j ACCEPT
root@roran:~#
보시다시피 출력이 없습니다. 그러나 이제 커널 테이블에는 다음 항목이 있습니다.
root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 177 packets, 120K bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0xa
root@roran:~#
아직 패킷이 전송되지 않았기 때문에 "pkts" 및 "bytes" 열은 모두 0입니다. 이제 다른 서버에 핑을 보내면,아니요태그 설정:
root@roran:~# ping -c 1 bermuda
PING bermuda (192.168.178.2) 56(84) bytes of data.
64 bytes from bermuda (192.168.178.2): icmp_seq=1 ttl=64 time=0.331 ms
[... some more lines omitted]
그 후에도 커널 테이블은 여전히 아무것도 일치하지 않습니다.
root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 348 packets, 160K bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0xa
root@roran:~#
다음으로, 태그 세트를 사용하여 핑을 시도해 보세요.
root@roran:~# ping -m 10 -c 1 bermuda
PING bermuda (192.168.178.2) 56(84) bytes of data.
64 bytes from bermuda (192.168.178.2): icmp_seq=1 ttl=64 time=0.324 ms
[... some more lines omitted]
테이블을 다시 살펴보십시오.
root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 631 packets, 319K bytes)
pkts bytes target prot opt in out source destination
1 84 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0xa
root@roran:~#
이제 규칙은 84바이트 길이의 패킷을 찾았습니다.
시험해보고 싶다면 태그가 붙은 패킷이 컴퓨터를 떠나는 것을 방지하고 태그가 있든 없든 다른 컴퓨터를 ping하는 것을 방지하기 위해 이 후에 iptables -F OUTPUT
테이블을 지우십시오 . iptables -I OUTPUT -m mark --mark 0x0a -j REJECT
이제 표시된 패킷은 규칙에 따라 삭제되므로 응답을 받지 못하는 것을 볼 수 있습니다.