별의 공부 블로그 🧑🏻‍💻
728x90
728x170

iptables 

  • 패킷 필터링(Packet Filtering) 도구
  • 방화벽 구성이나 NAT(Network Translation Address)에 사용된다.

 

(참고) iptables의 구조

더보기
  • 커널 2.2 에서 사용되던 ipchains 사슬(Chain) 구조를 그대로 승계함.
  • 4계층 구조의 테이블(Table)을 만들어 사용하여 이름을 iptables라 명명하였음.
  • ipchains와 거의 유사하게 사슬에 정책을 설정하여 사용함.
    • 하지만, 기능과 역할을 강화하기 위해 테이블로 확장하여 테이블 별로 각각의 사슬을 지정하고 해당 사슬에 정책을 설정하도록 되어 있음.
  • 5개의 테이블이 있음.
    • FILTER
      • iptables의 기본 테이블
      • 패킷 필터링을 담당함.
      • ipchains 이전 프로그램들은 FILTER 테이블만 가지고 사용되었다고 보면 됨.
    • NAT
      • Network Address Translation 의 약자
      • IP 주소를 변환시키는 역할을 수행함.
      • ipchains FORWARD 사슬 역할을 확장한 것
      • 다음의 경우에 사용됨.
        • 1개의 공인 IP 주소로 여러 대 컴퓨터를 사용하고자 할 때
        • 1개의 공인 IP 주소로 여러 대 서버를 운영하고자 할 때
    • MANGLE
      • 패킷 데이터를 변경하는 특수 규칙을 적용하는 테이블
      • 성능 향상을 위해 TOS(Type of Service)를 설정함.
    • RAW
      • 넷필터의 연결 추적 하위 시스템과 독립적으로 동작해야 하는 규칙을 설정하는 테이블
    • SECURITY
      • 리눅스 보안 모듈인 SELinux 에 의해 사용되는 MAC(Mandatory Access Control) 네트워크 관련 규칙이 적용됨.
      • SECMARK  CONNSECMARK에 의해 활성화된 규칙이 등록됨.
      • 현재 이 테이블은 FILTER 테이블 다음에 호출됨.
        • DAC(Discretionary Access Control) 규칙이MAC 규칙보다 먼저 적용될 수 있음.
  • 각 테이블은 고유한 사슬 집합 을 가지고 있음.
  • 사용자가 INPUT_ESTABLISHED DMZ_NETWORK와 같은 공통 태그와 관련된 규칙 집합을 만들기 위해 사용자 정의 사슬을 생성할 수 있음.

 

(참고) iptables의 테이블과 사슬

더보기
  • 커널 2.6.34 버전부터 nat 테이블에 INPUT 사슬이 추가됨.
  • 패킷 필터링 및 방화벽 구성
    • 기본 테이블인 FILTER 3개의 사슬에 정책을 설정하면 됨.
  • 다수의 서버 관리를 할 때
    • filter 테이블 및 nat 테이블을 연동해서 사용함.
    • NAT 테이블의 PREROUTING POSTROUTING 사슬
      • 패킷 헤더를 수정하기 위해 사용함.
        • 커널 내부에서 IP 라우팅 계산 수행 전과 후

 

FILTER 테이블의 사슬 및 기능

  • INPUT
    • 패킷 필터링 및 방화벽 관련 정책들을 설정하는 사슬
    • 실제적인 접근 통제를 담당하는 역할을 수행함.
    • 커널 내부에서 라우팅 계산을 마친 후, 로컬 리눅스 시스템이 목적지인 패킷(로컬 소켓이 목적지인 패킷)에 적용됨.
  • OUTPUT
    • 다른 시스템으로의 접근을 차단할 때 사용하는 사슬
    • 리눅스 시스템 자체가 생성하는 패킷을 제어하는 사슬
  • FORWARD
    • 리눅스 시스템을 통과하는 패킷을 관리하는 사슬
    • 한 네트워크를 다른 네트워크와 연결하기 위해 iptables 방화벽을 사용
      • 두 네트워크 간의 패킷이 방화벽을 통과하는 경우에 사용됨.
    • 사설 IP를 사용하는 시스템의 접근 제어 정책을 설정할 때 사용됨.
      • NAT 테이블 기반으로, 하나의 공인 IP를 여러 대의 사설 IP를 사용하는 시스템들과 공유해서 사용할 경우

 

 

사용법

# iptables [-t table] action chain match [-j target]
  • 테이블(Table)의 기본 설정 : Filter
  • 다른 테이블을 지정할 때 -t 옵션을 사용함.
  • action
    • 사슬지정, 설정, 제어할 때 사용함.
    • 주로 -N, -A와 같은 대문자 옵션을 사용함.
  • chain
    • 사슬(Chain)을 명시함.
      • 예) INPUT, OUTPUT
    • 대소문자를 구분함.
  • 마지막으로 실질적인 룰에 해당하는 매치(match)  타겟(target)을 지정하면 됨.
    • 매치 -d, -p와 같은 소문자 옵션을 사용하여 설정함.
    • 타겟 -j(--jump) 옵션을 사용하여 설정함.

 

주요 액션(action)

액션 설명
-N - 새로운(New) 사용자 정의 사슬을 만듦.
- (
--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 - 정책 앞에 번호를 붙여 출력
- 삭제삽입할 때 유용함.

 

주요 타겟(target) (-j, --jump)

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

 

사용 예

예 1
  • 기본 테이블인 Filter의 모든 사슬에 설정된 정책 정보 출력
 
# iptables -L

 

예 2
  • 기본 테이블인 Filter의 모든 사슬에 설정된 정책 정보(포트, 프로토콜 등)를 숫자값으로 출력
# iptables -nL

 

예 3
  • 기본 테이블인 Filter의 모든 사슬에 설정된 정책 정보를 패킷, 바이트 등을 추가하여 자세히 출력
# iptables -vL

 

예 4
  • 기본 테이블인 Filter의 INPUT 사슬에 설정된 정책 정보 출력
# iptables -L INPUT

 

예 5
  • NAT 테이블의 모든 사슬에 설정된 정책 정보 출력
# iptables -t nat -L

 

예 6
  • 기본 테이블인 Filter의 모든 사슬에 설정된 정책을 모두 제거
# iptables -F

 

예 7
  • 기본 테이블인 Filter의 INPUT 사슬에 설정된 정책을 모두 제거
# iptables -F INPUT

 

예 8
  • INPUT 사슬에 발신지가 192.168.12.22 이고, 도착지가 localhost인 패킷을 거부(DROP) 시키는 정책을 추가
# iptables -A INPUT -s 192.168.12.22 -d localhost -j DROP

 

예 9
  • INPUT 사슬에 발신지가 192.168.1.0 인 네트워크 대역에 속한 호스트들을 허가하는 정책을 추가
# iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT

 

예 10
  • INPUT 사슬에 발신지가 192.168.5.13 으로부터 들어오는 ICMP 패킷을 거부
# iptables -A INPUT -s 192.168.5.13 -p icmp -j DROP

 

예 11
  • INPUT 사슬에 설정한 관련 정책 삭제
# iptables -D INPUT -s 192.168.5.13 -p icmp -j DROP

 

예 12
  • 기본 테이블인 Filter의 INPUT 사슬에 설정된 정책 정보에 번호를 붙여서 출력
# iptables -L INPUT --line-number

 

예 13
  • INPUT 사슬에 설정한 두 번째 정책 삭제
# iptables -D INPUT 2

 

예 14
  •  www.starrykss.org의 웹 사이트의 접속 차단
# iptables -A OUTPUT -p tcp -d www.starrykss.org --dport 80 -o eth0 -j DROP

 

예 15
  • 공인 IP 주소를 사용하여 SNAT를 설정했을 경우에 사설 IP 대역 사용자들의 www.starrykss.org 웹사이트 접속을 차단함.
# iptables -A FORWARD -p tcp -d www.starrykss.org --dport 80 -o eth0 -j DROP

 

(참고) iptables 를 확장하여 사용하기

더보기
  • 리눅스 커널 2.2  ipchains는 프로토콜 관련 정책 설정이 단순하였음.
  • iptables -p 옵션 뒤에 프로토콜을 지정한 뒤, 추가적으로 사용할 수 있는 옵션이 제공됨.

(1) TCP 의 확장

  • 먼저 -p tcp로 프로토콜을 지정하고, 추가로 지정할 옵션을 사용함.
  • 관련 정보 확인 : iptables -p tcp -h

주요 옵션

  • --sport
    • 발신지에서의 하나의 포트 또는 포트 범위를 지정
    • /etc/services에 기록된 포트 이름을 지정하거나, 포트 번호로 지정할 수 있음.
    • 범위는 :를 사용하여 표기
    • (--source-port)
  • --dport
    • 도착지의 포트를 지정하는 것
    • 설정 방법 : --sport 옵션과 동일
    • (--destination-port)
  • --tcp-flags
    • TCP flag 를 지정하는 옵션
    • SYN, ACK, FIN, RST, URG, PSH, ALL, NONE를 지정할 수 있음.
  • --syn
    • 다음과 같음.
      • --tcp-flags SYN
      • RST
      • ACK
      • FIN SYN

 

(2) UDP 의 확장

  • 먼저 -p udp로 프로토콜을 지정하고, 추가로 지정할 옵션을 사용함.
  • TCP 의 확장 옵션 중, --sport  --dport를 지원함.
  • 관련 정보 확인 : iptables -p udp -h

 

(3) ICMP 의 확장

  • 먼저 -p icmp로 프로토콜을 지정하고, --icmp-type을 추가 옵션으로 지정함.
  • 많이 사용하는 ICMP 타입값
    • echo-request(8)
    • echo-reply(0)
    • destination-unreachable(3)
  • 관련 정보 확인 : iptables -p icmp -h

주요 옵션

  • --icmp-type : 숫자값 형태의 ICMP 타입값 또는 코드로 지정

 

 

(참고) iptables를 이용한 설정 예

더보기

에시 1

  • 들어오는 모든 패킷을 거부하고, 192.168.12.22로부터 들어오는 패킷에 대해서만 허가
# iptables -P INPUT DROP
# iptables -A INPUT -s 192.168.12.22 -j ACCEPT
  • -P 옵션을 사용해서 INPUT 사슬에 DROP을 지정하면, 기본 접근 정책이 거부로 변경됨.
    • 그 후에 허가하려는 호스트를 지정하면 됨.
  • -P 옵션을 이용하여 INPUT 사슬의 기본 정책을 DROP으로 설정할 경우
    • TCP의 3-Way Handshaking 작업을 수행할 수 없어서 해당 방화벽 시스템에서 외부 관련 서비스 이용 시 차단되므로 주의해야 함.

 

예시 2

  • 들어오는 모든 패킷을 허가하고, 192.168.1.18로 부터 들어오는 모든 패킷에 대해 거부
# iptables -P INPUT ACCEPT
# iptables -A INPUT -s 192.168.1.18 -j DROP

 

예시 3

  • 192.168.4.40에서 들어오는 패킷 중, tcp 프로토콜 관련 패키지만 거부
# iptables -A INPUT -s 192.168.4.40 -p tcp -j DROP
  • TCP 기반 서비스인 telnet, ssh 등은 이용할 수 없음.
  • 그러나 ping 같은 ICMP 프로토콜을 사용하는 패킷은 허가됨.

 

예시 4

  • 포트 번호가 20번부터 30번까지를 목적지로 들어오는 패킷들은 거부하고, ssh 포트가 22번인 포트만 허용
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -p tcp --dport 20:30 -j DROP

 

(참고) iptables 정채 설정 시 주의점

더보기
  • iptables에서 중복된 설정이 있을 경우
    • 먼저 등록된 것의 설정이 반영됨.
# iptables -A INPUT -p tcp --dport 20:30 -j DROP
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  • 위의 순서대로 설정했을 경우, 22번 포트의 접속이 거부되므로 순서 설정에 유의해야 함.

 

 

iptables-save

  • iptables 로 설정된 정책을 표준 출력(stdout)에 출력해주는 명령
  • 출력 전환 리다이렉션 기호인 >와 조합해서 현재 설정된 정책을 파일로 저장할 수 있다.

 

사용법

# iptables-save [option]

 

주요 옵션

옵션 설명
-t - 특정 테이블에 설정된 정책만 출력함.
- (
--table)
-c - 출력되는 정책 앞부분에 패킷수 바이트(Byte) 를 표시해줌.
- (
--counters)

 

사용 예

예 1
  • 현재 설정된 정책을 화면에 출력함.
# iptables-save

 

예 2
  • NAT 테이블에 설정된 정책만 출력함.
# iptables-save -t nat

 

예 3
  • 설정된 정책의 앞부분에 관련된 패킷수와 바이트(Byte)를 함께 출력함.
# iptables-save -c

 

예 4
  • 현재 설정된 정책을 firewall.sh 로 저장함.
# iptables-save > firewall.sh

 

 

iptables-restore

  • iptables 의 정책 설정을 반영하는 명령
  • 입력 전환 리다이렉션 기호인 <를 이용해서 iptables-save로 저장된 파일을 불러들일 때 사용한다.

 

사용법

# iptables-restore [option]

 

주요 옵션

옵션 설명
-c - 출력되는 정책 앞부분에 패킷수와 바이트(Byte)를 표시해줌.
- (
--counters)
-n - 현재 설정된 정책을 초기화하지 않고 추가하는 형식으로 저장함.
- (
--noflush)

 

사용 예

  • firewall.sh 에 저장된 정책을 불러들여서 반영함.
# iptables-restore < firewall.sh>

 

728x90
그리드형(광고전용)
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖