포트 스캔을 방지하기 위해 "가장 가까운" 모듈을 사용하고 있습니다. 예를 들면 다음과 같습니다.
-A INPUT -i eth0 -m recent --name PORTSCAN --update --seconds 60 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -m recent --name PORTSCAN --set -j DROP
이 --update
옵션은 이름과 달리(예: 이전 값을 새 값으로 업데이트) 마지막으로 표시된 항목을 업데이트하지 않고 다른 항목을 추가합니다. 내 간단한 설정에서는 마지막 항목에만 관심이 있습니다. 패킷의 전체 기록(예: 통계)을 볼 필요가 없습니다.
마지막으로 본 패킷만 보관할 수 있는 방법이 있나요? 예전에는 옵션이 있었지만 --reap
제가 아는 한 제거되었습니다.
제가 걱정하는 점은 사용량이 많은 서버에서는 PORTSCAN 목록이 매우 빠르게 커질 수 있다는 것입니다. 한계가 무엇인지는 모르겠지만 한계가 있다는 것은 확실합니다.
답변1
iptables 매뉴얼 페이지, 특히 모듈 섹션을 보면 recent
필요한 제어 기능을 제공하는 것처럼 보이는 몇 가지 매개변수가 있습니다.
iptables recent
모듈 섹션 에서 발췌
모듈 자체는 기본적으로 표시되는 매개변수를 허용합니다.
ip_list_tot=100 Number of addresses remembered per table. ip_pkt_list_tot=20 Number of packets per address remembered.
recent
따라서 이 두 매개변수를 기반으로 모듈이 "기억"할 IP 주소 수와 패킷 수를 제어할 수 있습니다.
이것은 커널 모듈이므로 이러한 설정을 적용하려면 모듈이 로드될 때 다음과 같이 설정해야 합니다.
/sbin/modprobe ipt_recent ip_list_tot=2000 ip_pkt_list_tot=255
내 Fedora 14 시스템에서는 모듈이 실제로 호출되며 다음을 xt_recent
사용하여 어떤 유형의 인수를 사용할 수 있는지 확인할 수 있습니다 modinfo
.
$ modinfo xt_recent
filename: /lib/modules/2.6.35.14-106.fc14.x86_64/kernel/net/netfilter/xt_recent.ko
alias: ip6t_recent
alias: ipt_recent
license: GPL
description: Xtables: "recently-seen" host matching
author: Jan Engelhardt <[email protected]>
author: Patrick McHardy <[email protected]>
srcversion: 00B9A3AB999488BFEB4FA6A
depends:
vermagic: 2.6.35.14-106.fc14.x86_64 SMP mod_unload
parm: ip_list_tot:number of IPs to remember per list (uint)
parm: ip_pkt_list_tot:number of packets per IP address to remember (max. 255) (uint)
parm: ip_list_hash_size:size of hash table used to look up IPs (uint)
parm: ip_list_perms:permissions on /proc/net/xt_recent/* files (uint)
parm: ip_list_uid:default owner of /proc/net/xt_recent/* files (uint)
parm: ip_list_gid:default owning group of /proc/net/xt_recent/* files (uint)
xt_recent 설정 확인
이 모듈의 모든 설정은 여기에 저장됩니다 /sys/module/xt_recent
. 특히 여기에 전달하는 매개변수는 여기에 저장됩니다.
$ ls -1 /sys/module/xt_recent/parameters/
ip_list_gid
ip_list_hash_size
ip_list_perms
ip_list_tot
ip_list_uid
ip_pkt_list_tot
모든 매개변수는 이 디렉토리의 파일을 간단히 구분하여 확인할 수 있습니다. 예를 들면 다음과 같습니다.
cat /sys/module/xt_recent/parameters/ip_pkt_list_tot
따라서 이는 매개변수의 기본값이 ip_pkt_list_tot
20임을 알려줍니다.
답변2
위에 제공된 답변 외에도 PORTSCAN 트랩 앞에 추가 BADGUYS 테이블을 채우고 이를 사용하여 후자의 오버플로를 방지하는 것이 좋습니다.
그런 다음 PORTSCAN이 트리거되면 BADGUYS 테이블에 레코드가 추가됩니다.
이 같은:
-A INPUT --name PORTSCAN --rcheck --seconds 60 --reap --hits 20 -j set_bad
-A INPUT --name BADGUYS --rcheck --seconds 3600 --reap -j noway
-A INPUT <trap case> --name PORTSCAN --set
-A set_bad --name BADGUYS --set
-A noway -p tcp -j REJECT --reject-with tcp-reset
-A noway -j DROP