Ubuntu iptables

규칙 생성 및 삭제

Posted by Damin on May 11, 2020

환경

  • Ubuntu 18.04

  • XShell 6 (무료 버전)

iptables란? (간단한 설명)

  • 윈도우에는 방화벽이 있어서 외부로부터 보호한다.

  • iptables = 리눅스 방화벽이라고 생각하면 쉽다.

iptables

Ubuntu에서는 ufw를 사용하여 기본 방화벽을 설정해줄 수 있다.

하지만, 수준 높은 방화벽 구성을 위해서는 iptables를 이용해 설정해줘야 한다.

기본 명령어

  • -N (–new-chain) : 새로운 체인을 만듦
  • -L (–list) : 새로운 규칙을 출력
  • -X (–delete-chain) : 비어 있는 체인 삭제
  • -P (–policy) : 기본 정책을 변경
  • -F (–flush) : 체인의 모든 규칙을 삭제
  • -A (–append) : 새로운 규칙을 추가(맨아래에 추가됨)
  • -I (–insert) : 새로운 규칙을 삽입(맨앞쪽에 삽입됨)
  • -R (–replace) : 새로운 규칙을 교체
  • -D (–delete) : 규칙 삭제
  • -C (–check) : 패킷 테스트

제어 옵션 명령어

  • -s (–source) : 출발지 주소
  • -d (–destination) : 목적지 주소
  • –sport : 출발지 포트번호
  • –dport : 목적지 포트번호
  • -p (–protocol) : 프로토콜(tcp,udp,… etc)
  • -i (–in-interface) : 패킷이 들어오는 네트워크 인터페이스
  • -o (–out-interface) : 패킷이 나가는 네트워크 인터페이스
  • -f (–fragment) : 분절된 패킷
  • -j (–jump) 규칙에 맞는 패킷을 어떻게 처리할 것인가

활용 예제

tcp 80번 포트 열어주는 명령어

1
2
$ sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
$ sudo iptables -I OUTPUT -p tcp --sport 80 -j ACCEPT

iptables INPUT,OUTPUT 에 새로운 규칙 삽입(-I) 프로토콜(-p)은 tcp 출발,목적지(–dport,–sport) port는 80, 이 포트를(-j) ACCEPT해라.

특성 IP에 특정 포트만 열어주기

1
2
3
$ sudo iptables -I INPUT -p tcp --dport 80 -s 12.34.56.78 -j ACCEPT

$ sudo iptables -I OUTPUT -p tcp --dport 80 -d 12.34.56.78 -j ACCEPT

위와 동일하지만 출발주소(-s), 도착주소(-d) 가 추가 되었다. 주소 = 12.34.56.78

포트 리다이렉트

1
$ sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-ports 8080

기본적인 iptables는 -L 옵션으로 확인하지만, PREROUTING은 nat테이블을 지정해서 봐야 하는것 같다. 80포트를 8080포트로 리다이렉트

iptables 조회

1
$ sudo iptables -t nat -L --line-numbers

PREROUTING까지 보기 위해 -t nat 추가

규칙 지우기

1
iptables -t nat -D PREROUTING 1

PREROUTING에 있는 1번 규칙 삭제하기

Reference

Ubuntu iptables로 방화벽 port 설정하기

iptables 번호로 정책 삭제하기