iptables: 최근 모듈

iptables: 최근 모듈

포트 스캔을 방지하기 위해 "가장 가까운" 모듈을 사용하고 있습니다. 예를 들면 다음과 같습니다.

-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_tot20임을 알려줍니다.

답변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

관련 정보