차단 된 IP 주소 목록을 원한다고 가정하십시오.
다음 예제 스크립트를 보았습니다.
BLOCKDB="/path/to/ip.blocked.file"
# omit comments lines
IPS=$(grep -Ev "^#" $BLOCKDB)
for i in $IPS
do
iptables -A INPUT -s $i -j DROP
iptables -A OUTPUT -d $i -j DROP
done
수천 개의 iptables 항목으로 변환되는 수천 개의 행이 제정신입니까?
시스템 효율성에 큰 영향을 미치는 상한선은 무엇입니까?
답변
이 기사를 통해 해결책을 찾았고 IPSet이 답 인 것 같습니다.
요약해서 말하면:
IP 주소 집합에 수천 개의 항목이 포함 된 경우 iptables 성능이 저하됩니다 (iptables가 방화벽 관리 도구 인 즉시 netfilter의 성능). CPU 부하도 증가 할 수 있습니다. 다행히도 완벽한 솔루션이 있습니다 – ipsets
IPSet은 다음과 같은 경우에 완벽한 도구입니다.
- 여러 IP 주소 또는 포트 번호를 저장하고 한 번에 iptables로 수집과 일치시킵니다.
- 성능 저하없이 IP 주소 또는 포트에 대해 iptables 규칙을 동적으로 업데이트합니다.
- 하나의 단일 iptables 규칙으로 복잡한 IP 주소 및 포트 기반 규칙 세트를 표현하고 IP 세트 속도의 이점
ipset 설치는 간단합니다 sudo apt-get install ipset
그런 다음 다음을 실행하십시오.
ipset -N autoban iphash ––hashsize 4096 ––probes 2 ––resize 50
iptables 체인에 추가하십시오. 방화벽 설정에 따라 다를 수 있습니다. 여기서 우리는 ethin chain을 사용합니다.
iptables -I ethin 2 -p tcp -m multiport ––dport 80,443 -m set ––match-set autoban src -j DROP
이제 모든 불량 IP를 ipset에 추가 할 수 있습니다. 예를 들어 한 줄에 IP가 하나 인 bots.txt라는 텍스트 파일이 있습니다. 간단한 bash 스크립트를 사용하여 ipset에 추가 할 수 있습니다.
for i in $( cat /tmp/bots.txt ) ; do ipset -A autoban $i ; done
실행을 확인하려면 다음을 수행하십시오.
ipset -L autoban