iptables にいくつかの ssh ルールが必要だとします。ただし、すべてのルールに対して別のチェーンを指定したいとします。次のようなものを使用できます。
iptables -t filter -N ssh
iptables -t filter -N tcp
iptables -t filter -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j tcp
iptables -t filter -A tcp -p tcp --dport 22 -m conntrack --ctstate NEW -j ssh
iptables -t filter -A ssh -p tcp --dport 22 -m conntrack --ctstate NEW -s 10.10.10.10/32 -m mac --mac-source 10:10:10:10:10:10 -j ACCEPT
iptables -t filter -A ssh -p tcp --dport 22 -m conntrack --ctstate NEW -s 11.11.11.11/32 -m mac --mac-source 11:11:11:11:11:11 -j ACCEPT
各ルールですべてのオプションを指定する必要がありますか、それとも下位チェーンでは省略できますか? たとえば、最終的な ssh ルールは次のようになります。
iptables -t filter -A ssh -s 10.10.10.10/32 -m mac --mac-source 10:10:10:10:10:10 -j ACCEPT
iptables -t filter -A ssh -s 11.11.11.11/32 -m mac --mac-source 11:11:11:11:11:11 -j ACCEPT
答え1
これを回避したい場合は、新しいチェーンが必要です。
iptables -N sshgroup1
# or reset with iptables -F sshgroup1 if it already exists
iptables -t filter -A ssh -s 10.10.10.10/32 -m mac \
--mac-source 10:10:10:10:10:10 -j sshgroup1
iptables -t filter -A sshgroup1 ... -j ACCEPT
iptables -t filter -A sshgroup1 ... -j ACCEPT
答え2
LAN 内の 2 つのホストからの ssh 接続のみを許可する場合は、iptables の動作を高速化するために、このルールを最上位に維持する必要があります。
iptables -I INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -s 10.10.10.10/32 -m mac --mac-source 10:10:10:10:10:10 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -s 11.11.11.11/32 -m mac --mac-source 11:11:11:11:11:11 -j ACCEPT
それ以外の場合は、ネットワーク、ポリシー、トラフィックに応じてさまざまな組み合わせがあります。
経験則としては、ルールの繰り返しを避け、マッチングのレベルを最小限に抑えてパフォーマンスを高速化することです。