답변:
iptables가 자체적으로 규칙을 완전히 제거한다는 것을 의미한다면 내가 아는 한 그렇게 할 수 없습니다. 이것의 목적은 무엇입니까? 일종의 자동 임시 금지가 필요한 경우 표준 솔루션은 fail2ban 입니다.
또는 cron 작업을 사용하여 추가중인 규칙을 제거하거나 대화식으로 at
작업 을 수행하려는 경우 작업을 개선 할 수 있습니다 .
iptables -I INPUT -s 192.168.1.100 -j DROP
echo "iptables -D INPUT -s 192.168.1.100 -j DROP" | at @10pm
recent
iptables 모듈도 살펴보십시오 . 그와이 --seconds
옵션은 실제 필요에 따라 도움이 될 수 있습니다. man iptables
자세한 내용은.
/bin/sh
되며 기본적으로 설정되어 있음을 의미합니다. 그러나 아마도이 경우에는 문제가되지 않습니다.
규칙에 타임 스탬프 (에포크 이후 초)로 주석을 추가합니다. 만료 된 규칙을 주기적으로 청소하십시오.
가장 최근의 리눅스 커널은 직접 iptables 규칙 대신 iptable 규칙이 참조하는 캐시에 IP 주소를 동적으로로드하는 기능을 지원합니다.
예:
iptables -A INPUT -s 192.168.200.100/32 -m comment --comment "expire=`date -d '+ 5 min' +%s`" -j DROP
iptables -L INPUT -n --line-numbers | tac | perl -ne 'next unless /(^\d+).*expire=(\d+)/; if ($2 < time) { print "iptables -D INPUT $1\n"; }'
물론 iptables -D INPUT $1
명령을 인쇄하는 대신에 할 수 있습니다 .
iptables -L FORWARD --line-numbers | sort -r | awk 'substr($8,1,4) == "exp@" && substr($8,5) < systime() { systems("iptables -D FORWARD " $1) }'
: 규칙처럼 만들어집니다iptables -A FORWARD -j DROP -m comment --comment "exp@EPOCH"
iptables -L FORWARD --line-numbers | tac | perl -walne 'system "iptables -D FORWARD $F[0]" if $F[-2] =~ /^expire=(\d+)$/ and $1<time()'
iptables에는 사용자 정의 조건이 충족되면 IP 주소를 목록에 자동으로 추가하는 방법이 있습니다. ssh 포트에 대한 자동 해킹 시도를 피하기 위해 다음을 사용합니다.
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name ssh --seconds 60 --reap -j DROP
이는 동일한 IP 주소의 연결 시도를 60 초마다 1로 제한하여 서버에 대한 자동 액세스 시도를 제한합니다.
5 분의 4 분과 같은 시간 프레임에서 정해진 횟수의 시도를 허용하고 실패한 경우 24 시간과 같이 더 오랜 시간 동안 블랙리스트에 올리려면 다음과 같이 할 수 있습니다.
iptables -X black
iptables -N black
iptables -A black -m recent --set --name blacklist -j DROP
iptables -X ssh
iptables -N ssh
iptables -I ssh 1 -m recent --update --name blacklist --reap --seconds 86400 -j DROP
iptables -I ssh 2 -m recent --update --name timer --reap --seconds 600 --hitcount 4 -j black
iptables -I ssh 3 -m recent --set --name timer -j ACCEPT
iptables -A INPUT -p TCP --dport ssh -m state --state NEW -j ssh
위에서 우리는 두 개의 체인을 만듭니다. "ssh"및 "black"및 2 개의 목록; "타이머"및 "블랙리스트".
간단히; 위에 표시된 마지막 체인은 ssh 체인의 "도어 웨이"입니다.
"--reap"옵션은 커널이 목록을 검색하여 설정된 시간 제한보다 오래된 항목을 제거하도록합니다. "타이머"목록의 경우 5 분, "블랙리스트"목록의 경우 24 시간.
참고 : 여분의 공간은 가독성을위한 것이며 셸 스크립트에서 선택 사항입니다.
fail2ban 을 사용 하여 IP 주소를 금지하고 주소가 금지되는 시간을 구성 할 수 있습니다.
누군가 이미 말했듯이 :이 기능에는 ipset을 사용해야합니다.
ipset은 시간 초과 값으로 IP 주소를 추가 할 수 있습니다. 시간 초과가 끝나면 레코드가 ipset에서 자동으로 제거됩니다.
timeout
All set types supports the optional timeout parameter when creating a set and adding entries. The value of the timeout parameter for the create command means the default timeout value (in seconds) for new entries. If a set is created with timeout support, then the same timeout option can be used to specify non-default timeout values when adding entries. Zero timeout value means the entry is added permanent to the set. The timeout value of already added elements can be changed by readding the element using the -exist option. Example:
ipset create test hash:ip timeout 300
ipset add test 192.168.0.1 timeout 60
ipset -exist add test 192.168.0.1 timeout 600
http://ipset.netfilter.org/ipset.man.html
이 동작을 제어하는 것이 좋습니다.
정확히 무엇을 달성하고자 하는가에 따라, 넷 필터 최근 또는 시간 모듈을 사용하여이를 달성 할 수 있습니다.
둘 다 iptables 매뉴얼 페이지에 설명되어 있습니다.