[Linux] iptables 설정/옵션/예제

SYSTEM/Linux / /
반응형

iptables


Linux 운영 체제에서 방화벽은 netfilter. 어떤 패킷이 들어오고 나갈 수 있는지 결정하는 커널 모듈입니다

iptables 는 netfilter 모듈을 사용하는 Linux OS 방화벽 입니다.

리눅스의 패킷 필터링(Packet Filtering) 도구로서 방화벽 구성이나 NAT(Network Address Translation)에 사용된다.

 

 

Action


  • -A : APPEND : 정책 추가
  • -I : INSERT : 정책 삽입
  • -D : DELETE : 정책 삭제
  • -R : REPLACE : 정책 교체
  • -F : FLUSH : 모든 정책 삭제
  • -P : POLICY : 기본 정책을 설정
  • -L : LIST : 정책 나열

 

 



Chain


  • INPUT
  • OUTPUT
  • FORWARD
  • PREROUTING
  • POSTROUTING

 

 

 

Match


 

  • -s : 출발지 매칭. 도메인, IP 주소, 넷마스크 값을 이용하여 표기(––source, ––src)
  • -d : 목적지 매칭. 도메인, IP 주소, 넷마스크 값을 이용하여 표기(––destination, ––dst)
  • -p : 프로토콜과 매칭. TCP, UDP, ICMP 와 같은 이름을 사용하고 대소문자는 구분하지 않음
  • -i : 입력 인터페이스와 매칭(––in-interface)
  • -o : 출력 인터페이스와 매칭(––out-interface)
  • -j : 매치되는 패킷을 어떻게 처리할지 지정 (--jump)

 

 

Target 

패킷 규칙이 일치할 때 취하는 동작 지정


  • ACCEPT : 패킷을 허용한다.
  • DROP : 패킷을 버린다(패킷이 전송된 적이 없던 것처럼)
  • REJECT : 패킷을 버리고 이와 동시에 적절한 응답 패킷을 전송한다.(icmp-port-unreachable)
  • LOG : 패킷을 syslog에 기록한다.
  • SNAT --to [주소] : 소스 IP를 [변환(NAT)|NAT]한다.
  • DNAT --to [주소] : 목적지 IP를 변환(NAT)한다.
  • RETURN : 호출 체인 내에서 패킷 처리를 계속한다.

 

iptables Example


  • 잦은 룰 설정, 변경등 관리적인 측면의 효율성을 위해 리눅스 스크립트 형태로 관리
  • /root/.../firewall  (chmod 755)
  • #은 주석
  • iptables-save -c >  /etc/sysconfig/iptables 현재 룰셋 저장
  • iptables-restore < /etc/sysconfig/iptables 룰셋 복구

 

CentOS, Ubuntu 등 버전업 되면서 OS 방화벽(iptables) 설정 구성을 다른 명령어를 써서 가능하나

개인적으로 스크립트로 처리하는게 가장 효율적이고 편함.

 

 

 

Linux iptables Script 일부

#!/bin/bash

# INPUT Rules
iptables -F
iptables -X

# INPUT Rules
iptables -P OUTPUT      ACCEPT
iptables -P FORWARD     ACCEPT
iptables -P INPUT       ACCEPT

# Local
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i eth0 -f -j LOG --log-prefix "ESTABLISHED"
iptables -A INPUT -p tcp -m tcp ! --tcp-flags SYN,ACK,FIN,RST SYN -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 사무실 특정 IP 대역 전체 허용
iptables -A INPUT -s x0.x81.x09.9/32 -j ACCEPT

# SSH 특정 IP만 오픈 허용                                                                                          
iptables -A INPUT -m state --state NEW -m tcp -p TCP -s 10.10x.10.x2/32 --dport 2022 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p TCP -s 10.10x.x.x/32 --dport 2022 -j ACCEPT

# HTTP 특정 IP만 오픈 허용
iptables -A INPUT -m state --state NEW -m tcp -p TCP -s 2x.1x.x5.1x/32 --dport 8008 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p TCP -s 2x.1x.x5.1x/32 --dport 8008 -j ACCEPT


# 특정 어플리케이션 9090 포트 any 오픈
iptables -A INPUT -m state --state NEW -m tcp -p TCP --dport 9090 -j ACCEPT

# grafana API 포트 허용
iptables -A INPUT -m state --state NEW -m tcp -p TCP -s 2x.1x.5x.1x/32 --dport 9000 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p TCP -s 2x.1x.5x.1x/32 --dport 8000 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p TCP -s 1.2x.x7.53/32 --dport 8086 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p TCP -s 2x.1x.5x.1x/32 --dport 3000 -j ACCEPT


# elasticsearch API 포트 허용
iptables -A INPUT -m state --state NEW -m tcp -p TCP -s 1.x.x.41/32 --dport 9200 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p TCP -s 13.204.x.x/32 --dport 8220 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p TCP -s 202.x.x.x/32 --dport 9200 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p TCP -s 202.x.x.x/32 --dport 8220 -j ACCEPT

# kibana 포트 허용
iptables -A INPUT -m state --state NEW -m tcp -p TCP -s 221.x.x.x/32 --dport 5601 -j ACCEPT

# ICMP                                                                                          
#iptables -A INPUT -p ICMP -j ACCEPT
iptables -A INPUT -p ICMP -s 10.100.101.37/32 -j ACCEPT

# DROP Rules                                                                                         
iptables -A INPUT -m state --state INVALID -j DROP                                              
iptables -A INPUT -p tcp --syn -j REJECT                                                        
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited  

# rule 저장
iptables-save -c >  /etc/sysconfig/iptables
#service iptables save

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기