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

iptables 상태추적(conntrack)과 시간,문자열 제어

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

작업환경

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

 


>>  각 체인마다 상태추적을 실행하고 동일한 패킷과 관련된 패킷을 허용하라

이외 유효하지 않은 패킷은 차단하고 로그 prefix 값을 "INVALID_DATA"로 설정할 것

상태추적 기능은 기본정책의 가장 높은 우선순위를 가지고 통용적으로 사용됨

 

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="INVALID_DATA"

 

 

정책변경 후의 결괏값

 

  • INPUT, OUTPUT, FORWARD 모든 체인에서 상태추적 기능이 실행됨
  • 새로운 패킷과 연관성 있는 패킷이 허용되고 이외의 유효하지 않은 패킷은 차단되고 로그로 기록됨

 

사용된 추가 옵션

 

  • -m : module, 모듈 사용 옵션
  • conntrack : 세션 감시 모듈
    • --ctstate (NEW, ESTABLISHED, RELATED, INVALID, UNTRACKED) 네 가지 상태를 추적함
      • NEW : 이전에 없던 패킷의 새로운 첫 연결 요청이 들어오는 패킷
      • ESTABLISHED : NEW상태를 거친 이후의 패킷 / 새로운 연결 요청에 관한 그 후의 패킷들이 오고 가는 상태
      • RELATED : 새로운 연결 요청이지만, 기존의 연결과 관련된 패킷
      • INVALID : 이전 상태 중 어떤 것도 적용되지 않는 패킷
  • limit : 시간당 패킷의 흐름(갯수) 제한
  • string : 문자열 필터링

 


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

가장 높은 우선순위로 사용됨

 

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

 

 

정책변경 후의 결괏값

 

  • 각 기본정책에 해당하는 패킷의 로그가 남는다.
  • 비정상패킷이 차단된다.
  • 동일하거나 관련성 있는 패킷이 허용된다.
  • 위 세가지는 모든 기본정책에 공통적으로 설정되어 있다.

 


>>  시간 제어 필터링

원본 코드

iptables -A INPUT -m limit --limit 값(패킷수/시간단위) -j ACCEPT
iptables -A INPUT -m limit --limit 값(패킷수/시간단위) -j DROP

 

>>  시간 제어 필터링 예제

예제 13 : 초당 5개까지의 icmp 패킷은 허용하고 6번째 패킷부터는 차단하고 로그로 기록하라

 

iptables -A INPUT -p icmp -m limit --limit 5/s -j DROP
iptables -A INPUT -p icmp -j LOG --log-prefix "TOOMANY"
iptables -A INPUT -p icmp -j DROP

 

 

정책변경 후의 결괏값

 

  • 초당(second) 5개의 icmp 패킷이 허용되고 초과하는 패킷은 전부 차단되며
  • TOOMANY의 prefix로 로그로 기록된다.

 


>>  문자 제어 필터링

원본 코드

 

iptables -A INPUT -m string --string "문자열" --algo 알고리즘명 -j DROP
iptables -A INPUT -m string --hex-string "hex값" --algo 알고리즘명 -j DROP
-알고리즘 : bm, kmp

 

>>  문자 제어 필터링 예제

예제 14 : 7777번 포트로 동작하는 서버 데몬과 통신을 허용하되 메시지 중 "Iwillkillu" 내용이 포함되어 있으면 

이를 로그로 기록하고 차단하라

 

iptables -A INPUT -p tcp --dport 7777 -m string --string "Iwillkillu" --algo bm -j LOG --log-prefix "CHECKED"
iptables -A INPUT -p tcp --dport 7777 -m string --string "Iwillkillu" --algo bm -j DROP 
iptables -A INPUT -p tcp --dport 7777 -j ACCEPT

 

 

정책변경 후의 결괏값

 

  • 결괏값은 nc(넷캣)으로 확인할 수 있다.
  • 사용할 수 있는 알고리즘에는 bm, kmp 등이 있다.

 

사용된 추가 옵션

 

  • -m : module, 모듈 사용 옵션
  • --algo : algorithm, 사용할 알고리즘을 선정합니다.
  • string : 제어할 문자열을 지정하거나 hex 문자값을 제어할 수도 있습니다.

 


 

iptables 상태추적 코드

 

예제 13 - 시간 제어 필터링
예제 13 시간 제어 필터링
예제 13 - 시간 제어 필터링
예제 14 - 문자 제어 필터링
예제 14 - 문자 제어 필터링
예제 15 - 문자 제어 필터링


iptables SSH 설정법

 

iptables TCP, ICMP 제어법

 

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

 

Iptables SSH 설정 심화 예시

 

iptables 로그 기초 설정

 

iptables 로그 prefix

300x250

댓글