오늘 처음으로 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
옵션~을 위한말 수가 많은:
자세한 출력. 이 옵션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
-vv
iptables