중복 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
이 친구에게 감사합니다! 몇 분 안에 이것을 수락합니다.
Leandro Garcia

재부팅 후에도 지속됩니까?
Native Coder

10
iptables-save | uniq | iptables-restore

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


2
AFAICT, 인접한 복제본 만 제거합니다. 인접하지 않은 중복을 제거하지 못합니다.
sampablokuper

4

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

인접한 중복을 제거하는 것이 원하는 경우 Ricky Neff의 대답 은 방화벽에 액세스하는 다른 사용자에게 규칙을 노출시키지 않기 때문에 더 안전합니다 /tmp.
sampablokuper

1
thx, 맞습니다. / tmp를 사용하면 안됩니다. 나는 그것을 변경~/tmp
rubo77

2

fail2ban에 대한 의견 : fail2ban은 iptables 규칙 자체를 추가하는 것으로 보입니다. 따라서 iptables-save와 같은 규칙을 저장해서는 안됩니다. 그런 다음 재부팅 후 규칙이 두 배가됩니다 (저장된 규칙 + fail2ban에 의해 추가 된 규칙).



0

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.