Linux

Linux - 패킷 필터링 도구 : iptables

j9m 2022. 10. 13. 20:30
반응형

iptables

iptables 시스템 관리자 리눅스 커널 방화벽(다른 넷필터 모듈로 구현됨)이 제공하는 테이블들과 그것을 저장하는 체인, 규칙들을 구성할 수 있게 해주는 사용자 공간 응용 프로그램이다. 각기 다른 커널 모듈과 프로그램들은 현재 다른 프로토콜을 위해 사용되는데, iptables는 IPv4에, ip6tables는 IPv6에, arptables는 ARP에, ebtables는 이더넷 프레임에 적용된다.

 

사용법

iptables [-t table] action chain match [-j target]

 

주요 액션

Action 설명
-N 새로운 사용자 정의 사슬을 만든다.(--new-chain)
-X 비어있는 사슬을 제거한다. 단 기본 사슬은 제거할 수 없다.(--delete-chain)
-P 사슬의 기본 정책을 설정한다.(-policy)
-L 현재 사슬의 규칙을 나열한다.(--list)
-F 사슬로부터 규칙을 제거한다.(flush)
-Z 사슬내의 모든 규칙들의 패킷과 바이트의 카운트를 0으로 만든다.(--zero)
-A 사슬에 새로운 규칙을 추가한다. 해당 사슬에 맨 마지막 규칙으로 등록된다.(--append)
-I 사슬에 규칙을 맨 첫 부분에 삽입한다. 룰 넘버를 사용하여 특정 부분에 삽입할 수도 있다.(一insert)
-R 사슬의 규칙을 교환한다.(--replace)
-D 사슬의 규칙을 제거한다.(--delete)

 

주요 매치

Match 설명
-s 출발지 IP 주소나 네트워크와 매칭. 도메인, IP 주소, 넷마스크값을 이용하여 표기(--source, --src)
-d 목적지 IP 주소나 네트워크와 매칭. 도메인, IP 주소, 넷마스크값을 이용하여 표기(--destination, --dst)
-p 특정 프로토콜과 매칭. TCP, UDP, ICMP와 같은 이름을 사용하고 대소문자는 구분하지 않음
이 옵션을 사용하지 않으면 모든 프로토콜이 대상이 됨(--protocol)
-i 입력 인터페이스와 매칭(--in-interface)
-o 출력 인터페이스와 매칭(--out-interface)
! 아닌(NOT)의 의미로 사용하는데, 특정 매칭을 제외할 때 사용
-m 좀 더 세밀하게 제어할 때 사용하는 매칭 옵션(--match)
--state 연결 상태와 매칭. INVALID, ESTABLISHED, NEW, RELATED를 사용
--string 특정한 패턴과 매칭

 

기타 옵션

옵션 설명
-n 다른 옵션과 같이 사용되며 출력 정보를 숫자값으로 표현(--numeric)
-v 다른 옵션과 같이 사용되며 패킷, 바이트 수 등을 추가하여 정보를 자세히 출력(--verbose)
--line-number 정책 앞에 번호를 붙여 출력하며 삭제나 삽입할 때 유용

 

주요 타깃(-j, --jump)

Target 설명
ACCEPT
패킷을 허가하는 것으로 본래 라우팅대로 진행
DROP
패킷을 거부하는 것으로 더 이상 어떤 처리도 수행되지 않고 버림
LOG
패킷을 syslog에 전달하여 기록. 일반적으로 /var/log/messages에 저장
REJECT
패킷을 버리고 동시에 적당한 응답 패킷을 전달. 예를 들면 TCP인 경우 TCP 재설정(Reset) 패킷, UDP인 경우 ICMP 포트 도달 불가(Port Unreachable) 메시지를 전송
RETURN
호출 사슬 내에서 패킷 처리를 계속 진행

사용 예

① 기본 테이블인 Filter의 모든 사슬에 설정된 정책 정보를 출력한다.

iptables -L

 

② 기본 테이블인 Filter의 모든 사슬에 설정된 정책 정보(포트, 프로토콜 등)를 숫자값으로 출력한다.

iptables -nL

 

③ 기본 테이블인 Filter의 모든 사슬에 설정된 정책 정보를 패킷, 바이트 등을 추가하여 자세히 출력한다.

iptables -vL

 

④ 기본 테이블인 Filter의 INPUT 사슬에 설정된 정책 정보를 출력한다.

iptables -L INPUT

 

⑤ NAT 테이블의 모든 사슬에 설정된 정책 정보를 출력한다.

iptables -t nat -L

 

⑥ 기본 테이블인 Filter의 모든 사슬에 설정된 정책을 모두 제거한다.

iptables -F

 

⑦ 기본 테이블인 Filter의 INPUT 사슬에 설정된 정책을 모두 제거한다.

iptables -F INPUT

 

⑧ INPUT 사슬에 발신지가 192.168.12.22이고, 도착지가 localhost인 패킷을 거부(DROP) 시키는 정책을
추가한다.

iptables -A INPUT -s 192.168.12.22 -d localhost -j DROP

 

⑨ INPUT 사슬에 발신지가 192.168.1.0 네트워크 대역에 속한 호스트들을 허가하는 정책을 추가한다.

iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT



⑩ INPUT 사슬에 발신지가 192.168.5.13으로부터 들어오는 ICMP 패킷을 거부한다.

iptables -A INPUT -s 192.168.5.13 -p icmp -j DROP

 

⑪ INPUT 사슬에 발신지가 192.168.5.13으로부터 패킷 중에 ICMP 프로토콜을 제외한 모든 프로토콜을
거부한다.

iptables -A INPUT -s 192.168.5.13 ! -picmp -j DROP

 

참고자료
CentOS 7으로 리눅스마스터 1급 정복하기 
반응형

'Linux' 카테고리의 다른 글

Linux - ssh 서버 설정  (0) 2022.10.24
Linux - Proxy 서버 프로그램 : Squid  (0) 2022.10.14
Linux - 백업 관련 명령어 : cpio  (0) 2022.10.13
Linux - 로그 관련 명령어 : lastb  (0) 2022.10.12
Linux - 로그 관련 명령어 : lastlog  (0) 2022.10.12