Повторяющиеся допустимые правила

18

У меня есть следующие правила:

-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

кажется, дублируется или пишется дважды. Как я могу удалить дубликаты?

Леандро Гарсия
источник
Откройте файл в вашем любимом редакторе, перейдите к соответствующей строке, удерживайте нажатой клавишу удаления, пока все символы не исчезнут. Я что-то упускаю из виду, почему это сложно?
Ладададада

Ответы:

17

Список с номерами строк и удаление по номеру.

iptables --line-numbers --list

Затем удалите одно правило, используя его номер строки. Затем повторите (номера строк меняются для следующих правил при удалении одного из них, поэтому перед удалением другого внесите новый список).

iptables -D INPUT 6
Брайан
источник
2
Спасибо за этого приятеля! Приму это за считанные минуты.
Леандро Гарсия
Это останется постоянным после перезагрузки?
Родной кодер
10
iptables-save | uniq | iptables-restore

Это все, что вам нужно на самом деле.

Рики Нефф
источник
2
AFAICT, это удалит только смежные дубликаты. Он не сможет удалить несмежные дубликаты.
Сампаблокупер
4

Если вы хотите удалить только двойные строки, расположенные сразу после одной, вы можете экспортировать, объединить и повторно импортировать с помощью

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
rubo77
источник
Если вы пытаетесь удалить соседние дубликаты, то ответ Рики Неффа является более безопасным, поскольку он избегает раскрытия правил брандмауэра другим пользователям, к которым есть доступ /tmp.
Сампаблокупер
1
спасибо, вы правы, вы не должны использовать / tmp, потому что он доступен для чтения. Я изменил это на~/tmp
rubo77
2

Комментарий к fail2ban: fail2ban, похоже, сам добавляет свои правила iptables. Таким образом, вы не должны хранить эти правила, например, с помощью iptables-save. Затем после перезагрузки правила будут удвоены (ваше сохраненное правило + правило, добавленное fail2ban).

halboffen
источник
2

Удалить все дублированные строки, кроме COMMIT

/sbin/iptables-save | awk '!COMMIT||!x[$0]++' | /sbin/iptables-restore
Андрей Дмитриев
источник
0

Я использую такой маленький скрипт 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
Саня Снекс
источник