- 리눅스의 패킷 필터링 도구로 방화벽 구성이나, NAT(Network Address Translation)에 사용
- # iptables [-t 테이블] [액션] [체인] [매치] [-j 타겟]
- 테이블(Table)
- filter(패킷 필터링)
- nat(IP주소 변환)
- mangle(패킷데이터를 변경하는 특수규칙 적용)
- raw(넷필터의 연결추적 하위시스템과 독립적으로 동작해야 하는 규칙 적용) => 명시하지 않으면 기본적으로 filter
- 액션(Action)
- [-A] : APPEND : 정책 추가
- [-I] : INSERT : 정책 삽입
- [-D] : DELETE : 정책 삭제
- [-R] : REPLACE : 정책 교체
- [-F] : FLUSH : 모든 정책 삭제
- [-P] : POLICY : 기본 정책을 설정 : target 앞 –j 필요없음
- [-L] : LIST : 정책 나열
- [-n] : 숫자값으로 출력
- [-v] : 패킷, 바이트 등을 추가
- [-t] : 체인을 만들 테이블 지정
- 체인(Chain)
- INPUT : 호스트 컴퓨터의 로컬 프로세스를 향해 들어온 모든 패킷이 방문하는 chain
- OUTPUT : 호스트 컴퓨터에서 자체적으로 생성된 패킷이 방문하는 chain
- FORWARD : 타겟이 호스트가 아닌, 호스트 컴퓨터를 경유하는 패킷이 방문하는 chain
- PREROUTING : 패킷을 INPUT rule로 보내기 전 ip와 port를 변경하는 역할
- POSTROUTING : 패킷이 OUTPUT rule에서 나온 이후 ip와 port를 변경하는 역할
- 매치(Match)
- [-s] : 출발지 매칭. 도메인, IP주소, 넷마스크 값을 이용하여 표기(--source, --src)
- [-d] : 목적지 매칭. 도메인, IP주소, 넷마스크 값을 이용하여 표기(--destination, --dst)
- [-p] : 프로토콜과 매칭. TCP, UDP, ICMP와 같은 이름을 사용하고 대소문자는 구분하지 않음
- [-i] : 입력 인터페이스와 매칭(--in-interface)
- [-o] : 출력 인터페이스와 매칭(--out-interface)
- [-j] : 매치되는 패킷을 어떻게 처리할지 지정 (--jump)
- [--line-number(s)] : 번호 표기
- 타겟(target)
- 패킷이 규칙과 일치할 때 취하는 동작을 지정
- ACCEPT : 패킷을 허용함
- DROP : 패킷을 버림(패킷이 전송된 적이 없던 것처럼)
- REJECT : 패킷을 버리고 이와 동시에 적절한 응답 패킷을 전송함(icmp-port-unreachable)
- LOG : 패킷을 syslog에 기록한다.
- SNAT --to [주소] : 소스 IP를 [변환(NAT)|NAT]함
- DNAT --to [주소] : 목적지 IP를 변환(NAT)함
- RETURN : 호출 체인 내에서 패킷 처리를 계속함
- iptables 기반으로 하나의 공인 IP주소를 공유해서 다수의 컴퓨터를 사용하는 환경을 구축하려고함. 해당 시스템에는 이더넷 카드가 두 개가 장착되어 있는데, 외부망과 연결된 첫 번째 이더넷 카드의 공인 IP주소는 200.100.50.10
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT —to 200.100.50.10
- 하나의 공인 IP주소를 이용해서 다수의 서버를 연결하여 구성한 상태이고, iptables를 이용해서 방화벽 규칙을 설정하는 과정임. 외부로부터 들어오는 웹 서비스 요청을 내부의 사설 IP주소가 192.168.0.4인 웹 서버로 전달함.
# iptables -t nat -A PREROUTING -p tcp -d 203.247.50.100 --dport 80 -j DNAT --to 192.168.0.4:80
- 하나의 공인 I주소를 이용해서 다수의 서버를 연결하여 구성한 상태이고, iptables를 이용해서 방화벽 규칙을 설정하는 과정임.
- 가. 현재 설정되어 있는 iptables의 규칙을 firewall.sh 파일로 저장함
# iptables-save > firewall.sh
- 나. 현재 설정되어 있는 iptables의 규칙을 전부 제거함
# iptables -F 또는 --flush
- 다. firewall.sh 파일에 저장되어 있는 iptables의 규칙을 불러와서 반영함
iptables-restore < firewall/sh
- 라. 적용된 iptables의 규칙을 확인함
# iptables -L 또는 —list -S 또는 --list-rules
- 외부로 들어오는 패킷을 모두 거부하고, IP주소가 168.12.22번인 호스트로부터 들어오는 패킷에 대해서만 허가하는 정책을 설정함
# iptables –P INPUT DROP
# iptables –A INPUT –s 192.168.12.22 –j ACCEPT
- 하나의 공인 IP주소를 이용해서 다수의 서버를 연결하여 구성한 상태이고, iptables를 이용해서 방화벽 규칙을 설정하는 과정임.
- 가. /usr/local/apache/error 디렉터리를 /error 디렉터리로 경로를 단축하는 설정을 함
Alias /error/ “/usr/local/apache/error/”
- 나. 하나의 IP주소를 가지고 있는 시스템에서 2개의 도메인 설정이 가능하도록 지정함. IP주소는 192.168.5.13이고, 포트 번호는 웹 서버 포트인 80번을 사용
NameVirtualHost 192.168.5.13:80
- iptables를 이용해서 NAT을 설정하는 과정\
- 가. 첫 번째 이더넷카드(eth0)를 통해 외부로 나가는 패킷에 203.247.5.13번 IP주소를 부여함
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 203.247.5.13
- 나. 203.247.12.22의 80번 포트로 들어오는 패킷을 192.168.5.13의 80번 포트로 연결함
# iptables -t nat -A PREROUTING -p tcp -d 203.247.12.22 --dport 80 -j DNAT —to 192.168.5.13:80
- iptables를 이용해서 방화벽을 설정하는 과정
- 가. 기본 테이블인 filter의 INPUT 사슬에 설정한 두 번째 정책이 IP주소 오류로 인해 수정하려고 함
# iptables (-t filter) -R INPUT 2
- 나. 기본 테이블인 filter의 INPUT 사슬에 설정한 다섯 번째 정책을 삭제함
# iptables (-t filter) -D INPUT 5
- 다. 기본 테이블인 filter의 INPUT 사슬에 설정한 두 번째 정책 이후와 연관된 로그를 기록하도록 설정함
# iptables (-t filter) -I INPUT 2