Ubuntu 라우터는 nftables를 사용하여 트래픽을 차단합니다.

Ubuntu 라우터는 nftables를 사용하여 트래픽을 차단합니다.

우분투에서 간단한 라우터를 설정하려고 합니다. 두 가지 네트워크 인터페이스가 있습니다. eth0 - 인터넷에 연결된 유선 네트워크 인터페이스, wlan0 - IP 주소 10.0.9.1을 사용하여 AP로 구성됩니다.

IPv4 전달이 활성화되었습니다.

다음 구성으로 dnsmasq를 사용합니다.

interface=wlan0
dhcp-range=10.0.9.2,10.0.9.30,255.255.255.0,12h
dhcp-host=40:a3:6b:c1:9a:54,10.0.9.100

장치가 내 AP에 연결되고 할당된 IP 주소를 올바르게 가져옵니다.

이제 NAT를 구성하십시오. 내 nftables 구성은 다음과 같습니다.

table ip nat {
        chain prerouting {
                type nat hook prerouting priority dstnat; policy accept;
                iif "eth0" tcp dport 8010 dnat to 10.0.9.100:80
                iif "eth0" tcp dport 9001 dnat to 10.0.9.100:9001
        }

        chain postrouting {
                type nat hook postrouting priority srcnat; policy accept;
                oif "eth0" masquerade
        }
}

이 설정은 예상대로 작동합니다.

  • wlan0에 연결된 장치는 eth0을 통해 인터넷에 액세스할 수 있습니다.
  • wlan0에 연결된 장치는 라우터의 10.0.9.1에 있는 서버에 연결할 수 있습니다.
  • IP 10.0.9.1.100이 있는 장치는 포트 8010 및 9001의 eth0을 통해 액세스할 수 있습니다.

하지만 무단 접근으로부터 기기를 보호하기 위해 간단한 방화벽을 설정하고 싶습니다. 이것이 내가 nftables 구성에 추가한 것입니다:

table inet filter {
        chain input {
                type filter hook input priority filter; policy drop;
                ct state vmap { established : accept, related : accept, invalid : drop }
                iifname lo accept
                icmp type echo-request limit rate 5/second accept
                ip protocol icmp drop

                iif "eth0" tcp dport { ssh, 8080 } accept
        }

        chain forward {
                type filter hook forward priority 0; policy drop;

                ct status dnat accept
                iif "wlan0" oif "wlan0" accept
                iif "wlan0" oif "eth0" accept
                iif "eth0" oif "wlan0" ct state established,related accept
        }

        chain output {
                type filter hook output priority filter; policy accept;
        }
}

이 설정은 예상대로 작동하지 않습니다.

  • wlan0에 연결된 장치할 수 없다eth0을 통해 인터넷에 접속
  • wlan0에 연결된 장치할 수 없다라우터에서 서버 10.0.9.1에 연결
  • IP 10.0.9.1.100이 있는 장치는 포트 8010 및 9001의 eth0을 통해 액세스할 수 있습니다.

nfconfig에서 모든 보호를 비활성화하면 예상대로 작동합니다.

table inet filter {
        chain input {
                type filter hook input priority filter; policy accept;
        }

        chain forward {
                type filter hook forward priority 0; policy accept;
        }

        chain output {
                type filter hook output priority filter; policy accept;
        }
}

해당 섹션을 편집하면 chain input작업이 중지됩니다.

저는 nftables를 처음 접했고, nftables를 작동시키는 방법을 알아내려고 하루 종일 보냈습니다. 어떤 아이디어가 있나요?

감사해요!

답변1

이것앞으로체인은 무선 LAN에서 인터넷으로의 전달을 허용합니다. 전체 규칙 세트에서 허용되지 않는 것은 쿼리입니다DNS라우터에 내장된 DNS 서버무선랜 0. 기본적으로 이 DNS 서버는 DHCP 섹션의 클라이언트에 대해 구성됩니다.DNS.

이러한 DNS 흐름은 전달되지 않으므로 사용되지 않습니다.앞으로훅. 수신된 수신 스트림입니다.입력하다훅. DNS가 없으면 무선 노드는 인터넷에 연결할 수는 있지만 연결할 위치를 확인할 수 없으므로 전체적인 효과는 동일합니다. 즉, 인터넷이 없습니다.

쿼리 시 라우터의 서비스를 사용할 수 있도록 허용합니다.무선랜 0, 따라서 DNS 쿼리가 포함됩니다.

nft add rule inet filter input iif wlan0 accept

규칙 앞에 배치하지 않는 한 핑 속도가 제한됩니다 ip protocol icmp. 그럼에도 불구하고 이 ip protocol icmp drop규칙은 필요하지 않으며 기본 정책이 이미 설정되어 있으므로 제거할 수 있습니다.줄이다단, 무선 노드에서 수신된 트래픽을 필터링하려는 경우는 제외됩니다.

(a) 더 엄격한 규칙을 사용하여 소수의 서비스만 허용하는 경우 만일의 경우를 대비하여 DNS의 경우 최소 53/TCP+UDP, DHCP의 경우 포트 67/UDPDNSDHCP에 전적으로 의존하지 않는 원시 소켓을 허용해야 합니다.무선랜 0.

관련 정보