본문 바로가기

Cloud/Linux

IPTABLES

  • service iptables start

iptables의 구문은 여러 부분으로 나뉘어지며 중요한 부분은 chain이다. chain은 패킷이 조작될 상태를 지정하며 사용법은 다음과 같다.

  • iptables -A chain -j target

-A 옵션은 기존 규칙에 또 다른 규칙을 추가하며, chain은 규칙에 사용될 chain의 이름이다. iptables에 내장된 3가지 chain은 [INPUT, OUTPUT, FORWARD]이다. 이 3가지 chain은 영구적이며 삭제가 불가능하다. -j target 옵션은 iptables에서 이 특정 규칙을 jump하도록 지시한다. jump는 [ACCEPT, DROP, REGECT]가 있다.

CHAIN

  • INPUT : 호스트 컴퓨터를 향한 모든 패킷
  • OUTPUT : 호스트 컴퓨터에서 발생하는 모든 패킷
  • FORWARD : 호스트 컴퓨터가 목적지가 아닌 모든 패킷, 라우터로 사용되는 호스트 컴퓨터를 통과하는 패킷

새로운 chain은 -N 옵션을 사용하여 생성 가능하다.

TARGET

  • ACCEPT : 패킷을 받음
  • DROP : 패킷을 버림
  • REJECT : 패킷을 버리고 적절한 응답 패킷을 전송
  • LOG : 패킷을 Syslog에 기록
  • RETURN : 호출 체인 내에서 패킷 처리를 계속

MATCH

  • —source (-s) : 출발지 IP 주소나 네트워크와의 매칭
  • —destination (-d) : 목적지 IP 주소나 네트워크와의 매칭
  • —protocol (-p) : 특정 프로토콜과의 매칭
  • —in-interface (-i) : 입력 인터페이스
  • —out-interface (-o) : 출력 인터페이스
  • —state : 연결 상태와의 매칭
  • —string : 애플리케이션 계층 데이터 바이트 순서와의 매칭
  • —comment : 커널 메모리 내의 규칙과 연계되는 최대 256 바이트 주석
  • —syn (-y) : syn 패킷을 허용하지 않음
  • —fragment (-f) : 두번째 이후의 조각에 대해서 규칙 명시
  • —table (-t) : 처리 될 테이블
  • —jump (-j) : 규칙에 맞는 패킷을 어떻게 처리해야하는지 명시
  • —match (-m) : 특정 모듈과의 매치

1. 기본 방화벽 정책

  • iptables -P INPUT DROP
  • iptables -P OUTPUT DROP

모든 패킷을 DROP 하며 상황 별로 특정 패킷을 허용하는 정책, 위의 규칙은 네트워크 게이트웨이에서 들어오고 나가는 모든 패킷을 막는 규칙이다.

  • iptables -P FORWARD DROP

위의 규칙은 방화벽에서 라우팅되는 네트워크 트래픽을 거부하여 내부 클라이언트가 의도치않게 노출되는 것을 방지해준다.

  • /sbin/service iptables save

규칙을 저장하는 명령어 (/etc/sysconfig/iptables 아래에 파일로 저장)

2. 일반 필터링

  • iptables -A INPUT -p tcp -m tcp —sport 80 -j ACCEPT
  • iptables -A OUTPUT -p tcp -m tcp —dport 80 -j ACCEPT

80 포트에 대한 액세스를 허용하는 규칙이다. iptables 규칙을 만들 때에는 순서가 매우 중요하기 때문에 이를 주의하여야한다. 규칙에 대해 순서를 지정하려면 아래 명령어를 사용한다.

  • iptables -I INPUT 1 -i lo -p all -j ACCEPT

위 명령어는 INPUT chain의 첫번째 규칙으로 삽입되며 로컬 lo 장치 트래픽을 허용한다. 일반적인 필터링은 제너럴한 서비스에는 액세스를 허용하지만 방화벽으로 부터 보호된 시스템은 접근할 수 없다. 이를 제어하기 위해 NAT를 사용한다.

3. FORWARD와 NAT 규칙

공공 IP는 제한되어 있기 때문에 대부분 사설 IP 주소를 사용한다.

  • iptables -A FORWARD -i eth1 -j ACCEPT
  • iptables -A FORWARD -o eth1 -j ACCEPT

위 규칙은 방화벽/게이트웨이 뒤에 위치한 시스템이 내부 네트워크에 접근할 수 있도록 설정한다. 게이트웨이는 한 LAN 네트워크로부터 들어오는 모든 패킷을 eth1 장치를 통해 대상 네트워크로 라우팅한다.

4. IPTABLES 출력

  • iptables -nL
  • iptables -nL —line-numbers