•
리눅스 배포판 포함
•
상용 방화벽 제공 대부분 기능 제공
◦
패킷 필터링
◦
상태기반
◦
어플리케이션 계층 필터링
Netfilter
•
리눅스가 제공하는 모든 종류의 패킷 필터링과 맹글링 도구의 공식적 프로젝트명
•
네트워크 스택으로 함수를 후킹하는데 사용할 수 있는 리눅스 내부의 프레임 워크
•
iptables가 방화벽 기능을 구현할 수 있게 프레임워크를 제공
명령어
iptables [Table] [Command] [Chain] [Rule] [Target]
Table
***filter | 패킷 필터링 시 적용되는 필터링 규칙 |
*nat | NAT 규칙 |
mangle | 패킷 데이터를 변경하는 특수 규칙 |
raw | 넷필터의 연결 추적 기능과 독립적으로 작동시키는 기능에 사용되는 테이블
넷필터, ip conntrack 모듈보다 더 높은 우선순위 가짐 |
Command
*A(Append) | 명시한 체인에 규칙 추가 |
*I (Insert) | 명시한 체인 특정 위치에 규칙 추가 |
*D (Delete) | 명시한 체인에 특정 규칙 삭제 |
N (new) | 사용자정의 체인 생성 |
*F (Flash) | 명시한 체인 내 규칙 전체 삭제 |
X (Erase) | 명시한 체인 삭제 |
*P (Policy) | 기본 정책 설정 |
*L (List) | 명시한 체인 내 규칙 출력 |
E (namE) | 체인이름 변경 |
Chain
forward - 방화벽에 들어오거나 나가는 체인
output : 방화벽에서 생성된 패킷 = 소스 ip가 방화벽
Routing이 수행된 후에 목적지 ip가 자기자신이라면 input 아니라면 forward
어떤 패킷 허용 차단 - 방화벽 타겟 들어오고있다. : input이다
어떤 패킷 허용 차단 - 방화벽에서 만들어져서 다른곳 가려고함 : output
그외 나머지 : forward
•
Filter테이블에서 주로 다루는 chain
◦
INPUT : 커널 내부에서 라우팅 계산을 마친 후 로컬 리눅스 시스템이 목적지인 패킷(로컬 소켓이 목적지인 패킷)
◦
OUTPUT : 리눅스 시스템 자체가 생성하는 패킷
◦
FORWARD : 리눅스 시스템을 통과하는 패킷
•
Nat테이블에서 다루는 체인
◦
PREROUTING : 커널 내부에서 라우팅을 수행하기 전
◦
POSTROUTING : 커널 내부에서 라우팅을 수행한 후
◦
OUTPUT
•
Mangle 테이블에서 다루는 체인
◦
PREROUTING, POSTROUTING, INPUT, OUTPUT, FORWARD
•
Raw테이블에서 다루는 체인
◦
PREROUTING, OUTPUT
Match
정책 설정을 위한 조건
--source (-s) | 출발지 IP주소(or 네트워크 주소) - AND
Hostname, ip주소, ip범위(마스크, CIDR) |
--destination (-d) | 목적지 IP주소 (or 네트워크 주소) |
--protocol (-p) | 특정 프로토콜
tcp, udp, icmp |
--sport | 출발지 포트 |
--dport | 도착지 포트 |
--in-interface (-i) | 입력 인터페이스명( ex) eth0 ) |
--out-interface (-o) | 출력 인터페이스명 |
--state | 연결 상태
NEW, ESTABLISHED, RELATED, INVALID |
--string | 어플리케이션 계층 데이터 바이트 순서 |
Target -j
*ACCEPT | 패킷이 본래 라우팅대로 진행(허용) |
*DROP | 패킷을 그대로 버림(수신 스택에서는 모름) |
LOG | syslog에 관련 내용을 기록 |
REJECT | 패킷을 버리고, 적절한 응답 패킷을 전송
TCP 연결의 경우 TCP 재설정 패킷 전송
UDP 패킷의 경우 Port Unreachable 메시지 전송 |
RETURN | 호출한 체인 내에서 패킷 처리 계속 진행 |
옵션 | --log-prefix “XXXXXXXX”
--log-level
--log-ip-options
--log-tcp-options |
예제
•
방화벽에 접속하는 트래픽은 오직 SSH서비스만 가능
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
•
공격자로 추정되는 1.1.1.1 차단
iptables -A INPUT -s 1.1.1.1 -j DROP
iptables -A FORWARD -s 1.1.1.1 -j DROP
•
네트워크 A에서 네트워크 B로 가는 트래픽 차단
iptables -A FORWARD -s Network_A -d Network_B -j DROP
•
내부에서 외부서버 2.2.2.2에 접속하는 모든 패킷 정보 기록
iptables -A FORWARD -d 2.2.2.2 -j LOG --log-prefix “LOG_NAME”
•
Soqmn 웹 서비스를 제외한 모든 트래픽 차단
iptables -A CHAIN -p tcp ! --dport 80 -j DROP
•
방화벽에 들어오는 패킷중 출발지 주소가 내부 네트워크가 아닌 트래픽은 차단
iptables -A INPUT ! -s Internal_Network -j DROP
필터링 기본 작동 원리
•
이때 도착한 패킷이 특정 규칙의 조건식에 만족하면 그 규칙의 타겟(허용, 차단)대로 처리되며, 그 패킷은 더 이상 하위 규칙들과 비교하지 않고 다음 패킷을 처리(예외 : Target이 Log인 경우)
•
패킷 필터링 규칙(Rule)들의 모음
•
패킷이 도착하면 작성된 규칙들에 부합되는지 비교 (규칙들의 순서번호 별로 진행)
•
따라서 규칙들간의 우선순위가 중요함. 즉, 도착한 패킷이 여러 개의 규칙에 부합해도 가장 우선순위가 높은 규칙만 적용됨.