매우 간단한 bash 스크립트(처음에는 에코, 명령 실행, 마지막에는 에코)를 만들어 iptables에 약 7300개의 규칙을 추가하여 대부분의 중국과 러시아를 차단했지만 다음 오류가 발생하기 전에 약 400개의 규칙을 추가했습니다.
iptables: Unknown error 18446744073709551615
나중에 규칙을 수동으로 추가하려고 시도했지만 추가할 수 없었습니다(같은 오류가 발생했습니다).
각 규칙을 추가하는 명령은 다음과 같습니다.
/sbin/iptables -A sshguard -s x.x.x.0/x -j DROP
sshguard
내가 사용하기 위해 만든 체인입니다sshguard데몬, 체인을 엉망으로 만들지 않도록 거기에 규칙을 추가하고 싶습니다 INPUT
. 내가 제공한 IP 범위는 테스트할 유효한 범위를 제공했지만 동일한 오류가 발생했기 때문에 여기서 비난할 필요는 없습니다. 규칙 체인을 새로 고치고 단일 규칙을 추가하면 작동하지만 약 400개 항목 이후에는 작동하지 않습니다.
미리 구글링을 좀 해봤는데, 이런 문제를 겪는 다른 분들도 저와 같은 이유로 그런 문제는 없는 것 같았습니다.
각 iptables 체인에 대해 일종의 규칙 제한이 있습니까? 또한 이것이 오류가 아닌 이러한 범위를 차단하는 올바른 방법입니까?
# iptables -V
iptables v1.3.5
# cat /etc/issue
CentOS release 5.8 (Final)
# uname -a
Linux domain.com 2.6.18-028stab101.1 #1 SMP Sun Jun 24 19:50:48 MSD 2012 x86_64 x86_64 x86_64 GNU/Linux
편집하다:명확히 하기 위해 bash 스크립트는 파일이나 IP 목록을 반복하는 대신 각 iptables 명령을 개별적으로 실행합니다.
또한 이러한 범위를 차단하는 목적은 예방입니다. 일부 사이트에서 크롤링, 크롤링 또는 스팸 계정 생성을 시도하는 봇의 수를 제한하려고 합니다. 이미 사용하고 있어요sshguard내 서버에 대한 무차별 공격 시도를 차단하지만 이는 분명히 다른 봇에는 도움이 되지 않습니다.
답변1
알았어, 알겠어.
내 VPS에는 Virtuozzo 컨테이너가 있다는 점을 언급하고 싶습니다.http://kb.parallels.com/en/746다음을 언급하십시오:
또한 더 많은 iptables 규칙을 추가하려면 numpent 장벽 값을 늘려야 할 수도 있습니다.
~# vzctl set 101 --save --numiptent 400
참고: 이 내용을 적용하려면 컨테이너를 다시 시작해야 합니다.
이것이 내가 약 400의 한계에 도달한 이유를 설명합니다. CentOS 6이 있으면 이러한 모든 규칙을 추가하는 대신 모듈 ipset
(EPEL) 을 설치합니다( 더 빠르기 때문입니다).iptables
ipset
현재로서는 CentOS 5.9에서는 iptables
> 1.4.4
및 커널을 컴파일해야 합니다 ipset
. 이는 VPS이고 내 호스트는 아마도 결국 CentOS 6으로 업그레이드될 것이기 때문에 이를 추구하지 않을 것입니다.
답변2
디버깅은 어렵지 않지만 규칙을 순수 iptables 명령으로 변환하고 하나씩 실행하면(셸 스크립트를 사용하여) 오류가 표시되며 일반적으로 일부 ipt 모듈이 누락됩니다.
먼저 iptables-save
현재 규칙을 내보내는 데 사용된 후 다음과 같은 작업을 수행하여 한 줄씩 디버깅합니다.
egrep '^(-A|-I)' ok.rules | while read x; do iptables $x || { echo failed $x; break; }; done
구글링해 보니 CentOS의 기본 커널 구성에 버그가 있는 것 같습니다.
답변3
RHEL의 iptables에 해결되지 않은 버그가 있는 것 같습니다. 당신은 그것을 접할 수 있습니다. https://bugzilla.redhat.com/show_bug.cgi?id=598380
그동안 비슷한 것을 본 적이 있나요 denyhosts
? hosts.deny
공격을 받을 때(ssh 공격) 자동으로 항목을 추가합니다.
그냥 생각입니다.