반응형
* Iptables : 리눅스 커널(Kernel, OS의 주요 기능을 수행하는 모듈)에 내장된 netfilter 기능을 rule 기반으로 패킷 필터링하여 사용자 공간에서 제어하는 오픈소스 방화벽
- 기업 차원은 대부분, 거액을 들인 CC(Common Criteria)을 받은 실제 어플라이언스 형태(전문 전용 장비로 구현)로 이용하나, 오픈소스 FW는 비용이 들지 않는 직접 설정형태의 FW
- 기본 FW와 동일하게 상위 번호(Num 1)부터 순차적 수행 처리
iptables 기능 | 설명 |
Network Address Translation | * 네트워크 주소 변환 기능 |
패킷 레벨에서의 로깅 기능 | * Logging |
확장모듈 기반 다양한 기능 제공 | * |
상태 추적 기능 제공 | * Connection Tracking 또는 Stateful Inspection 기능 제공 - FW을 통과하는 모든 패킷의 연결 상태를 Tracking 하여, 해당 정보를 메모리에 기억, 이후 기존 연결을 가장하는 접근 탐지 시, 비교하여 적합하지 않을 시 거부하는 기능 - 모든 송수신 패킷을 기록, 검사하며, 접근 차단과 차단 시, 패턴 매칭에서 제외되어 성능상의 장점이 존재 - Stateful Inspection의 경우 이스라엘 Checkpoint 사에서 최초 개발, 현대의 대부분 FW에서 기본적으로 제공하는 기능 * 상태 유형 1) NEW : 상태추적 테이블에 연결 정보를 가지고 있지 않은, 최초로 들어온 패킷 - TCP의 경우 SYN 패킷 2) ESTABLISHED : 연결된 이후, 송수신 되어 상태추적 테이블에 연결 정보를 가지는 패킷 3) RELATED : 연결 시, 포트 정보가 서비스 수행 중에 새롭게 추가되는 경우로, 연관된 연결 정보를 가진 패킷 - 대표적으로 FTP 제어 채널(21/TCP) 형성 후, 데이터 채널(20/TCP)로 송수신 하게 되는 때, 데이터 채널로 송수신 되는 패킷들은 모두 RELATED 상태가 됨 * Protocol 별 상태 유형 1) TCP 상태 : FW에서 패킷 확인 시, SYN(최초 NEW 상태), SYN+ACK(응답 수신하여 ESTABLISHED 상태)에서 마지막 ACK가 보이기 전 까지 ESTABLISHED 상태 유지 2) UDP 상태 : 비연결 프로토콜로, 연결 정보가 없기 때문에, UDP 수신 시, 최초 패킷은 NEW, 내부적으로 TTL(임의 시간)동안 ESTABLISHED 상태가 유지됨 |
* Iptables 명령어 구조 : #iptables [-t table] [action] [chain] [Rule] [-j target]
옵션 | 설명 | 유형 | 설명 |
Table | * iptables가 제공하는 기능 (Rule Table) - 명시하지 않을 시, Default는 Filter 테이블 |
filter | 기본 테이블로 방화벽 관련 작업 수행 |
nat | 새로운 연결을 생성하는 패킷 참조 | ||
mangle | TTL, ToS 변경 같은 특수 규칙을 적용 | ||
raw | 연결 추적 기능을 자세히 설정, 제외 | ||
Action | * iptables의 규칙을 추가 / 삭제/ 관리 (조합하여 사용 가능) |
-N | 새로운 사용자 정의 Chain 생성 |
-X | 비어 있는 Chain 제거 | ||
-P | Policy로, Chain의 기본 정책 설정 "-P [체인] [ACCEPT | DROP | REJECT]" 형식으로, 해당 체인의 모든 룰에 매치되지 않을 시, 적용되는 정책 * 종류 - Negative 정책 : default policy를 DROP/REJECT로 설정 후, 허용할 부분만 ACCEPT 하는 방식 - Positive 정책 : default policy를 ACCEPT로 하고, 차단할 부분만 DROP/REJECT 하는 방식 |
||
-L | List로, 현재 Chain의 규칙 나열 | ||
-F | Flush로, 해당 Chain으로 부터 모든 규칙 제거 | ||
-A | Append로, Chain의 제일 마지막에 새로운 규칙 추가 | ||
-I | Insert로, 해당 Chain의 첫 행에 룰을 추가 "-I 체인 n" 형식으로 지정 시, 행번호 n에 룰 추가 가능 |
||
-R | 규칙 교환 | ||
-D | Delete로, 규칙 제거 "-D 체인 룰" 또는 "-D 체인 n" 형식으로 룰/행 지정 삭제 |
||
Chain | * 패킷이 이동하는 경로 (방향성)을 설정 |
INPUT | 호스트로 향하는(방화벽을 최종 목적지로 하는) 모든 패킷 |
FORWARD | 라우팅되는 로컬이 아닌 모든 패킷 - 방화벽을 별도 서버로 구성하여 서비스 할 시 사용 |
||
OUTPUT | 호스트에서 상대에 보내는(방화벽을 최초 출발지로 하는) 모든 패킷 | ||
Rule | * iptables에서 매칭 할 조건 | -s, -d | 출발지/도착지 IP - 명시하지 않을 시, any IP (모두) ex) -s 192.168.159.0/24 또는 -s 192.168.159.131 |
--s/dport | 출발지/도착지 port ex) --sport 23 (23 포트) ex) --sport 1024: (1024 이상 포트) ex) --dport :65535 (65535 이하 포트) ex) --dport 1:1023 (1~1023 포트) |
||
-p | 단순 프로토콜 매칭 (세밀한 설정 없이 지정) | ||
--icmp -type [메세지타입] | -p에서 icmp만 설정할 수도 있지만, 디테일하게 메세지 타입 설정이 가능 ex) --icmp-type echo-request |
||
--tcp flags | -p에서 tcp만 설정할 수도 있지만, 디테일한 플래그 리스트 설정 가능 -- tcp flags [검사할 플래그 리스트] [설정되어야 할 플래그 리스트] ex) --tcp-flags SYN,FIN SYN,FIN = SYN, FIN 플래그만 검사하여, SYN, FIN 플래그가 설정된 패킷 탐지 (이외 다른 플래그가 있어도, SYN, FIN이 있으면 탐지) ex) --tcp-flags ALL SYN,FIN = 모든 flag(ALL)를 검사하여, SYN, FIN 플래그만 설정된 패킷 탐지 (이외 다른 플래그 없이, SYN, FIN만 탐지함을 의미) |
||
-m state | TCP 탐지 확장 기능으로, 상태(State) 기능 사용 선언으로 -m state --state [탐지할 상태] 명시 - 탐지할 상태 : NEW, ESTABLISHED, RELATED, INVALID |
||
-i, -o | i(입력 인터페이스), o(출력 인터페이스) | ||
! | NOT의 의미로 사용, 특정 매칭 제외 | ||
Target | * Rule에 매치될 시, 적용할 정책을 지정 - "-j [유형]" 형태로 선언 |
ACCEPT | 패킷 허가, 본래 라우팅대로 처리 |
DROP | 패킷 거부, 무조건 버림 (응답 메세지 없음) - 보안상 REJECT 보다 적절함 |
||
LOG | 패킷을 시스로그(syslog)에 전달하여 기록 - 보통 /var/log/messages에 남김 |
||
REJECT | 패킷을 버리고 ICMP 에러 메세지로 응답 - 불필요한 트래픽이 발생하므로, 서비스 부하 유발 및, 정보 제공 등 악용 될 수 있음 |
반응형
'Information Security > Security Solution' 카테고리의 다른 글
침입 방지 시스템 (IPS - Intrusion Prevention System) (0) | 2021.01.11 |
---|---|
DPI (Deep Packet Inspection) (0) | 2021.01.11 |
차세대 방화벽 (NGFW - Next Generation F/W) (0) | 2021.01.10 |
웹 방화벽(Web Application Firewall - WAF) (0) | 2021.01.10 |
방화벽 (Firewall - F/W) (0) | 2021.01.10 |