Portsentry를 사용하여 포트스캐닝 탐지 및 블럭하기

한국 데비안 사용자 모임
둘러보기로 가기 검색하러 가기
항목 내용
글쓴이 이우중
글쓴날 2001년 01월 16일 오전 11:38


준비물(패키지)

portsentry
logcheck

포트 센트리는 포트스캔을 탐지하고 포트의 거짓 정보를 뿌려줄수도...그리고 메일을 보내고 스캔한 ip 를 블록할수 있는 아주 훌륭한 툴이다.

logcheck 의 경우에는 potato에도 있지만 portsentry 의 경우는 sid에 패키지가 올라와 있다.

sid 를 사용하는 분이라면 그냥 설치하면 되지만.. potato 에서는 패키지를 찾아서 헤메이지 말고 /etc/apt/sources.list 를 잠깐 수정하여

apt-get install portsentry 

로 해서 portsentry 만 설치한후 다시 소스리스트를 변경하면 아주 쉽게 설치가 가능하다..

소스리스트는 아래처럼 해주면 된다.

deb ftp://ftp.nuri.net/debian/ potato main non-free contrib
deb ftp://ftp.nuri.net/pub/debian-non-US potato/non-US main non-free contrib


설정

패키지를 설치한 이후의 설정에 대해서 써보도록 하겠다.

/etc/portsentry 에 보면 네개의 파일이 있다.

portsentry.conf -- 포트센트리의 전체 설정이다.
portsentry.ignore -- 동적이나 정적으로 무시할 ip 리스트를 가지고 있다.
portsentry.ignore.static 고정적으로 무시할 ip 어드레스를 가지고 있다.
startup.conf -- 시작시 udp 와 tcp 두가지 모드를 사용할수 있는데 기본값으로 사용

일단 irc 를 사용하면서 또는 메스커레이딩을 사용하면서 portsentry 를 사용하시는 분들께는 portsentry.ignore.static 이 매우 중요하다. 아래의 부분은 설정의 예이다.. 나열된 아이피는 nslookup irc.nuri.net 하면 관련 ip가 나온다. 아래처럼 해주지 않을경우 종종 블럭 되므로 정상적인 irc에서의 채팅이 블가능하다. irc를 사용하면서 포트 스캔으로 인식하는 경우가 많기 때문이다.


portsentry.ignore.static

# /etc/portsentry/portsentry.ignore.static
# put hosts in here you never want blocked. This includes STATIC IPs of all
# local interfaces on this host.
# Keep 127.0.0.1 and 0.0.0.0 to keep people from playing games.
# upon start of portsentry(8) this file will be merged into portsentry.ignore.
127.0.0.1
0.0.0.0
203.255.112.8
211.232.190.141
210.182.137.69
210.217.212.5
210.182.137.69
210.182.32.116
211.171.253.250
203.255.112.80
211.232.190.151


portsentry.ignore

다음으로는 portsentry.ignore 파일이다. 이 파일은 건드릴 필요가 없다. 실제로 동적 정적으로 무시할 ip 가 자동으로 올려진다. 예를 보면 다음과 같다.

# IPs from /etc/portsentry/portsentry.ignore.static:
127.0.0.1
0.0.0.0
203.255.112.8
211.232.190.141
210.182.137.69
210.217.212.5
210.182.137.69
210.182.32.116
211.171.253.250
203.255.112.80
211.232.190.151

# dynamically fetched IPs(via ifconfig -a):
210.181.82.213
192.168.1.1


portsentry.conf

가장 중요한 portsentry.conf 에 대해서 알아보자 portsentry 는 3가지 모드를 가지고 있다.

# 0 = Do not block UDP/TCP scans.
# 1 = Block UDP/TCP scans.
# 2 = Run external command only (KILL_RUN_CMD)

BLOCK_UDP="1"
BLOCK_TCP="1"

위의 부분을 보면 이해가 될것이다. 기본값은 0 번으로 블록하지 않고 메일만 보내는 것으로 되어있는데.. 1을 사용하면 바로 블록할수 있다.


블록 방법

블록의 방법으로는 4가지 정도가 유용하다.


/etc/hosts.deny 에 등록

즉 Tcp Wrappers 를 사용하여 차단한다..설정파일은 다음과 같다.

# Format Two: New Style - The format used when extended option
# processing is enabled. You can drop in extended processing
# options, but be sure you escape all '%' symbols with a backslash
# to prevent problems writing out (i.e. %c %h )
#
KILL_HOSTS_DENY="ALL: $TARGET$ : DENY"


ipchain 을 사용
# New ipchain support for Linux kernel version 2.102+
KILL_ROUTE="/sbin/ipchains -I input -s $TARGET$ -j DENY -l"


라우팅 테이블에서의 블록
# Newer versions of Linux support the reject flag now. This
# is cleaner than the above option.
KILL_ROUTE="/sbin/route add -host $TARGET$ reject"


portsentry 자체에서의 블록이다.

portsentry 자체에서 블록을 할경우 특별한 위의 세부분처럼 특별한 설정 없어도 가능하다.

/var/lib/portsentry 를 보면

portsentry.blocked.tcp
portsentry.blocked.udp
portsentry.history

위의 3개의 파일이 있다.. 이곳은 자주 살펴보는 것이 좋다..