IPv6用にiptablesとip6tablesの両方を構成したいと思います。しかし、なんらかの理由で、構成内の最後のip6tablesルールが、サーバーへの発信接続(apt-get、wget、ping、ping6など)をブロックします。サーバーはDebian8.1で、これはIPv6が構成されたDOドロップレットです。
設定は次のとおりです。
#!/bin/sh
# Flush all existing first
Sudo iptables -F
# Disable tracking
Sudo iptables -t raw -I PREROUTING -p tcp --dport 80 -j NOTRACK
Sudo iptables -t raw -I PREROUTING -p tcp --dport 22 -j NOTRACK
Sudo iptables -t raw -I OUTPUT -p tcp --dport 80 -j NOTRACK
Sudo iptables -t raw -I OUTPUT -p tcp --dport 22 -j NOTRACK
# Local
Sudo iptables -A INPUT -i lo -j ACCEPT
Sudo iptables -A OUTPUT -o lo -j ACCEPT
# DNS
Sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT
Sudo iptables -A OUTPUT -p udp --sport 53 --dport 1024:65535 -j ACCEPT
# Custom rules
Sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Allow ping from inside
Sudo iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
Sudo iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
# Allow ping from outside
Sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
Sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
# Drop everything else
Sudo iptables -A INPUT -j DROP
# IPv6
# Flush all existing first
Sudo ip6tables -F
# Disable tracking
Sudo ip6tables -t raw -I PREROUTING -p tcp --dport 80 -j NOTRACK
Sudo ip6tables -t raw -I PREROUTING -p tcp --dport 22 -j NOTRACK
Sudo ip6tables -t raw -I OUTPUT -p tcp --dport 80 -j NOTRACK
Sudo ip6tables -t raw -I OUTPUT -p tcp --dport 22 -j NOTRACK
# Local
Sudo ip6tables -A INPUT -i lo -j ACCEPT
Sudo ip6tables -A OUTPUT -o lo -j ACCEPT
# DNS
Sudo ip6tables -A INPUT -p udp --dport 53 -j ACCEPT
Sudo ip6tables -A OUTPUT -p udp --sport 53 --dport 1024:65535 -j ACCEPT
# Custom rules
Sudo ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
Sudo ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
# Allow ping from inside
Sudo ip6tables -A OUTPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
Sudo ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-reply -j ACCEPT
# Allow ping from outside
Sudo ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
Sudo ip6tables -A OUTPUT -p icmpv6 --icmpv6-type echo-reply -j ACCEPT
# Drop everything else
Sudo ip6tables -A INPUT -j DROP
この最後のルール(ip6tables -A INPUT -j DROP)を削除すると、すべて正常に機能します。何が問題なのですか?
PD。一連のルール全体に関する貴重な情報を提供してくれた人々に感謝します。現在機能している構成が必要な場合、これは80ポートと22ポートが開いた、ステートレスの基本的なWebサーバー用です(トラフィックの多いアプリの場合)。
#!/bin/sh
# Flush all existing first
Sudo iptables -F
# Local
Sudo iptables -A INPUT -i lo -j ACCEPT
Sudo iptables -A OUTPUT -o lo -j ACCEPT
# Allow outbound DNS
Sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
Sudo iptables -A INPUT -p udp --sport 53 -j ACCEPT
# Allow inbound HTTP (apt-get, wget etc.)
Sudo iptables -A INPUT -p tcp --sport 80 -j ACCEPT
# Custom rules
Sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Allow ICMP
Sudo iptables -A INPUT -p icmp -j ACCEPT
Sudo iptables -A OUTPUT -p icmp -j ACCEPT
# Drop everything else
Sudo iptables -A INPUT -j REJECT --reject-with icmp-Host-prohibited
# IPv6
# Flush all existing first
Sudo ip6tables -F
# Local
Sudo ip6tables -A INPUT -i lo -j ACCEPT
Sudo ip6tables -A OUTPUT -o lo -j ACCEPT
# Allow outbound DNS
Sudo ip6tables -A OUTPUT -p udp --dport 53 -j ACCEPT
Sudo ip6tables -A INPUT -p udp --sport 53 -j ACCEPT
# Allow inbound HTTP (apt-get, wget etc.)
Sudo ip6tables -A INPUT -p tcp --sport 80 -j ACCEPT
# Custom rules
Sudo ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
Sudo ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
# Allow ICMP
Sudo ip6tables -A INPUT -p icmpv6 -j ACCEPT
Sudo ip6tables -A OUTPUT -p icmpv6 -j ACCEPT
# Drop everything else
Sudo ip6tables -A INPUT -j REJECT --reject-with icmp6-adm-prohibited
ルールは発信接続をブロックしていません。ただし、すべての発信接続に送信された応答はドロップされます。
それはあなたのルールの唯一の欠陥ではありません。正しく動作するために必要なICMPv6パケットを大量にドロップしています。さらに、パケットをサイレントにドロップすると、問題のデバッグが困難になり、適切なエラーメッセージを送信した場合には発生しない追加の問題が発生するため、お勧めできません。
最初の問題を修正するには、発信接続への応答が受信できるように接続追跡を有効にする必要があります。または、必要な発信接続を慎重に評価し、その発信トラフィックと一致する着信トラフィックを許可するステートレスルールのセットを決定する必要があります。 。
2番目の問題を修正するには、すべてのICMPv6エラーメッセージの着信と近隣探索を許可する必要があります。
3番目の問題を修正するには、DROP
の代わりにREJECT --reject-with icmp6-adm-prohibited
を使用します。
INPUT(IPv6)で許可されるパケットは次のとおりです。
lo
のすべて実際には、発信パケットへの応答を含め、他のすべての着信パケットをブロックしています。 「ステート」モジュールを使用して「ステートフルファイアウォール」を調べる必要があります。いくつかの例については、 https://www.sixxs.net/wiki/IPv6_Firewalling を参照してください。
また、ICMPv6をブロックしすぎています。ルーターアドバタイズメントとネイバーディスカバリーの両方が、おそらく必要となるICMPv6の例です。