Дублювання правил iptable


18

У мене є такі правила 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

здається, дублюється або пишеться двічі. Як я можу видалити дублікат?


Відкрийте файл у вашому улюбленому редакторі, перейдіть до розглядуваного рядка, утримуйте клавішу видалення, поки всі символи не зникнуть. Я пропускаю щось очевидне, чому це важко?
Ladadadada

Відповіді:


17

Список з номерами рядків та видалення за номером.

iptables --line-numbers --list

Потім видаліть одне правило, використовуючи його рядок. Потім повторіть (номери рядків змінюються для наступних правил, коли одне видалено, тому перезапишіть його перед тим, як видалити інше).

iptables -D INPUT 6

2
Дякую за цього приятеля! Прийму це за лічені хвилини.
Леандро Гарсія

Чи залишиться це стійким після перезавантаження?
Рідний кодер

10
iptables-save | uniq | iptables-restore

Це все, що вам потрібно насправді.


2
AFAICT, це видалить лише сусідні дублікати. Не вдасться видалити не сусідні дублікати.
sampablokuper

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

Якщо ви намагаєтеся зняти суміжні дублікати, відповідь Рікі Неффа є більш безпечною, оскільки це дозволяє уникнути викриття правил брандмауера іншим користувачам, які мають доступ /tmp.
sampablokuper

1
thx, ти маєш рацію, ти не повинен використовувати / tmp, оскільки це читається у всьому світі. Я змінив її на~/tmp
rubo77

2

Коментар до fail2ban: начебто fail2ban сам додає свої правила iptables. Тому ви не повинні зберігати ці правила, наприклад, з iptables-save. Тоді після перезавантаження правила будуть подвоєні (збережене правило + правило, додане fail2ban).



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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.