iptables 이란?
iptables는 리눅스 커널 방화벽(netfilter 모듈)에 대한 제어를 사용자가 가능하도록 구현된 어플리케이션이다.
쉽게 얘기하여 netfilter 모듈을 사용하기 위한 User Interface 정도로 보면된다.
iptables 정책 요구사항
- 몇 개의 클라이언트와 두 개의 서버로 구성된 네트워크에서 방화벽을 설치한다고 가정한다.
먼저 Iptables정책 요구사항으로 몇가지 경우가 있다.
1. 서버는 외부 네트워크에서 접근할 수 있어야 하고 내부 네트워크의 시스템은 방화벽을 통해
아래 몇가지 유형의 트래픽을 실행할 수 있어야 하고 밑에 트래픽 외에는 전부다 허용하지
말아야 한다.
DNS 질의
FTP 전송
NTP(Network Time Protocol)
SSH 세션
SMTP 세션
Whois 질의
2. 그리고 내부 네트워크 혹은 방화벽에서 맺어진 세션은 상태 유지형으로 추적해야 하며
NAT 기능도 제공되어야 한다.
3. 방화벽 자체는 내부 네트워크로 부터 SSH를 이용하여 접속할 수 있어야 하며, 이것이
유일한 서버 프로세서여야 한다.
4. ICMP echo Request 메시지를 모두 수용하고 그외 ICMP 메시지는 모두 버린다.
5. 인가되지 않은 패킷, 포트 스캔 같은 잘못된 시도들은 모두 로그에 기록후 버린다.
iptables 사용법
1. iptables 기본 명령어
1-1. iptables 기본 명령어 목록
* -L : 적용 되어 있는 정책 목록을 출력한다.
* -A : 새로운 정책을 추가한다.
* -I : 위치를 선택하여 정책을 삽입한다.
* -R : 위치를 선택하여 정책을 교환한다.
* -D : 위치를 선택하여 정책을 제거한다.
* -N : 새로운 체인을 만든다.(INPUT, OUTPUT, FORWARD 외에)
* -P : 체인에 미리 정의되어 있는 정책을 수정한다.
* -F : 체인으로 부터 규칙들을 지운다.
* -Z : 체인의 모든 규칙들의 패킷과 바이트 카운트를 0으로 만든다.
* -X : 비어있는 체인을 제거한다.
1-2. iptables 기본 명령어 사용 예제
* iptables -L : 적용 시킨 정책 목록 출력
* iptables -D INPUT 1 : INPUT 체인 첫번째 줄에 있는 정책을 삭제한다.
2. iptables 제어 옵션 명령어
2-1. iptables 제어 옵션 명령어 목록
* -s : 패킷의 송신지를 제어한다.
* -d : 패킷의 수신지를 제어한다.
* -j : 방화벽을 지난 후 패킷의 상태를 제어한다.
* -p : 프로토콜을 제어한다.
* --sport : 송신지 포트를 제어한다.
* --dport : 수신지 포트를 제어한다.
2-2. iptables 제어 옵션 명령어 사용 예제
* iptables -A INPUT -s 192.168.0.5 -j DROP : 192.168.0.5로 부터 오는 패킷을 모두 차단한다.
* iptables -A INPUT -d ! 192.168.0.10 -j ACCEPT : 192.168.0.10를 향해 가는 패킷이 아니라면 허용한다.
* iptables -A INPUT -p TCP -j ACCEPT : TCP 프로토콜 패킷을 모두 허용한다.
* iptables -A INPUT -p TCP --dport 80 -j DROP : 80번 포트를 향해가는 TCP 패킷을 차단한다.
3. 패킷 상세 내역에 따른 제어 옵션 명령어
3-1. iptables 패킷의 상세 내역에 따른 제어 옵션 목록
* --tcp-flags : TCP 플래그에 따라 패킷을 제어한다.(첫 번째 인자를 검사하고 두 번째 인자는 설정이 되어야 함)
* -m state --state : 패킷의 상태와 목적에 따라 제어한다.
※ -m state 명령어 상태 리스트 ( -m state --state [상태] )
- NEW : 새로 접속을 시도하는 패킷
- ESTABLISHED : 접속을 한 상태에 있는 패킷
- INVALID : 유효하지 않은 패킷 (보통 DROP된다.)
- RELATED : 접속에 연관성을 가지는 패킷 ( e.g. FTP 접속 패킷, ICMP 에러 메세지)
3-2. iptables 패킷의 상세 내역 제어옵션 예제
* iptables -A INPUT -p TCP --tcp-flags SYN,RST,ACK SYN -j DROP : SYN패킷의 set이 1이면 DROP시킨다.
* iptables -A INPUT -p TCP -m state --state NEW -j DROP : 접속을 시도하는 SYN, ACK 플래그 패킷을 차단한다.
** iptables 활용 예시 - Ping 차단 정책
1. 테스트 환경
* Sender : 192.168.0.94 (OS: Backtrack5 r3)
* Reciever : 192.168.0.109(OS: Kali Linux)
* Tool : Wireshark, Ping, Iptables
2. 모의 시나리오
ICMP 메시지를 거부하는 정책을 iptables 방화벽에 추가하고, 내부 네트워크의 다른 환경에서
Ping 메시지를 전송하여 ICMP 거부 정책이 올바르게 동작하는지 확인한다.
3. 테스트 과정 및 결과
3-1. 정책 추가 전 ping 메시지 수신 확인
정상적으로 ping의 ICMP 패킷이 전송됨을 확인할 수 있다.
3-2. iptables에 ICMP 거부 정책 추가
iptables에 ICMP 메시지에 응답을 하지 않는 정책을 추가한다.
- IPTABLES -N ICMP : ICMP라는 새로운 체인을 테이블에 추가한다.
- IPTABLES -A INPUT -p icmp -j ICMP : ICMP 메시지가 수신되면 ICMP 체인으로 전달하는 정책을 추가한다.
- IPTALBLES -A ICMP -p icmp -icmp-type 8 -j DROP : ICMP 메시지중 8번 타입 (icmp echo request)
메시지를 차단한다.
3-3. 정책 설정 후 ping 메시지 수신 확인
아까와 같이 수신자 IP로 ping ICMP 메시지를 전송하였다.
체인을 미리 생성하여 ICMP 메시지가 오면 ICMP 체인으로 전달한 후 8번 타입 즉, ICMP 요청
메시지에는 응답을 하지 않는 정책을 추가하고 난 후의 패킷 캡쳐 화면이다.
ICMP Echo (ping) request 패킷만 계속 전송되고 응답이 가지 않고 있다는 사실을 확인할 수 있다.
'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글
iptables 을 이용한 SSH Brute force 방어 (0) | 2021.04.19 |
---|---|
iptables을 이용한 UDP Flood 방어 (0) | 2021.04.19 |
방화벽(Firewall) 이란 무엇인가 (0) | 2021.04.19 |
IPSec의 개념 그리고 IPSec VPN (0) | 2021.04.19 |
r-services 개념과 관련 취약점 (0) | 2021.04.19 |