[server] 중복 iptable 규칙

이 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

그게 당신이 정말로 필요한 전부입니다.


답변

anothe 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와 같은 규칙을 저장해서는 안됩니다. 그런 다음 재부팅 후 규칙이 두 배가됩니다 (저장된 규칙 + 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


답변