목차 열기

티스토리 뷰

Ubuntu

[IPTables] IPTables는 무엇일까?

RuungJi · 2021. 3. 14. 16:07
728x90
반응형

IPTables?

이건 무엇이고 어디에 쓰일까?

IPTables는 Netfilter 패킷 필터링 기능의 리눅스 커널 방화벽이다.

여러 환경에서의 사용

- Android, Linux Deploy

Linux Deploy같은 Andorid 위의 리눅스(chroot환경)에서는 iptables을 사용할 수 없다. chroot기반이어서 iptables 혹은 iptables-persistent가 작동하지 않는다.

- Ubuntu

우분투는 기본적으로 ufw라는 편한 방화벽을 사용하는데, iptables에 규칙을 대신 만들어주는 역할을 하므로, 세밀한 설정이 가능한 iptables를 직접 사용할 것이다.

IPTables의 구조와 동작 방식

iptables는 체인이라는 규칙을 연결한 테이블 구조를 가진다. 받아들이는 패킷들 하나하나에 대응하는 테이블을 체인에 따라 처리한다.

테이블 안의 체인에서 규칙은 위에서부터 순서대로 참조하며, 일치하면 이후의 규칙은 더 이상 참조하지 않고 패킷을 처리한다.

Ubuntu 기준으로 /etc/iptables 디렉토리 안에 rules.v4와 rules.v6 파일로 나뉘어져 있다.

1. 테이블 (Table)

체인(규칙)을 포함한 전체 그룹이다. 기본 테이블인 filter를 포함하여 nat, mangle, raw가 있다.

iptables는 Filter, Nat, Mangle, Raw 4개의 테이블을 가진다.

  • Filter : 기본 테이블, 패킷 필터링
  • Nat : Network Address Translation, IP 주소 변환
  • Mangle : 패킷 데이터를 변경하는 규칙 혹은 성능 향상을 위한 TOS(Type of Service)
  • Raw : 넷필터의 연결 추적 하위 시스템과 독립 동작

2. 체인 (Chain)

일치하는 패킷의 규칙 연결 단위이다. 내장 체인은 INPUT, OUTPUT, FORWARD가 있으며 사용자 정의 체인을 만들 수 있다.

사용자 정의 체인의 예로는 log 체인이 있는데, INPUT에 해당하지 않는 패킷을 log로 기록하는 커스텀 체인이다.

내장 체인 종류

  • INPUT : 시스템 외부 -> 시스템 내부
  • OUTPUT : 시스템 내부 -> 시스템 외부
  • FORWARD : 시스템을 경유하는 패킷, 내부망

3. 룰 (Rule)

커맨드, 파라미터, 타깃으로 구성된 규칙이다.

ex) -A INPUT -i lo -j ACCEPT

-A INPUT은 커맨드로, Chain을 조작한다.
-i lo는 파라미터로 localhost 연결을 뜻한다.
-j ACCEPT는 일치한 Target의 패킷 통과를 처리한다는 뜻이다.

4. 타깃 (Target)

위의 룰에서 설명한 것처럼 Rule에 일치한 타깃에 대한 처리를 뜻한다.

  • ACCEPT : 패킷 허용
  • DROP : 패킷 버림 (통지하지 않고 폐기)
  • REJECT : 패킷 거절 (통지하고 거부)

IPTables의 사용법

Usage

iptables [Commands] chain [rule-specification] [options]

[Commands]

Commands:
  --append  -A chain                새로운 규칙 추가
  --check   -C chain                패킷 테스트
  --delete  -D chain                규칙 삭제
  ...
  --list    -L [chain [rulenum]]    규칙 리스트 출력
  ...
  --new     -N chain                사용자 정의 체인 추가사용자 정의 체인 추가
  ...

# 더 자세한 커맨드는 iptables -h 로 알아보자.

[options]

Options:
    --ipv4            -4    Nothing (line is ignored by ip6tables-restore)
    --protocol        -p    proto    protocol: by number or name, eg. `tcp'
    --source          -s    address[/mask][...]
                                source specification
    --destination     -d    address[/mask][...]
                                destination specification
    --in-interface    -i    input name[+]
                                network interface name ([+] for wildcard)
    --jump            -j    target
                                target for rule (may load target extension)
    ...
    --match           -m    match
                                extended match (may load extension)
    ...
    --line-numbers          print line numbers when listing

# 더 자세한 커맨드는 iptables -h 로 알아보자.

IP 주소

-s {출발지 IP 주소} \[/비트 마스크]
-d {도착지 IP 주소} \[/비트 마스크]

PORT

--sport {출발지 포트}
--dport {도착지 포트}
  포트에는 번호 혹은 서비스명(smb, ssh)을 사용한다.

I/F(인터페이스명)

LAN의 인터페이스(eth0, ens32 등)와 루프백(lo), 지정하지 않으면 전부이다.
  -i: 패킷이 들어오는 네트워크 인터페이스
  -o: 패킷이 나가는 네트워크 인터페이스

프로토콜

-p {프로토콜}

프로토콜:
  tcp or 6
  udp or 17
  icmp or 1
  all or 0
  (null)

icmp:
  --icmp-type {타입}
    echo-request: 에코 요청(ping)
    echo-reply: 에코 응답
    destination-unreachable: 목적지 도착 불가
    source-quench: 발신원 송신 제어 요청
    redirect: 리다이렉트

연결 추적

-m state --state {상태}

  NEW           : 새로운 연결 요청 패킷
  ESTABLISHED   : 이미 형성된 접속의 일부인 패킷
  RELATED       : 기존 연결에 속하지만 새로운 연결을 요청하는 패킷
                  (TCP, UDP, ICMP 포함)

타깃 (처리 조작)

REDIRECT                 : 규칙에 일치하는 패킷의 도착지 포트 변경

LOG: 로그를 남긴다.
  --log-level {level}    : 레벨에 해당하는 로그를 남긴다.
  --log-prefix {prefix}  : 프리픽스를 로그 메세지 앞에 붙인다. 29문자까지
  --log-tcp-sequence     : TCP 시퀀스 번호를 기록한다.
  --log-tcp-options      : TCP 패킷 헤더의 옵션을 로그에 기록한다.
  --log-ip-options       : IP 패킷 헤더의 옵션을 기록한다.
728x90
반응형
댓글
글 보관함
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday