У меня есть эти правила 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
кажется дублирован или написан дважды. Как удалить дубликат?
Список с номерами строк и удаление по номеру.
iptables --line-numbers --list
Затем удалите одно правило, используя его номер строки. Затем повторите (номера строк меняются для следующих правил, когда одно удалено, поэтому перед удалением другого укажите его заново).
iptables -D INPUT 6
iptables-save | uniq | iptables-restore
Это все, что вам действительно нужно.
Если вы хотите удалить только двойные строки, сразу один за другим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-сохранить. Затем после перезагрузки правила будут удвоены (ваше сохраненное правило + правило, добавленное fail2ban).
Удалите все повторяющиеся строки, кроме COMMIT
/sbin/iptables-save | awk '!COMMIT||!x[$0]++' | /sbin/iptables-restore
Я использую такой небольшой сценарий bash, который запускается через cron.
#!/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