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

iptables 문법 사용법과 예제 총 정리

by 우동이 2023. 2. 3.
300x250

작업환경

  • 가상머신 : Virtual Box 7
  • 방화벽(Iptables) : Cent OS 7
  • 사무용 PC(Office PC) : Fedora Workstation 35
  • DMZ Zone(WebServer) : Fedora Server

 

 


>>  Iptables 방화벽 실습을 위한 구조도

인프라는 가상머신(Virtual Box)을 통해 구축됨

각 OS의 네트워크 설정은 해당 글을 참조 >> 가상 보안 인프라 구축

 

인프라 구조도

 


>>  방화벽의 주요 기능

  • 접근제어
    • 방화벽의 고유(기본) 기능
    • 패킷 필터링 규칙에 따라 패킷 분석 후 허용여부 결정
      • ip주소
      • 프로토콜
      • 포트번호
      • 연결상태
      • 페이로드
    • 응용레벨에서 인증을 이용한 접근통제
  • 인증
    • 메세지 인증
      • 전송되는 message의 신뢰성 보증
      • gateway to gateway 형태의 vpn service를 제공
    • 사용자 인증
      • otp
    • 클라이언트 인증
  • 로깅 및 검사
    • 접속 정보와 네트워크 사용(공격포함)에 따른 유용한 통계정보들을 제공
  • 암호화
    • vpn 기능 제공
      • 트래픽 암호화
      • 사용자 인증 및 무결성 보장
      • IPSec SSl/TLS
      • IDS - 침입탐지시스템
      • 터널링, 암호화
    • vpn 구조
      • Gateway : Gateway
      • Gateway : Host
      • Host : Host
  • NAT - 방화벽에서 하지 않으면 라우터에서 시행(l3스위치 → 라우팅만 수행)
    • 주소변환(접근통제체계) -domain name → ipaddress //loopup, resolve
      • 공인 → ← 사설 ip 주소 변환
    • 보안측면
      • 내부 네트워크 은닉화
    • 효율적 측면
      • 서브넷팅
      • ip주소 자원은 제한적이기에 효율적 사용 필수
  • 감사추적(Audit)
    • 로그정보 관리
    • 로그정보 재활용
      • 보안정책 재수립
      • 추적 및 통계
    • 알람기능

 


>>  방화벽 유형

 

  • Packet Filtering
    • 규칙테이블을 생성 이후 패킷 헤더를 분석하여 판단하는 가장 기초적인 방화벽 구조
    • 다른 방식에 비해 처리속도가 빠르지만 다양한 취약점이 존재
  • Stateful Inspection
    • 상태기반감시 방화벽
    • 패킷필터 +a 기능과 전송계층에 대한 심층 분석(Deep Inspection)
  • Application-proxy Gateway
    • Packet Filtering 방화벽의 상위 버전
  • Circuit-Level gateway
    • 악성코드 검사를 수행하지만 패킷 자체를 검사하지는 않는다.
    • TCP/IP 외 다른 프로토콜의 세션을 검사
  • Hybrid
    • 현재 사용 중인 상용 방화벽의 대부분이 hybrid 모델
    • Packet Filtering + Application Gateway 기능이 합쳐짐

 

 

Iptables 방화벽은 패킷필터링, 상태기반, 애플리케이션 계층 필터링 세 가지의 기능을 가지고 있으며

상용 방화벽에서 제공하는 대부분의 기능을 제공합니다.

 

현재는 Iptables의 상위호환격인 NetFilter 방화벽이 리눅스에서 새로이 제공되고 있습니다.

 


>>  Iptables 구성

 

iptables 구조도

 

Filter Rule(Chain)

 

  • INPUT - 패킷이 서버로 들어오는 경우
    • 방화벽으로 타고 오는 request 패킷 설정(방화벽 타깃)
    • 그러므로 request 패킷은 input 체인 설정이 되어야 함
    • 로컬 소켓이 목적지인 패킷

 

  • OUTPUT - 서버에서 패킷이 외부로 나가는 경우
    • 방화벽에서 타고 나가는 패킷
    • 방화벽 자체에서 생성돼서 밖으로 타고 나가는 패킷

 

  • FORWARD - 패킷이 서버를 지나가는 경우(INPUT&OUTPUT)
    • 들어오고 나가는 동시의 패킷 포함 → 방화벽을 거치거나 통과하는 패킷
    • request&reply packet forwarding
    • input chain과 output chain에 각각 룰 하나씩 설정
    • 서버 - forwarding 기본 정책
    • 즉 request 패킷이 방화벽으로 들어올 때 input인지 forward chain인지 알 수 없기 때문에 패킷의 destination을 확인해야 chain의 구분이 가능
    • 양쪽 패킷(input, output)의 방향 제어에 대한 명시가 중요
    • 제대로 된 명시(방향제어)가 되어있지 않을 경우 에러나 제대로 된 정책 설정이 안 될 경우가 존재

 

NAT Rule(Chain)

 

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

 


>>  Iptables 옵션 

정책 설정 기본 - ACCEPT(허용), DROP(차단)

 

기초적인 문법의 형태

iptables 명령어 체인 규칙(프로토콜:-p,포트:—dport&—sport,인터페이스:-i&-o ,ip주소:-s&-d ) -j 타겟

 

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) 패킷 상태 제어

 

iptables 상태추적 및 확장옵션

  • LOG : 로그를 기록하는 옵션
  • --log-prefix : 지정한 메시지를 로그에 남김
  • -m : module, 모듈 사용 옵션
  • conntrack : 세션 감시 모듈
    • --ctstate (NEW, ESTABLISHED, RELATED, INVALID, UNTRACKED) 네 가지 상태를 추적함
      • NEW : 이전에 없던 패킷의 새로운 첫 연결 요청이 들어오는 패킷
      • ESTABLISHED : NEW상태를 거친 이후의 패킷 / 새로운 연결 요청에 관한 그 후의 패킷들이 오고 가는 상태
      • RELATED : 새로운 연결 요청이지만, 기존의 연결과 관련된 패킷
      • INVALID : 이전 상태 중 어떤 것도 적용되지 않는 패킷
  • limit : 시간당 패킷의 흐름(개수) 제한
  • string : 문자열 필터링
  • --algo : algorithm, 사용할 알고리즘을 선정합니다.

 


>>  예제 1 - 방화벽의 웹서버에 접속하지 못하도록 제한

정책 설정 기본 - ACCEPT(허용), DROP(차단)

HTTP, HTTPS - 80,443

기본정책 허용 상태

iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp --dport 443 -j DROP
iptables -A OUTPUT -p tcp --sport 80 -j DROP
iptables -A OUTPUT -p tcp --sport 443 -j DROP

 


 

>>  예제 2 - 방화벽에서 SSH 사용 금지

ssh : 22

기본정책 허용 상태

iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -A OUTPUT -p tcp --sport 22 -j DROP

 


>>  예제 3 - Office PC -> 방화벽 SSH 연결 허용

INPUT&OUTPUT 체인 설정

기본 정책 차단상태

iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp --sport 22 -j ACCEPT

 


>>  예제 4 - DMZ -> Office PC로 SSH 접속 허용

기본정책 차단상태

코드는 맞는데 SSH가 작동하지 않는다면 -> systemctl restart sshd

iptables -A FORWARD -p tcp -i eth1 -o eth2 --dport 22 -j ACCEPT
iptables -A FORWARD -p tcp -i eth2 -o eth1 --sport 22 -j ACCEPT

 


>>  예제 5 - 방화벽 관리자(특정 IP)에서만 방화벽 SSH 연결 허용

기본정책 차단상태

보안적인 측면에서는 정책 차단의 조건이 더 세부적일수록 높게 평가됨

 

iptables -A INPUT -i eth1 -s 192.168.100.200 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth1 -d 192.168.100.200 -p tcp --sport 22 -j ACCEPT

 


>>  예제 6 - 외부 영역이 아닌 내부 네트워크에서 방화벽 SSH 연결 허용

기본정책 차단상태

부정연산자(!) 사용

eth0가 아닌 곳에서 전부 허용

 

iptables -A INPUT ! -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT ! -o eth0 -p tcp --sport 22 -j ACCEPT

>>  예제 7 - DMZ의 웹서버 접속 허용

기본정책 차단상태

내부 외부에 있는 모든 PC가 접속이 가능케 하되 특정 IP(1.1.1.1)에서의 접속은 차단

 

iptables -A FORWARD -p tcp --sport 80 -i eth2 ! -d 1.1.1.1 -s 192.168.200.200 -j ACCEPT
iptables -A FORWARD -p tcp --sport 443 -i eth2 ! -d 1.1.1.1 -s 192.168.200.200 -j ACCEPT
iptables -A FORWARD -p tcp --dport 80 -o eth2 ! -s 1.1.1.1 -d 192.168.200.200 -j ACCEPT
iptables -A FORWARD -p tcp --dport 443 -o eth2 ! -s 1.1.1.1 -d 192.168.200.200 -j ACCEPT

 

 


>>  예제 8 - 방화벽 관리자만 방화벽 SSH 연결을 허용하고 접속 내역을 기록(LOG)

기본정책 차단상태

LOG 옵션을 통해 로그 기록

 

iptables -A INPUT -p tcp --dport 22 -i eth1 -s 192.168.100.200 -j LOG

iptables -A INPUT -p tcp --dport 22 -i eth1 -s 192.168.100.200 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -o eth1 -d 192.168.100.200 -j ACCEPT

 


>>  예제 9 - 방화벽 관리자만 방화벽으로의 SSH 연결을 허용하고 이외 PC 연결은 차단

차단 내역을 로그로 기록하고 log-prefix를 남길 것

log-prefix : TEST LOG

기본정책 차단상태

 

iptables -A INPUT -p tcp --dport 22 -i eth1 -s 192.168.100.200 -j LOG --log-prefix="TEST LOG"

iptables -A INPUT -p tcp --dport 22 -i eth1 -s 192.168.100.200 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -o eth1 -d 192.168.100.200 -j ACCEPT

 

 


>>  예제 10 - 방화벽의 SSH 연결을 허용, 방화벽 관리자는 telnet으로도 방화벽에 접속 허용

다만 telnet 접속 시 로그를 기록

기본정책 차단 상태

 

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

iptables -A INPUT -p tcp --dport 23 -i eth1 -s 192.168.100.200 -j LOG --log-prefix="[KIT_LOG]"
iptables -A INPUT -p tcp --dport 23 -i eth1 -s 192.168.100.200 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 23 -o eth1 -d 192.168.100.200 -j ACCEPT

 


>>  예제 11 - 통상적으로 사용되는 상태추적 기본 정책 코드

conntrack : 세션 감시 모듈

 

iptables -A INPUT -m conntrack --ctstate INVALID -j LOG // 로그남기기
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP //비정상 패킷 차단
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT // 동일, 근접 패킷 허용

iptables -A OUTPUT -m conntrack --ctstate INVALID -j LOG
iptables -A OUTPUT -m conntrack --ctstate INVALID -j DROP
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -m conntrack --ctstate INVALID -j LOG
iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

 


>>  예제 12 - 상태추적 기본 + 유효하지 않은 패킷 차단과 로그 기록

conntrack : 세션 감시 모듈

기본 정책 차단상태

 

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -m conntrack --ctstate INVALID -j DROP 
iptables -I INPUT 1 -m conntrack --ctstate INVALID -j LOG --log-prefix="XXXXXXXXXX"

>>  예제 13 - 초당 5개까지 icmp 패킷을 허용 6개 이상의 패킷은 차단 

limit을 통해 시간을 통한 제어가 가능

hping을 통해 결괏값 확인

iptables -A ooo -m limit --limit 값(패킷수/시간단위) -j ACCEPT
iptables -A ooo -j DROP
-시간단위 : h,m,s
iptables -A INPUT -p icmp -m limit --limit 5/s -j DROP
iptables -A INPUT -p icmp -j LOG --log-prefix "TOOMANYPACKET"
iptables -A INPUT -p icmp -j DROP

 


>>  예제 14 - 7777번 서버데몬과 통신 중 메시지 내용에 hacking 내용 차단 후 기록 

string을 통해 문자열 제어 가능

기본정책 차단상태

nc로 서버 접속 후 echo로 메세지 전달 시 결괏값 확인 가능

 

iptables -A ooo -m string --string "문자열" --algo 알고리즘명 -j DROP
iptables -A ooo -m string --hex-string "hex값" --algo 알고리즘명 -j DROP
-알고리즘 : bm, kmp
iptables -A INPUT -p tcp --dport 7777 -m string --string "hacking" --algo bm -j LOG --log-prefix "DROP_STRING"
iptables -A INPUT -p tcp --dport 7777 -m string --string "hacking" --algo bm -j DROP 
iptables -A INPUT -p tcp --dport 7777 -j ACCEPT

 


>>  예제 15 - 내부 네트워크나 방화벽에서 시작된 세션은 상태유지형으로 추적

외부 IP 주소로 포워딩되는 내부 네트워크로부터의 스푸핑 차단

 

iptables -A INPUT -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

 


 

 

 

 

 


iptables SSH 설정법

 

iptables TCP, ICMP 제어법

 

방화벽 활용을 위한 가상 인프라 구축 Iptables 활용

 

Iptables SSH 설정 심화 예시

 

iptables 로그 기초 설정

 

iptables 로그 prefix

 

iptables 상태추적과 확장적용

 

 

iptables 드디어 끝났다..! 

정말 낡디 낡은 방화벽 하나 인프라로 구축하는데도 수업 때 안 듣고 혼자 하려니

아주 죽을 맛이었는데.. 그래도 뭔가 나름 하나 한 거 같아서 뿌듯하긴 하네

앞으로는 방화벽 만지면서 모의해킹까지 병행해 봐야겠음

300x250

댓글