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입니다. 이제 다른 서버에 핑을 보내면,아니요태그 설정:

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이제 표시된 패킷은 규칙에 따라 삭제되므로 응답을 받지 못하는 것을 볼 수 있습니다.

관련 정보