침입차단 시스템(iptables) 간단 정리
by John Choi
iptables
기능
- iptables 가 snort 에 비해 다른 점은 상태추적(Stateful inspection) 기능이다.
- 상태 추적 기능: firewall을 거치는 패킷을 메모리에 기억, 메모리에 저장된 목록과 일치하면 빠르게 통과할 수 있는 기능.
- 이밖에 NAT, 패킷레벨 로깅, 확장모듈 등을 지원한다.
체인
- 패킷이 이동하는 경로, input, output, forward 체인이 있음.
INPUT
: firewall이 최종 목적지이다.OUTPUT
: firewall이 출발지이다.FOWARD
: 방화벽을 경유(방화벽이 별도의 서버로 구성되어 있을 때)PREROUTING
,POSTROUTING
: 라우터 결정 이전/이후에 결정 되는 체인.
iptables 기본 구문
iptables [테이블] [체인] [룰] [타겟]
- 테이블 : -t, default는 아무것도 적지 않음
- 체인 : -A(append), -I(insert), -D(delete) + 체인
- 룰 : -s (source ip), -d (destination ip), –sport(출발지 포트), –dport(목적지 포트), –icmp-type, –tcp-flags, -m state –state(확장모듈; TCP 상태 기능 추적)
- 타겟 : -j
ACCEPT
(허용),DROP
(차단 한 후 아무 응답 메시지 전송 x),REJECT
(차단 후 ICMP 메시지를 남긴다.),LOG
(/var/log/messages)에 남긴다.
이 밖에 기타
/* -L : 룰 리스트 확인, -n : ip와 포트를 숫자 형식으로 출력 */
iptables -L INPUT -n
/* -F : flush 기능 */
iptables -F INPUT
/*-P : default 정책 설정*/
service iptables restart
iptables -F INPUT
iptables -P INPUT DROP /* 서비스 재기동 후 input 정책 초기 값을 drop */
iptables -P OUTPUT DROP /* 서비스 재기동 후 output 정책 초기값을 drop */
상태 추적 기능
NEW
: 상태추적 테이블에 완전히 새로 들어왔을 때ESTABLISHED
: 상태추적 테이블에 연결 정보를 가지고 있을 때RELATED
: 연관된 연결정보(연결 시 서비스 수행 중에 새롭게 추가 될 때, ex)ftp )INVALID
: 알수 없거나, 잘못된 헤더 정보를 갖고 올 때
예제
iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT
/* 21 들어오는 포트 허용 ( ftp active ) */
iptables -A INPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT
connlimit 모듈
-
-m connlimit [option]
형식으로 주로 사용 - –connlimit-above n : n을 초과하는 동시 연결을 제한
- –connlimit-mask mast : 0~32 범위의 mask값을 지정한다.
/* tcp SYN attack 확인 (connlimit 모듈 활용) */
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP
/* 24 비트 마스크 대역 차단 */
iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 10 --conlimit-mask 24 -j DROP
limit 모듈
- 초당/분당/시간당/하루당 매칭되는 제한건수를 지정한다.
/* SYN,FIN 조합 차단 */
iptables -A INPUT -p tcp --tcp-flags SYN,FIN -m limit --limit 6/minute -j DROP
recent 모듈
- 동적으로 source IP 들을 모아서 새로운 목록을 생성하여, 그 목록 안에서 작동 시킬 수 있음.
--name
: 목록 이름을 설정--set
: 추가--rcheck
: 해당 목록에 source ip가 있는 지 체크--update
: source ip가 있는 지 체크 후, 있으면 timestamp 갱신--seconds
: update, rcheck 후 지정된 초에 있는지 확인--hitcount
: 지정한 초에 몇번 들어왔는 지 체크
예제
/* BRUTE FORCE attack (알기사) */
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -m recent --name SSH_DROP --set
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -m recent --name SSH_DROP --update --seconds 60 --hitcount 5 -j DROP
출처 알기사
Subscribe via RSS