iptables 규칙 추적

iptables 규칙 추적

오늘 처음으로 iptables를 파헤치기 시작했습니다. 너무 순진해서 죄송합니다.

참고로 제가 사용하고 있는

  • 우분투 22.04.4 LTS(잼 젤리피쉬)
  • iptables v1.8.7(nf_tables)
  • UFW 0.36.1

이제 나는 ufw가 단지 iptables의 래퍼일 뿐이라는 것을 알고 있습니다(또는 최근에 배웠습니다). 나는 뒤에서 무슨 일이 일어나고 있는지 알고 싶다고 결심하고 책을 읽고 탐구하기 시작했습니다. iptables가 ufw로 패킷을 처리하는 방법을 이해할 수 없는 것 같습니다. INPUT체인부터 시작 하겠습니다 . 저는 이것이 들어오는 패킷이 시작되는 곳이라고 믿습니다.

Chain INPUT (policy DROP)
target                   prot opt source   destination
ufw-before-logging-input all  --  anywhere anywhere
ufw-before-input         all  --  anywhere anywhere
ufw-after-input          all  --  anywhere anywhere
ufw-after-logging-input  all  --  anywhere anywhere
ufw-reject-input         all  --  anywhere anywhere
ufw-track-input          all  --  anywhere anywhere

내가 모든 것을 올바르게 이해했다면 여기의 첫 번째 줄은 ufw-before-logging-input all -- anywhere anywhere어느 곳에서 어떤 포트로든 들어오는 모든 패킷이 체인을 따라 전달된다는 것을 의미합니다 ufw-before-logging-input. 수락, 삭제 또는 거부되지 않고 해당 체인에서 반환되면 다음 체인으로 전달됩니다. 이 경우 ufw-before-input수락, 삭제 또는 거부될 때까지(즉, 마주칠 때까지 작업이 종료됩니다) ).

좋아요, 모든 패킷이 전달될 첫 번째 체인인 를 살펴보겠습니다 ufw-before-logging-input.

Chain ufw-before-logging-input (1 references)
target     prot opt source               destination

여긴 정말 아무것도 없으니까 ufw-before-input체인 으로 넘어가자

Chain ufw-before-input (1 references)
target           prot opt source   destination
ACCEPT           all  --  anywhere anywhere
ACCEPT           all  --  anywhere anywhere     ctstate RELATED,ESTABLISHED
ufw-logging-deny all  --  anywhere anywhere     ctstate INVALID
DROP             all  --  anywhere anywhere     ctstate INVALID
ACCEPT           udp  --  anywhere anywhere     udp spt:bootps dpt:bootpc
ufw-not-local    all  --  anywhere anywhere
ACCEPT           udp  --  anywhere host.name    udp dpt:mdns
ACCEPT           udp  --  anywhere w.x.y.z      udp dpt:num
ufw-user-input   all  --  anywhere anywhere

이것이 내가 혼란스러워하는 곳입니다. 첫 번째 줄은 우리가 모든 패킷을 받아들이는 것처럼 보이지만 ACCEPT all -- anywhere anywhere... 내 방화벽 규칙은 작동하고 트래픽을 차단합니다.

그렇다면 내가 여기서 무엇을 놓치고 있는 걸까요?

(참고로 이 내용을 아래에 게시해 보세요.스택 오버플로, 하지만 그들은 나를 여기로 보냈습니다. Google 검색을 하다가 다른 곳에서 이 내용이 반복되는 경우를 대비해 이 내용을 포함하세요. )

답변1

그렇다면 내가 여기서 무엇을 놓치고 있는 걸까요?

이것-v옵션~을 위한말 수가 많은:

-v, --verbose

자세한 출력. 이 옵션list 명령이 인터페이스 이름을 표시하도록 합니다., 규칙 옵션(있는 경우) 및 TOS 마스크입니다. 패킷 및 바이트 카운터도 나열됩니다. [...]

다음과 같은 것을 사용해 본 적이 있을 것입니다:

# iptables -L  ufw-before-input
Chain ufw-before-input (1 references)  
target            prot  opt  source    destination                                        
ACCEPT            all   --   anywhere  anywhere                                           
ACCEPT            all   --   anywhere  anywhere         ctstate RELATED,ESTABLISHED      
ufw-logging-deny  all   --   anywhere  anywhere         ctstate INVALID                  
DROP              all   --   anywhere  anywhere         ctstate INVALID
[...]

인터페이스가 표시되지 않습니다. 반대로 -v:

# iptables -v -L ufw-before-input
Chain ufw-before-input (1 references)
pkts  bytes  target            prot  opt  in   out  source    destination                                        
   6    504  ACCEPT            all   --   lo   any  anywhere  anywhere                                           
  12   1032  ACCEPT            all   --   any  any  anywhere  anywhere         ctstate RELATED,ESTABLISHED      
   0      0  ufw-logging-deny  all   --   any  any  anywhere  anywhere         ctstate INVALID                  
   0      0  DROP              all   --   any  any  anywhere  anywhere         ctstate INVALID                  
[...]

ACCEPT 규칙은 입력 인터페이스에 대한 것임을 알 수 있습니다 lo. 무조건 허용됩니다.루프백교통, 그리고오직lo인터페이스 에서 . 다른 모든 것은 체인 순회를 계속합니다.

그럼에도 불구하고 이 형식은 특히 Q&A에 규칙 세트를 표시할 때 재현성에 적합하지 않습니다. 특수한 일치(예: 메모리 상태 있음) 일치 또는 대상의 상태를 확인하는 것이 여전히 유용할 수 있습니다. 이 중 하나를 사용하는 것이 좋습니다iptables -S또는iptables-save(전체 규칙 세트 또는 적어도 전체 테이블의 경우)

# iptables -S ufw-before-input
-N ufw-before-input
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP
[...]

iptables -S-v다른 상태에서 카운터를 표시하는 옵션 도 허용됩니다 . 또한 iptables-save카운터를 표시하는 데에도 사용하십시오 iptables-save -c. 저장 및 복원을 허용하는 규칙 세트에 적합한 출력을 iptables-save제공하도록 설계되었습니다 . 추가 디버깅 정보를 표시하기 위해 with 를 두 번 (예: ) iptables-restore사용할 수도 있습니다 .-v-vviptables

관련 정보