iptables가 표시된 패킷을 수신하지 못하는 이유는 무엇입니까?

iptables가 표시된 패킷을 수신하지 못하는 이유는 무엇입니까?

나는 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입니다. 이제 다른 서버에 ping을 보내면없이표시 설정:

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바이트의 패킷 하나를 찾았습니다.

실험하고 싶다면 iptables -F OUTPUT테이블을 정리하세요. iptables -I OUTPUT -m mark --mark 0x0a -j REJECT표시된 패킷이 시스템 밖으로 나가는 것을 방지하려면 표시가 있거나 없는 다른 시스템에 ping을 보내십시오. 이제 규칙에 따라 해당 패킷이 삭제되므로 표시된 패킷이 응답을 받지 못하는 것을 볼 수 있습니다.

관련 정보