私はこのiptableルールを持っています:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N fail2ban-ssh
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j DROP
-A fail2ban-ssh -s xx.xxx.xx.xx/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-ssh -j RETURN
-A fail2ban-ssh -j RETURN
台詞
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
そして
-A fail2ban-ssh -j RETURN
重複または2回書かれているようです。重複を削除するにはどうすればよいですか?
行番号でリストし、番号で削除します。
iptables --line-numbers --list
次に、その行番号を使用して1つのルールを削除します。次に繰り返します(1つが削除されると、次のルールの行番号が変わるため、別の行を削除する前に再リストします)。
iptables -D INPUT 6
iptables-save | uniq | iptables-restore
それが本当に必要なすべてです。
anotheの直後の1つ rである二重線のみを削除する場合は、次のコマンドでエクスポート、統合、再インポートできます。
mkdir ~/tmp
iptables-save > ~/tmp/iptables.conf
uniq /tmp/iptables.conf > ~/tmp/iptables_new.conf
iptables-restore < ~/tmp/iptables_new.conf
他の行を削除したい場合は、同じ方法で再インポートする前に〜/ tmp/iptables.confでエディターを使用してください。
新しいルールを確認する
iptables-save
Fail2banへのコメント:fail2banはiptablesルール自体を追加しているようです。したがって、これらのルールを次のように保存しないでください。 iptables-save。次に、再起動後にルールが2倍になります(保存したルール+ fail2banによって追加されたルール)。
COMMITを除くすべての重複行を削除します
/sbin/iptables-save | awk '!COMMIT||!x[$0]++' | /sbin/iptables-restore
私はcronを介して実行するこのような小さなbashスクリプトを使用しています。
#!/bin/bash
readarray -t tabl_lines <<< "$(iptables -nL INPUT --line-number | grep "fail2ban-ssh")"
i=''
for tline in "${tabl_lines[@]}"
do
#skip the first result
if [ -n "$i" ]; then
Sudo iptables -D INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
# if necessary, you can erase and other rules,
# because they usually repeat the same number of times
# Sudo iptables -D INPUT -p tcp -m multiport --dports 21 -j fail2ban-vsftpd
save_iptables=yes
else
i=start_remove
fi
done
if [ "$save_iptables" == "yes" ]; then
/sbin/service iptables save
fi