이 가이드는 리눅스 사용자를 위해 서비스 거부(DoS) 공격에 사용되는 IP 주소를 탐지하고 차단하는 방법을 단계별로 소개합니다.
앞서 iptables에서 특정 IP 주소를 차단하는 방법을 다룬 글을 소개한 바 있습니다. 이번 글은 그 연장선으로, 서비스 거부(Denial of Service) 공격이 발생했을 때 공격자의 IP 주소를 어떻게 찾아낼 수 있는지 알려드립니다.
psad란 무엇인가?
이 작업에는 psad라는 무료 오픈소스 소프트웨어를 사용합니다. psad는 iptables와 연동하여 iptables 로그를 실시간으로 모니터링하며, 포트 스캔이나 기타 의심스러운 트래픽을 감지합니다. 이러한 트래픽은 대개 누군가 리눅스 서버에 침입을 시도하고 있다는 신호입니다.
1단계: psad 설치
먼저 psad를 설치합니다. Ubuntu나 Fedora처럼 체계적인 패키지 관리 시스템을 갖춘 배포판을 사용 중이라면 다음 명령어 중 하나로 간단히 설치할 수 있습니다.
# sudo apt-get install psad
또는
# yum install psad
위 명령어가 작동하지 않는다면 psad 공식 다운로드 페이지에서 자신의 시스템에 맞는 패키지를 직접 내려받아 설치하면 됩니다.
2단계: syslog 설정
이 튜토리얼은 Ubuntu 리눅스 서버 기준으로 작성되었지만, 약간의 수정만 거치면 다른 배포판에서도 충분히 적용할 수 있습니다. 선호하는 텍스트 편집기로 syslog.conf 파일을 엽니다.
# vim /etc/syslog.conf
파일 맨 끝에 다음 줄을 추가합니다:
kern.info |/var/lib/psad/psadfifo
다음 명령어 한 줄로도 동일한 작업을 수행할 수 있습니다:
# echo -e 'kern.info\t|/var/lib/psad/psadfifo' >> /etc/syslog.conf
이제 sysklogd와 klogd 데몬을 재시작합니다:
/etc/init.d/sysklogd restart
/etc/init.d/klogd restart
3단계: 화이트리스트(안전 IP 목록) 생성
psad는 의심스러운 IP를 탐지하면 iptables에 해당 IP 차단을 지시합니다. 그런데 이 과정에서 본인이 사용하는 IP가 실수로 차단될 가능성도 있습니다. 이런 문제를 예방하려면 안전한 IP 주소 목록을 담은 파일을 미리 만들어 두는 것이 좋습니다.
# vim /home/calvin/safeiplist.cfg
psad가 차단하지 않도록 허용할 IP 주소를 입력합니다:
127.0.0.0/24
192.168.0.0/24
122.164.34.240
4단계: iptables 규칙 설정 스크립트
이제 아래 스크립트로 iptables에 필요한 규칙을 적용합니다. 주의: 이 스크립트는 기존 iptables 설정을 모두 초기화하므로, 실행 전에 현재 설정을 반드시 백업하세요. 스크립트를 서버에 복사한 뒤 WORKDIR과 SAFEIPLIST 변수를 자신의 환경에 맞게 수정합니다.
WORKDIR="/home/calvin/"
INTERVAL="5"
HITCOUNT="5"
SAFEIPLIST="safeiplist.cfg"
cd $WORKDIR
iptables -F
if [ -f $SAFEIPLIST ]; then
IPS=$(grep -Ev "^#" $SAFEIPLIST)
for i in $IPS
do
iptables -A INPUT -s $i -j ACCEPT
done
fi
iptables -A INPUT -m state --state NEW -m recent --set
iptables -A INPUT -m state --state NEW -m recent --update --seconds $INTERVAL --hitcount $HITCOUNT -j LOG
이 스크립트의 동작 원리는 간단합니다. 5초 안에 5회 이상 연결을 시도한 IP 주소를 로그에 기록하는 방식입니다. 스크립트 수정이 익숙하지 않다면 그대로 사용하는 것을 권장합니다. 작성이 끝나면 실행 권한을 부여하고 실행합니다.
# chmod +x /home/calvin/ipblock.sh
# /home/calvin/ipblock.sh
5단계: psad 설정 파일 편집
이제 psad 설정 파일을 열어 편집합니다. 아래는 권장하는 변경 사항이며, psad 공식 문서를 참고해 추가 설정을 조정해도 좋습니다.
관리자 이메일 주소 설정:
EMAIL_ADDRESSES you@yourdomain.com;
서버 호스트명 설정:
HOSTNAME yourdomain.com;
서버에 네트워크 인터페이스가 하나뿐이라면 HOME_NET을 다음과 같이 설정합니다:
HOME_NET NOT_USED;
또한 위험 수준(danger level)을 조정하거나 특정 포트를 검사 대상에서 제외할 수도 있습니다. 예를 들어 UDP 80번과 8080번 포트를 무시하도록 하려면 다음과 같이 변경합니다:
IGNORE_PORTS udp/80, udp/8080;
파일을 저장하고 닫은 후 psad를 재시작합니다:
# /etc/init.d/psad restart
6단계: psad 모니터링 및 관리
모든 설정이 완료되었습니다. psad의 보고서를 확인하려면 다음 명령어를 실행합니다:
# psad -S
자동으로 차단된 IP 주소를 해제하려면 다음 명령어를 사용합니다:
# psad -F
마무리: 신중하게 사용하세요
psad는 매우 유연하고 강력한 도구입니다. 제대로 활용하면 서버 보안에 놀라운 효과를 발휘하지만, 잘못 사용하면 시스템 전체에 심각한 문제를 일으킬 수 있습니다. 따라서 psad를 운영 환경에 적용할 때는 항상 주의를 기울이시기 바랍니다.