[리눅스 일반] Iptables

리눅스 커널 안에는 패킷 필터링 기능을 가지고 있는 netfilter가 있으며, iptables는 이 netfilter를 관리하기 위한 툴이다.

iptables

 

1. 테이블(tables)과 체인(chain)의 개념

테이블 고유 Chain 설명
Filter INPUT
OUTPUT
FORWARD
외부에서 방화벽으로 향하는 패킷에 대한 필터링
방화벽에서 나가는 패킷에 대한 필터링
방화벽을 통과하여 내부 네트워크로 향하는 패킷의 필터링
Nat PREROUTING
OUTPUT
POSTROUTING
외부에서 내부 서버로 향하는 패킷을 포위딩 할 때 사용
패킷이 보내지기 전에 로컬에서 생성된 네트워크 패킷 변경
내부에서 외부 네트워크로 향하는 패킷을 포워딩 할 때 사용
Mangle INPUT
OUTPT
FORWARD
PREPOUTING
POSTROUTING
 호스트를 대상으로 하는 네트워크 패킷 변경
패킷이 보내지기 전에 로컬에서 생성된 네트워크 패킷 변경
호스트를 통하여 라우트 된 네트워크 패킷 변경
패킷이 라우팅 되기 전에 들어오는 네트워크 패킷 변경
패킷이 보내지기 전에 네트워크 패킷을 변경

 

2. iptables 기본문법

iptables [-t <Table-name>] <Command> <Chain name> <Parameter> -m <Module name>
<Command> 설명
-A
-I
-D
-F
-L
-N
-E
-X
chain에 정책을 차례대로 추가
chain에 원하는 순서에 정책을 추가
chain에 등록된 정책 중에서 원하는 정책을 삭제
chain에 등록된 정책을 모두 삭제
지정한 chain 또는 전체 chain의 정책을 출력
사용자가 정의한 새로운 chain을 생성
사용자가 정의한 chain의 이름 변경
사용자가 정의한 chahin을 삭제
<Command> 설명
-P
-S
-d
-i
-o
–sport
–dport
–tcp-flags
–syn
–icmp-type
TCP, UDP, ICMP와 같은 프로토콜 지정
출발지 주소
목적지 주소
In으로 들어오는 인터페이스
Out으로 나가는 인터페이스
출발지 포트
목적지 포트
TCP Flag 지정 (SYN, ACK, FIN, RST 등)
TCP 연결을 위해 제일 먼저 보내는 연결 요청 패킷
ICMP는 ICMP Type과 Code를 이용하여 정책 설정
Module name Option 설명
Limit

State

–limit
–limit-burst
ESTABLISHED
INVALID
NEW
RELATED
(/s, /m, /h, /d)당 받아들일 패킷의 최대 숫자
패킷을 제한하기 전에 무조건 받아들일 패킷의 숫자
클라이언트와 서버간에 이미 연결되어 있는 상태
연결 상태를 알 수 없거나 잘못된 헤더를 가진 경우
새로 연결하거나 이전 연결 추적 테이블이 없는 경우
새로 연결을 시작할 때 이미 관련 있는 ESTABLISHED 테이블이 있는 경우
Target Option 설명
-j LOG
ACCEPT
DROP
REJECT
 패킷을 syslog에 기록
정책과 일치하는 패킷은 라우팅
정책에 일치하는 패킷은 폐기
정책과 일치하는 패킷은 폐기하고 에러 메시지를 전송

 

3. iptables 예시
ex.1) ssh 접속 허용

ex.2) icmp 프로토콜 접근 차단

ex.3) 192.168.0.0/24에서 오는 모든 패킷을 차단

ex.4) WAN(eth0)의 ftp 포트를 192.168.0.2으로 포트포워딩

ex.5) 80/tcp 포트로 동일한 IP로부터 SYN이 1초에 10번 이상 들어오면 DROP

 

4. iptables 응용
1) recent 모듈을 이용한 SSH 스캔(접속시도) 공격 차단

2) Dos 공격 방지

 

[참고자료]
1. CentOS HowTos IPTables
2. http://webdir.tistory.com/170
3. http://blog.naver.com/rains1230/220051229335


댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다