WireGuardはネットワーク上の単一のサービスへのアクセスを許可します

WireGuardはネットワーク上の単一のサービスへのアクセスを許可します

私はRaspberry PiでWireGuardサーバーを運用しています。参考:画像。ピアに次の 2 つのことを許可します。

  1. SMB経由で単一のNASに接続する
  2. 同じNASにpingする

これをアーカイブするために、次の iptables ルールを作成しました (wg0は WireGuard インターフェイス、eth0つまり私のネットワークに向かうインターフェイスです)。

# Reset (flush) rules
iptables -t nat -F
iptables -F

# Allow WireGuard traffic
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT

# Deny any forward traffic by default
iptables --policy FORWARD DROP

# Allow SAMBA traffic to NAS
NAS="192.168.178.23/32"
iptables -A FORWARD -i wg0 -p tcp --dport 445 -d "$NAS" -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -o wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow ICMP echo request
iptables -A FORWARD -i wg0 -p icmp --icmp-type 8 -d "$NAS" -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -o wg0 -p icmp --icmp-type 0 -m state --state RELATED,ESTABLISHED -j ACCEPT

# NAT tunnel IP to internal IP
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

これらは機能するため、WireGuard 経由で接続すると、SMB 経由で NAS を ping してマウントできますが、ネットワーク内の他のサービスに ping したり、NAS の HTTP インターフェイスにアクセスしたりすることはできません。

ただし、自分が何をしたのかを正確に理解するために、いくつか質問があります。

  1. INPUT/OUTPUTポリシーを に設定してもDROP何も機能しません。 で受信した WireGuard UDP パケットがwg0ポリシーによってドロップされるためではないかと考えています。
  2. とにかくポリシーを設定し、ALLOWからのトラフィックと へのトラフィックにルールを追加するとwg0、コンテナーは 経由で何にも接続できなくなりeth0FORWARDからのトラフィックのみが許可されるようになりますwg0
  3. RELATED,ESTABLISHEDトラフィックを許可するルールは、wg0TCP:445 または ICMP:echo-r​​equest のいずれかに応答するトラフィックにのみ一致する必要があります。そこでさらに具体的にする必要はありません (例: ポート/プロトコルの一致)。
  4. ALLOWエコー応答のルールは必要ありませんRELATED,ESTABLISHED。上位のトラフィックを許可する、あまり具体的でないルールが、その前に一致するからです。
  5. チェーン上のすべてのフィルタリングにより、TCP:445 または ICM:echo-r​​equest 上の NAS 向けではないトラフィックは、とにかく「ここまで」到達しないので、テーブルチェーンFORWARDでフィルタリングする必要はないと私は考えています。これは正しいですか?natPOSTROUTING

答え1

質問に簡単にお答えします:

  1. はい
  2. INPUT/チェーンOUTPUTは、ローカルソケットとの接続に使用されます。全てインターフェース(lo、、など)。通常、デフォルトですべての送信をブロックすることeth0wg0望ましくありません。なぜなら、通常は当然のこととして認識しているもの(DNS、DHCP、NTP、ループバック接続を使用するその他のプロセスなど)のトラブルシューティングに時間を費やすことになるからです。
  3. はい。通常は、RELATED,ESTABLISHED追加の条件なしですべてを許可するだけで問題ありません (すでに一方の方法で接続を許可している場合は、反対方向に返される対称的な応答も問題ありません)
  4. はい
  5. はい

私はこう思うiptables 処理フローチャートこれがどのように機能するかをよりよく理解するのに役立ちます:

iptables 処理フローチャート

ルールを次のように記述します。

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# INPUT chain of filter table:

# drop known bad packets
iptables -A INPUT -m state --state INVALID -j DROP
# accept responses to established connections
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# accept ICMP packets
iptables -A INPUT -p icmp -J ACCEPT
# accept loopback connections
iptables -A INPUT -i lo -J ACCEPT
# accept connections to WireGuard listen port
iptables -A INPUT -p udp --dport 51820 -J ACCEPT

# FORWARD chain of filter table:

# drop known bad packets
iptables -A FORWARD -m state --state INVALID -j DROP
# forward responses to established connections
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# forward ICMP packets from WireGuard network to NAS
iptables -A FORWARD -i wg0 -d 192.168.178.23 -p icmp -J ACCEPT
# forward SMB connections from WireGuard network to NAS
iptables -A FORWARD -i wg0 -d 192.168.178.23 -p tcp --dport 445 -J ACCEPT

# POSTROUTING chain of nat table:

# masquerade all packets forwarded to LAN
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

関連情報