私はRaspberry PiでWireGuardサーバーを運用しています。参考:画像。ピアに次の 2 つのことを許可します。
- SMB経由で単一のNASに接続する
- 同じ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 インターフェイスにアクセスしたりすることはできません。
ただし、自分が何をしたのかを正確に理解するために、いくつか質問があります。
INPUT
/OUTPUT
ポリシーを に設定してもDROP
何も機能しません。 で受信した WireGuard UDP パケットがwg0
ポリシーによってドロップされるためではないかと考えています。- とにかくポリシーを設定し、
ALLOW
からのトラフィックと へのトラフィックにルールを追加するとwg0
、コンテナーは 経由で何にも接続できなくなりeth0
、FORWARD
からのトラフィックのみが許可されるようになりますwg0
。 RELATED,ESTABLISHED
トラフィックを許可するルールは、wg0
TCP:445 または ICMP:echo-request のいずれかに応答するトラフィックにのみ一致する必要があります。そこでさらに具体的にする必要はありません (例: ポート/プロトコルの一致)。ALLOW
エコー応答のルールは必要ありませんRELATED,ESTABLISHED
。上位のトラフィックを許可する、あまり具体的でないルールが、その前に一致するからです。- チェーン上のすべてのフィルタリングにより、TCP:445 または ICM:echo-request 上の NAS 向けではないトラフィックは、とにかく「ここまで」到達しないので、テーブルチェーン
FORWARD
でフィルタリングする必要はないと私は考えています。これは正しいですか?nat
POSTROUTING
答え1
質問に簡単にお答えします:
- はい
INPUT
/チェーンOUTPUT
は、ローカルソケットとの接続に使用されます。全てインターフェース(lo
、、など)。通常、デフォルトですべての送信をブロックすることeth0
はwg0
望ましくありません。なぜなら、通常は当然のこととして認識しているもの(DNS、DHCP、NTP、ループバック接続を使用するその他のプロセスなど)のトラブルシューティングに時間を費やすことになるからです。- はい。通常は、
RELATED,ESTABLISHED
追加の条件なしですべてを許可するだけで問題ありません (すでに一方の方法で接続を許可している場合は、反対方向に返される対称的な応答も問題ありません) - はい
- はい
私はこう思う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