
현재 어떻게 작동하는지 배우려고 노력 중입니다 iptables
. 나는 다음을 읽었습니다:
패킷이 도착하면(또는 체인에 따라 떠날 때) iptables는 패킷을 이러한 체인의 규칙과 하나씩 일치시킵니다. 일치하는 항목을 찾으면 대상으로 점프하여 관련된 작업을 수행합니다. 어떤 규칙과도 일치하는 항목을 찾지 못하면 체인의 기본 정책이 지시하는 대로 수행합니다. 기본 정책도 대상입니다.1
이제 필터 테이블에 INPUT 체인을 다음과 같이 설정했습니다.
$ iptables -S INPUT
-P INPUT ACCEPT
-A INPUT -i wg0 -j ACCEPT
이제 wg0 인터페이스를 사용하여 다른 시스템(10.0.0.2)에서 시스템(10.0.0.1)을 ping할 수 있습니다.
를 사용하면 iptables -S INPUT -v
패킷 및 바이트 카운터가 증가하므로 규칙이 일치하는 것을 볼 수도 있습니다.
이를 추가 로 확인하여 로그 대상을 추가합니다 iptables -I INPUT -i wg0 -j LOG --log-prefix "INPUT-wg0: "
. 이제 dmesg -w
.
그러나 이제 기본 정책을 DROP으로 설정하면 더 이상 패킷이 기록되지 않으며 핑도 더 이상 가능하지 않습니다.
$ iptables -S INPUT
-P INPUT DROP
-A INPUT -i wg0 -j LOG --log-prefix "INPUT-wg0: "
-A INPUT -i wg0 -j ACCEPT
나는 이것을 이해하지 못한다. 첫 번째 일치 규칙의 대상이 사용될 것이라고 생각했습니다. (LOG 대상은 예외인 것 같습니다)
이전에 일치한 규칙은 기본 정책이 변경된 후에도 여전히 일치해야 합니다. 그렇죠?
누군가 이것을 설명해 준다면 매우 기쁠 것입니다.연결나에게 하는 행동.
iptables-save
핑 작업 중 출력 :
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:18:42 2022
*mangle
:PREROUTING ACCEPT [31842:2917695]
:INPUT ACCEPT [28740:2664375]
:FORWARD ACCEPT [3102:253320]
:OUTPUT ACCEPT [23607:5802958]
:POSTROUTING ACCEPT [26366:6035482]
COMMIT
# Completed on Fri Dec 23 06:18:42 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:18:42 2022
*raw
:PREROUTING ACCEPT [217327:66651913]
:OUTPUT ACCEPT [102949:46884985]
COMMIT
# Completed on Fri Dec 23 06:18:42 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:18:42 2022
*nat
:PREROUTING ACCEPT [115:6688]
:INPUT ACCEPT [49:2632]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [62:3720]
-A POSTROUTING -s 10.0.0.0/24 -o wg0 -j MASQUERADE
COMMIT
# Completed on Fri Dec 23 06:18:42 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:18:42 2022
*filter
:INPUT ACCEPT [974:119665]
:FORWARD ACCEPT [474:28440]
:OUTPUT ACCEPT [558:81105]
-A INPUT -i wg0 -j ACCEPT
-A FORWARD -i wg0 -o wg0 -j ACCEPT
COMMIT
# Completed on Fri Dec 23 06:18:42 2022
iptables-save
INPUT 체인의 기본 정책을 DROP으로 변경하고 핑을 실행한 후의 출력이 더 이상 작동하지 않습니다.
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:22:19 2022
*mangle
:PREROUTING ACCEPT [32468:2982249]
:INPUT ACCEPT [29284:2723905]
:FORWARD ACCEPT [3184:258344]
:OUTPUT ACCEPT [23854:5839963]
:POSTROUTING ACCEPT [26695:6077511]
COMMIT
# Completed on Fri Dec 23 06:22:19 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:22:19 2022
*raw
:PREROUTING ACCEPT [217953:66716467]
:OUTPUT ACCEPT [103193:46921614]
COMMIT
# Completed on Fri Dec 23 06:22:19 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:22:19 2022
*nat
:PREROUTING ACCEPT [165:9268]
:INPUT ACCEPT [73:3868]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [71:4260]
-A POSTROUTING -s 10.0.0.0/24 -o wg0 -j MASQUERADE
COMMIT
# Completed on Fri Dec 23 06:22:19 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:22:19 2022
*filter
:INPUT DROP [205:26532]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [26:9060]
-A INPUT -i wg0 -j ACCEPT
-A FORWARD -i wg0 -o wg0 -j ACCEPT
COMMIT
# Completed on Fri Dec 23 06:22:19 2022
(여기서 언급하지 않은 Wireguard VPN 설정과 관련된 몇 가지 추가 규칙이 있지만 기본 정책 질문과 관련이 없는 것 같습니다.)
답변1
댓글에서 언급했듯이이 답변, 해결책은 eth0 인터페이스에서도 패킷을 허용하는 것이었습니다. wg0 인터페이스는 가상이고 터널을 설정하려면 eth0 인터페이스가 필요하므로 이는 의미가 있습니다.
답변2
규칙은 한 줄씩 순서대로 처리됩니다. 따라서 규칙과 일치하는 항목이 있으면 해당 IP 패킷에 대해 다른 규칙이 처리되지 않습니다. 규칙이 일치하는 패킷에 대해 ACCEPT 대상을 지정하는 경우 패킷은 나머지 규칙 확인을 건너뛰고 대상으로 계속 이동할 수 있습니다. 규칙이 DROP 대상을 지정하는 경우 해당 패킷은 시스템에 대한 액세스가 거부되며 패킷을 보낸 호스트로 아무 것도 다시 전송되지 않습니다.
언급한 대로 다음 규칙 세트에서는 Drop이 먼저 결합되며 패킷을 기록하기 위해 다음 줄로 이동하는 추가 프로세스가 없습니다.
iptables -S INPUT
-P INPUT DROP ***Matched Line***
-A INPUT -i wg0 -j LOG --log-prefix "INPUT-wg0: "
-A INPUT -i wg0 -j ACCEPT
이제 로깅을 추가하고 동시에 패킷을 삭제하려는 경우 이와 같은 방법이 도움이 될 수 있습니다.
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP
자세한 내용은 아래 링크를 참고해주세요. Linux IPTables 방화벽이 삭제한 패킷을 로그 파일에 기록하는 방법