iptables
리눅스 커널에 내장된 netfilter라는 리눅스 커널 모듈을 통하여 실제로 필터링 동작.
Chain 체인
개발 정책의 방향성에 따라 구분한 그룹
INPUT: 서버로 유입되는 트래픽 구간OUTPUT: 서버에서 나가는 트래픽 구간FORWARD: 서버를 통과하는 트래픽 구간
Table 테이블
체인을 역할별로 구분한 그룹
- Filter Table: 방화벽의 기본 기능인 패킷을 허용하거나 차단하는데 사용
- NAT Table: IP를 변환하는 NAT 기능을 위한 테이블
- Mangle Table: 주로 패킷 헤더의 TOS, TTL 값을 변경
- Raw Table: 연결 추적 시스템에서 처리하면 안되는 패킷 표시
- Security Table: 필수접근제어 네트워크 규칙. SELinux와 같은 보안 모듈에서 구현. filter 테이블 이후에 호출
Match 매치
제어하려는 패킷의 상태 또는 정보 값의 정의. 정책에 대한 조건
Target 타깃
Match와 일치하는 패킷에 대한 처리 방식
ACCEPT: 패킷을 정상적으로 처리DROP: 패킷을 폐기REJECT: 패킷을 폐기 및 차단응답 메시지 전송LOG: 패킷을 syslog에 기록
CLI
iptables -L # 조회
iptables [<switches>…]-L,–list: 정책보기-v: : 통과하는 패킷과 바이트 수 확인
-S,–list-rules: 실제 정책(인터페이스 포함) 보기-F,–flush: 정책 모두 삭제-F,–zero: 패킷 카운트 초기화-Z chain,–append chain: 정책추가 (chain: 정책을 추가할 체인. eg.INPUT,OUTPUT, …)
-D chain,–delete chain: 정책삭제 (chain: 정책을 삭제할 체인. eg.INPUT,OUTPUT, …)
-R chain,–replace chain: 정책교체
-C chain,–check chain: 정책확인 (chain: 정책을 확인할 체인. eg.INPUT,OUTPUT, …)
-I chain line,–insert chain line: 특정 라인에 정책추가 (chain: 정책을 추가할 체인. eg.INPUT,OUTPUT, …) (line: 정책을 삽입할 줄번호)-i interface,–in-interface interface: 입력 인터페이스 지정. (interface)
-o interface,–out-interface interface: 출력 인터페이스 지정.-p protocol,–protocol protocol: 프로토콜 지정. (protocol: 프로토콜 명 또는 포트번호)–sport port: 출발지 포트 지정(port: 포트번호)
–dport port: 목적지 포트 지정-s ip,–source ip: 출발지 IP 지정(source: IP.127.0.0.1,127.0.0.1/24)
-d ip,–destination ip: 목적지 IP 지정–state state: 연결 상태와 매치(state: 연결 상태)–string: 애플리케이션 계층 데이터 바이트 순서와 매치–comment comment: 커널 메모리 규칙과 연계되는 최대 256바이트 주석(comment: 주석)-y,–syn: SYN 패킷 불허-f,–fragment: 두 번째 이후의 조각 규칙 명시-t table,–table table: 테이블 지정(table: 처리될 테이블)-m module,–module module: 특정 모듈과의 매치iprange: ip 범위 지정–src-range iprange: 출발지 IP 지정(iprange: IP.127.0.0.1-127.0.0.2)
–dst-range iprange: 목적지 IP 지정
multiport: 포트 범위 지정–sports ports: 출발지 포트 지정(ports: 포트범위.start:end,1,2,3)
–dports ports: 목적지 포트 지정
-j target,–jump target: 타깃 지정(target:ACCEPT,DROP,REJECT,LOG)ACCEPTDROPREJECTLOG: 로그 기록–log-level level: 로깅 수준 설정(level: 로깅 레벨)–log-prefix 'prefix': 로깅시 접두어 설정(prefix: 로깅시 접두어 설정)
-P chain target,–policy chain target: 기본 정책 변경-N chain,–new chain: 새로운 체인 추가-X chain,–delete-chain chain: 체인 삭제
iptables -A INPUT -p tcp –dport 80 -j ACCEPT: HTTP 정책 추가iptables -D INPUT -p tcp –dport 80 -j ACCEPT: HTTP 정책 삭제iptables -C INPUT -p tcp –dport 80 -j ACCEPT: HTTP 정책 확인iptables -I INPUT 5 -p tcp –dport 80 -j ACCEPT: HTTP 정책을 5번째 줄에 추가
결과화면
ACCEPT: 허용 정책DROPREJECT: 패킷 차단 이유를 출발지에 전달
state {state}NEW: 신규 세션RELATED: 연계를 위하여 연결(eg. FTP)ESTABLISHED
tcpdpt:{service}: 목적지 서비스명 지정reject-with: REJECT 시 사유 추가icmp-host-prohibited
Installation
files
- /etc/systconfig/iptables: 영구 정책 관리
- message: 방화벽 로그