리눅스 iptables ip 필터링

리눅스 커널에서 IP 패킷 필터링 프레임워크인 Netfilter와 이를 이용하기 위한 커맨드인 iptables가 있습니다.

오늘은 iptables를 이용한 IP 패킷 필터링을 해보도록 하겠습니다.

기본 원리는 IP 패킷의 헤더를 참조하여 Pass/Drop/Reject 처리를 하는 기능입니다.

 

iptables 패키지 설치 여부 확인

# rpm -qa | grep iptables

iptables는 기본적으로 패킷의 헤더를 보고 필터링을 진행합니다.

출발지IP, 목적지IP, TCP, UDP, ICMP, 포트 등을 확인해 줍니다.

 

iptables 작성 방법

iptables <옵션 예)-A> <체인> <매칭 옵션> -j <타겟>

 

iptables -L : 규칙 목록 출력

 

iptables  -F : 규칙 삭제, 뒤에 INPUT, OUTPUT 등을 지정하여 체인의 규칙 삭제

 

iptables 옵션

  • -t <테이블> : 이용할 테이블을 지정한다. 기본은 filter.
  • -A <체인> : 지정하는 체인에 규칙을 추가한다.
  • -m <모듈> : 매칭 모듈을 지정한다. 이 옵션 다음에 모듈별 옵션을 추가할 수 있다.(확장 매칭 모듈의 예 : addtype, conntrack, connlimit, iprange, mac, multiport, state)
  • -p <프로토콜> : tcp/udp/icmp/all 중 하나를 지정한다. 기본은 all.
  • -d <도착지 주소> : 도착지 주소 지정
  • -s <출발지 주소> : 출발지 주소 지정
  • --dport <포트> : 도착지 포트 지정. -p tcp 또는 -p udp와 함께 사용한다.
  • --sport <포트> : 출발지 포트 지정. -p tcp 또는 -p udp와 함께 사용한다.
  • -i <인터페이스> : 패킷이 들어오는 네트워크 인터페이스를 지정한다.
  • -o <인터페이스> : 패킷이 나가는 네트워크 인터페이스를 지정한다.
  • -j <타깃> : ACCEPT나 DROP 등의 타깃을 지정한다.

 

타깃 명령어

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

 

규칙을 생성하신 후 반드시 저장 및 재시작을 해주셔야 합니다.

# service iptables save

# service iptables stop

# service iptables start

 

iptables 규칙 생성 예시 ex)

# iptables -A INPUT -p tcp –dport 80 -j ACCEPT

들어오는 모든 tcp 80 포트의 접근을 허용

 

#iptables -A INPUT -s 192.168.1.1 -p tcp –dport 80 -j DROP

출발지 192.168.1.1로 들어오는 tcp 80 포트를 차단(목적지라면 -d 옵션)

 

# iptables -A INPUT -s 192.168.1.0/24 -j DROP

192.168.1.0 대역의 IP 차단

댓글

Designed by JB FACTORY