[server] iptables 규칙을 만료시키는 방법?

누군가 이것이 가능하다고 말했지만 Google 또는 맨 페이지에서 아무것도 찾을 수 없습니다.

일정 시간 동안 IP를 금지 한 다음 자동으로 금지를 해제해야합니다.



답변

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

recentiptables 모듈도 살펴보십시오 . 그와이 --seconds옵션은 실제 필요에 따라 도움이 될 수 있습니다. man iptables자세한 내용은.


답변

규칙에 타임 스탬프 (에포크 이후 초)로 주석을 추가합니다. 만료 된 규칙을 주기적으로 청소하십시오.

가장 최근의 리눅스 커널은 직접 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에는 사용자 정의 조건이 충족되면 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 체인의 “도어 웨이”입니다.

  • ssh 체인의 규칙 1은 소스 IP가 “블랙리스트”목록에 있는지 확인합니다. 그렇다면 연결이 끊어지고 24 시간 블랙리스트 타이머가 다시 시작됩니다. 규칙 1이 거짓이면 규칙 2로 이동합니다.
  • ssh 체인의 규칙 2는 소스 IP가 5 분 동안 4 번 이상 연결을 시도했는지 확인합니다. 그렇다면, 패킷을 “blacklist”체인에 추가하여 “blacklist”목록에 추가합니다. 그런 다음 체인 “검정색”이 연결을 삭제하고 완료했습니다.
  • 체인 “ssh”의 규칙 3은 규칙 1과 2가 거짓 인 경우에만 도달합니다. 그렇다면 패킷이 수락되고 소스 IP가 “타이머”목록에 추가되어 연결 시도 빈도를 모니터링 할 수 있습니다.

“–reap”옵션은 커널이 목록을 검색하여 설정된 시간 제한보다 오래된 항목을 제거하도록합니다. “타이머”목록의 경우 5 분, “블랙리스트”목록의 경우 24 시간.

참고 : 여분의 공간은 가독성을위한 것이며 셸 스크립트에서 선택 사항입니다.


답변

IPTables에는 IP Set에 대한 기능이 있습니다. 규칙을 한 번 만들고 평소와 같이 유지되지만 일치하는 IP (또는 포트) 세트를 체크인합니다. 멋진 점은 나머지 방화벽을 방해하지 않고이 세트를 동적으로 효율적으로 업데이트 할 수 있다는 것입니다.

주요 웹 사이트 , 예제 .

따라서이를 사용 하려면 제거 를 사용 at하거나 cron예약해야합니다.


답변

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

이 동작을 제어하는 ​​것이 좋습니다.


답변

일정 시간 동안 IP를 금지 한 다음 자동으로 금지를 해제해야합니다.

당신은 다음 중 하나를 시도 할 수 있습니다

# iptables -I INTPUT -s xxx.xxx.xxx.xxx -m time --utc --datestart 2013-09-09T15:00 --datestop 2013-09-09T15:30 -j DROP