본문 바로가기
정보보안/방화벽

Iptables 기초 사용법과 옵션 정리 -1 , 방화벽, Netfilter, 리눅스

by 우동이 2023. 1. 5.
300x250

Iptables이란

Iptables는 C로 개발된 리눅스 커널 방화벽입니다.
현재 주요 리눅스 배포 OS에 내장되어 있으며 현재는 리눅스 커널 3.13 버전 이후의 nftables이 후속 버전으로 출시되어 있습니다.

Iptables은 해당 리눅스 커널 방화벽이 제공하는 구성을 직접 시스템 관리자가 설정합니다.
예시 > table, chain, rule

 

nftables와 다양한 리눅스 커널 방화벽에 대한 정보는 여기서 확인할 수 있습니다. >> https://netfilter.org/projects/nftables/

 


Iptables 소개

Iptables

 

Iptables의 기초적인 사용법을 알아보기 전에 간단하게 소개하고 넘어가겠습니다.

Iptables는 위에서 말했듯 주요 리눅스 배포판 전부에 내장된 리눅스 커널 방화벽입니다.

 

상용방화벽에서 제공하는 대부분의 주요 기능을 동일하게 사용가능합니다.

  • 패킷 필터링 (Packet Filtering)
  • 상태기반 감시(State Inspection)
  • 어플리케이션 계층 필터링(Application Gateway - OSI 7 Layer)

여기서 상태기반 방화벽이란 패킷 필터링 기능에서 더 많은 방화벽 기능을 수행하는 3세대 방화벽이며

OSI 7 계층의 응용(Application) 계층에서 동작하는 필터링으로 역시 패킷 필터링보다 윗단계 성능을 지닙니다.

 

물론 더 적은 코드로 많은 처리량을 가진 nftables가 후속버전으로 나왔습니다만

Iptables가 더 오래된 만큼 참고할 수 있는 문서양도 꽤 많아서 혼자 실습해보기에 괜찮은 것 같습니다.

 

또한 리눅스 방화벽을 얘기하면서 Netfilter라는 개념을 빼놓을수가 없습니다.

 

Netfilter란
리눅스 커널 내부의 네트워크 관련 프레임워크
Iptables의 경우 리눅스OS에서 기본 방화벽으로 사용되기 때문에(해당버전) 
Linux 커널의 네트워크 스택에 있는 Packet-filtering Hook과 연동되어 동작하게 됩니다.
이때의 Hook은 Netfilter Framework라고 불립니다.

즉 Iptables이 방화벽으로 동작하기 위해서는 리눅스 커널의 Netfilter의 프레임워크를
사용해야 한다는 긴밀한 연관성이 있다는 것을 알아야 합니다.

 


Iptables 구성

iptables -L

 

yum install iptables
#iptables가 내장되어 있다는 가정하에 시작 만약 설치가 안되어있다면 패키징 설치 필요

Iptables -L
#적용된 iptables 룰 확인

 

Iptables에 현재 적용된 룰을 확인해보면 [Chain] 내용이 보입니다.

Chain 이란 Iptables 방화벽에서 구성할 룰의 설정 요소로써 패킷 필터 조작 상태를 의미합니다.

 

체인은 크게 두 종류(테이블)로 나뉩니다.

 

Filter Rule(Chain)

  • INPUT - 패킷이 서버로 들어오는 경우
  • OUTPUT - 서버에서 패킷이 외부로 나가는 경우
  • FORWARD - 패킷이 서버를 지나가는 경우(INPUT&OUTPUT)

NAT Rule(Chain)

  • PREROUTING - DNAT(Destination NAT) 룰 적용, 패킷의 도착지 주소를 변경
  • POSTROUTING - SNAT(Source NAT) 또는 masquerad 룰 적용, 패킷의 출발지 주소를 변경

 

제가 처음에 iptables 방화벽을 접했을때 용어나 개념이 전부 생소했습니다.

그래서 제가 이해한 바대로 추가 설명을 남기도록 하겠습니다.

 

공부메모)
Linux 서버가 목적지인 패킷, 즉 패킷이 서버로 들어옴(input) - INPUT chain
Linux 서버에서 외부 목적지로 나가는 패킷, 즉 서버의 패킷이 외부로 나감(output) - OUTPUT chain
FORWARD chain은 현재의 서버가 목적지가 아닌 패킷이 통과하는 경우(NAT네트워크 공유 기능을 위해 사용됨)
즉 패킷이 서버로 들어와 다시 나가는 경우

Masquerade - 내부 사설 IP의 PC들이 외부 인터넷이 연결 가능하도록 해주는 기능

- NAT(Network Address Translation) - 네트워크 주소 변환 서비스
- SNAT(Source NAT) - 내부 사설 IP에서 외부로 나갈 때 공인 IP로 변환 - masquerade와 비슷하다고 볼 수 있음
- DNAT(Destination NAT) - 외부에서 방화벽(외부 IP)로 요청되는 주소로 내부 사설 IP로 변환

기본정책(chain)의 구조도
------> INPUT ------> Linux Server ------> OUTPUT ------>
     |          | 
     +------------- FORWARD ---------------+

 

 

iptables 구조도

 

 

위에서 소개한 NAT와 Filter 체인을 함께 나열하여 iptables의 구조도를 도식화하면 위와 같은 구조입니다.

 

이제 iptables 사용시 기본정책인 Filter Rule(INPUT,OUTPUT,FORWARD) 부터 설정해 보겠습니다.

 


iptables 기초 문법 - 1

iptables -L

 

현재 기본정책이 전부 [DROP] 비허용 되어있는 상태로 가정합니다.

비허용 상태에서는 모든 패킷이 허용되지 않기 때문에 통신이 전혀 불가능합니다.

 

이 상태에서 기본 정책 전부 초기화 및 허용하는 코드는 다음과 같습니다.

 

iptables -F #규칙 초기화
iptables -X #비어있는 체인 삭제
iptables -t nat -F #NAT 규칙 초기화
iptables -t nat -X #NAT 규칙 비어있는 체인 삭제

iptables -P INPUT ACCEPT #INPUT 체인 허용
iptables -P OUTPUT ACCEPT #OUTPUT 체인 허용
iptables -P FORWARD ACCEPT #FORWARD 체인 허용

 

 

iptables -L

 

위 코드를 입력하고 다시금 iptables 규칙을 확인해보면 비어있는 규칙들은 삭제되고 모든 기본정책이 [ACCEPT]

상태로 변경됩니다.

 

>> DROP - 정책 비허용 상태, ACCEPT - 정책 허용 상태

 

#iptables 문법 구조
iptables [제어옵션] INPUT -s [발신지] --sport [발신지포트] -d [목적지] --dport [목적지포트] -j [정책]

iptables의 기초적인 문법 구조는 위와 같습니다.

여기서 기본정책을 변경하는 경우 [-j] 옵션은 사용되지 않지만 기타 프로토콜이나 ROUTING의 경우에는 [-j] 옵션이 사용되어야 합니다.

추가적으로 iptables의 기본정책을 제어할 수 있는 제어옵션은 다음과 같습니다.


iptables 기본정책 제어옵션

-L (--list) 적용 되어 있는 정책 목록 출력
-A (--append) 새로운 정책 추가(가장 낮은 순위로 추가됨)
-I (--insert) 새로운 정책 삽입(가장 높은 순위로 삽입됨)
-R (--replace) 새로운 정책 교체(기존의 정책을 교체)
-D (--delete) 해당 정책을 삭제
-N (--new-chain) 새로운 체인 생성(INPUT,OUTPUT,FORWARD 제외)
-P (--policy) 기본 정책 변경
-F (--flush) 체인에 설정된 규칙 초기화
-Z 체인의 모든 규칙들의 패킷과 바이트 카운터를 0 으로 만든다.
-X (--delete-chain) 비어있는 체인을 삭제
-E  체인이름 변경

 

iptables 제어 옵션

-s (--source) 출발지 주소
-d (--destination) 목적지 주소
--sport 출발지 포트
--dport 목적지 포트
-p (--protocol) 프로토콜(tcp,udp...)
-i (--in-interface) 패킷이 들어오는 네트워크 인터페이스 (inbound interface)
-o (--out-interface) 패킷이 나가는 네트워크 인터페이스 (outbound interface)
-f (--fragment) 나뉜 패킷
-j (--jump) 패킷 상태 제어

그렇다면 위 옵션표를 가지고 예시 코드를 몇 가지 짜보겠습니다.

 

#1.
iptables -A INPUT -p icmp -j ACCEPT 
# icmp 프로토콜의 INPUT 패킷을 허용하는 새로운 정책 추가(append)

#2.
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT 
# icmp 프로토콜의 echo-request 타입의 패킷의 INPUT을 허용하는 기본 정책 추가(append)

#3.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# tcp프로토콜의 목적지 포트가 22번인 패킷의 INPUT 허용 (22:ssh)

#4.
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.100.0/24 -j MASQUERADE
# NAT RULE - eth0에 할당된 office PC(192.168.100.0/24)의 외부 인터넷 사용 가능
# 이 경우 iptables(방화벽) 서버가 라우터 역할을 한다고 가정
# -o : outbound 패킷이 eth0일 경우

 

위 4가지 코드 전부 각각 방화벽에 자신이 관리자로써 정책을 설정해 넣는 코드라고 생각하면 됩니다.

특정 프로토콜의 통신을 허가할 것인가

혹은 해당 서버 대역에 외부 인터넷 접속 허가를 줄 것인가

등등

 

다양한 제어 옵션과 기초적인 문법 사용법에 대해 익혀봤으니 다음 글은 이 문법 요소들을 가지고

다양한 가정 상황의 문법을 작성해 보겠습니다.

 


다른 글

 

방화벽 활용을 위한 가상 인프라 구축 시나리오 - CentOS(Firewall)-Fedora(Office), Virtual Box

작업환경 : Virtual Box 7, CentOS 8.3, Fedora 39 구축할 가상 인프라의 대략적인 구성도입니다. 사용할 방화벽의 종류는 CentOS 8 - iptables이며 공격자는 Kali Linux 그리고 피해자 Fedora입니다. 구성이 끝난 상

hobbylists.tistory.com

 

 

Virtual Box 가상 서버 동일 네트워크에 두기 - 호스트 어댑터 네트워크 설정법

Virtual Box는 Oracle에서 배포 중인 가상화 프로그램입니다. 특수기능의 확장팩을 제외하면 무료로 사용 가능한 오픈 소프트웨어이며 가상화된 이미지(iso) 파일을 통해 가상 서버를 작동할 수 있습

hobbylists.tistory.com

 

 

22년 12월 3주 일상.

벌써 12월 3주라니 추워지기만 하고 눈이 안오니 아쉽다 펑펑 와서 크리스마스를 즐기고 싶은데 #경성포차 ...

blog.naver.com

 

 

 

 

 

300x250

댓글