VPN을 통한 트래픽만 허용하는(그리고 ipv6 누출을 방지하기 위해 모든 ipv6 트래픽을 차단하는) 내 Archlinux 배포판에 nftables 방화벽을 설정하려고 합니다.
나는 한동안 그것을 사용해왔고 마침내 웹을 탐색할 수 있는 구성을 얻었습니다. 비록 지금까지 nftable에 대해 내가 알고 있는 바에 따르면 그렇게 할 수는 없었을 것입니다. 규칙 세트는 매우 짧으며 다음과 같습니다.
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
jump base_checks
ip saddr VPN_IP_ADRESS udp sport openvpn accept
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy drop;
ip daddr VPN_IP_ADRESS udp dport openvpn accept
oifname "tun0" accept
}
chain base_checks {
ct state { related, established} accept
ct state invalid drop
}
}
시행착오를 거쳐 길을 찾으려고 노력했고 그 안에는 다른 많은 규칙도 있지만 그게 전부입니다. 먼저 VPN 서버에 연결한 다음 웹을 탐색하면 됩니다. 아웃아웃 체인에서 마지막 규칙을 제거하면 더 이상 웹을 탐색할 수 없습니다.
나는 이것에 대해 완전히 처음이고 아무것도 알지 못하며 배우려고 노력하고 있습니다. 불행하게도 nftables에 대한 문서는 그다지 광범위하지 않아서 지금은 약간 정체되어 있습니다.
지금까지 내가 이해한 바에 따르면 이 설정은 VPN에 대한 연결을 허용해야 하지만 다른 수신 트래픽은 허용해서는 안 됩니다. 하지만 문제 없이 웹을 탐색할 수 있습니다.
왜 작동하는지 그리고 보다 완전한 설정을 위해 nftables 설정을 어떻게 진행해야 하는지 아는 사람이 있습니까?
답변1
state
related
들어오는 트래픽을 사용하고 허용할 수 있습니다 established
. HTTP 트래픽은 요청을 보내는 클라이언트에 의해 시작되며 응답은 established
출력 체인의 규칙에 따라 일치됩니다. 경로가 VPN을 통과한다고 가정하면 규칙은 초기 트래픽을 허용합니다 oif "tun0" accept
.