1. portsentry-1.1.tar.gz 압축을 푼다
2. make linux ; make install
3. 설치 경로는 /usr/local/psionic
4. /usr/local/psionic/portsentry/portsentry.conf 를 다음과 같이 수정
원본 : TCP_PORTS="1,11,15,79,111,119,143,540,635,1080,1524,2000,5742,6667,12345,12346,20034,27665,31337,32771,32772,32773,32774,40421,49724,54320"
수정 : TCP_PORTS="1,11,15,20,21,22,23,79,111,119,143,540,635,1080,1524,2255,3306"
※ TCP_PORTS= 여기에 정의된 포트와 서버의 LISTEN 가 아닐 경우 접속 시도시만으로 필터링 됨.
(tcp, stcp, atcp 모두 해당 됨. 주의를 요함)
스캐닝을 시도한 서버에서 이런식으로 포트 스캐닝을 하면 룰에 걸리지 않음.
nmap -sT -p 20-23 스캐닝서버ip
또한 원본의 경우로 쓸경우 과도하게 포트가 많이 열리므로 필요한 요소요소의 포트만 지정한다.
#KILL_HOSTS_DENY="ALL: $TARGET$" --> 주석처리
KILL_ROUTE="/sbin/iptables -I INPUT -s $TARGET$ -j DROP" --> 주석 빼고, iptables 경로 설정
5. portsentry.ignore 파일에 포트스캐닝 룰에서 지워줄 ip 기재 (관리용 ip 정도..)
127.0.0.1/32
0.0.0.0
111.111.111.111
6. 데몬 실행
/usr/local/psionic/portsentry/portsentry -tcp
/usr/local/psionic/portsentry/portsentry -stcp
/usr/local/psionic/portsentry/portsentry -atcp
참고로 tcp와 stcp는 동시에 실행되지 않는다.
tcp의 경우 stealth 스캐닝에 대해선 대응하지 못한다.
atcp의 경우 스캔당하는 서버측의 열려있지 않은 포트에 대해서 접속 시도만 해도 필터링 적용이 되버린다.
stcp의 경우 stealth 스캐닝에 대해서도 대응 할 수 있다.
결론은, stcp 모드로 데몬을 돌리는게 가장 좋을 듯 싶다.
7. crontab에 등록
00 4 * * * cat /dev/null > /usr/local/psionic/portsentry/portsentry.blocked.stcp
※ 블로킹된 로그를 지워주는 이유 :
portsentry.blocked.stcp 로그는 portsentry 데몬이 재실행 되지 않는한 지워지지 않는다.
스캐닝 시도로 인해 iptables에 의해 막힌 불법 ip가 iptables 룰에서 지워지더라도(관리자 실수, iptables 재시작 등) portsentry.blocked.stcp에 로그에 남아 있는한 다시 iptables 룰에 적용이 안된다.
그래서 크론으로 주기적으로 지워주는게 좋으며, 로그는 portsentry.history 파일에도 함께 누적되서 계속 남는다.