Ubuntuルータはnftablesを使用してトラフィックをブロックします。

Ubuntuルータはnftablesを使用してトラフィックをブロックします。

Ubuntuで簡単なルーターを設定しようとしています。 2つのネットワークインターフェイスがあります。 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サーバー無線LAN 0。デフォルトでは、このDNSサーバーはDHCPセクションのクライアント用に構成されています。DNS

これらの DNS フローは転送されないため、使用されません。今後フック。受信した受信ストリーム。入力するフック。 DNSがなければ、ワイヤレスノードはインターネットに接続できますが、接続する場所を確認できないため、全体的な効果は同じです。つまり、インターネットはありません。

クエリでルータのサービスを使用できるようにします。無線LAN 0したがって、DNSクエリが含まれます。

nft add rule inet filter input iif wlan0 accept

ルールの前に配置しない限り、ping速度は制限されますip protocol icmp。それにもかかわらず、このip protocol icmp dropルールは必要なく、既定のポリシーが既に設定されているため削除できます。減らすただし、無線ノードで受信したトラフィックをフィルタリングしたい場合は除外されます。

(a) より厳格なルールを使用して少数のサービスのみを許可する場合 万が一の場合に備えて DNS の場合は最低 53/TCP+UDP、DHCP の場合はポート 67/UDPDNSDHCPに完全に依存しない生のソケットを許可する必要があります。無線LAN 0

関連情報