본문 바로가기
Tech/Linux

iptables를 이용한 방화벽 셋팅 #1

by 타이호 2018. 7. 7.
반응형

이전에는 iptables와 netfilter의 원리 및 구성을 살펴보았고, 이번에는 iptables를 사용해서 방화벽 규칙을 적용해 본다.


1. 테스트 환경

  • Ubuntu 18.04

  • 4 vCore and 8G Ram


2. Iptables

최초로 설치 됐을 경우 아래와 같이 iptables는 초기화가 되어 있다.


iptables -S 명령어는 규칙의 리스트를 보여준다.


iptables -F 명령어는 규칙을 모두 지운다(Flush).


3. Rule 생성

  • -A INPUT : 규칙을 chain에 추가하는 것이다. (Append)

  • -m conttrack : 확장 집합 혹은 추가 capability를 제공하는 모듈을 가진다. 즉, conntrack 모듈은  패킷들이 이전 connection과의 관계에 기초한 decision을 만드는데 사용할 수 있는 명령어에 대한 접근을 제공한다.

  • --cstate : conntrack 모듈을 호출함으로써 사용가능한 명령어이다. 이 명령어는 우리가 이전에 본 패킷들에 어떻게 관계되어 있는지에 기반한 패킷들을 매치하게 해준다. 존재하는 connection의 일부인 패킷들을 허용하기 위해 ESTABLISHED 값을 넘겨준다. Established된 connection과 연관된 패킷들을 허용하기 위해 RELATED 값을 넘겨준다. 이것은 현재 SSH 세션에 매치되는 규칙의 일부이다.

  • -j ACCEPT : matching 패킷의 타겟을 명시한다. Iptables에게 앞선 영역과 매치되는 패킷들은 accept되어야 한다고 알려준다.   


4. 다른 필요한 Connection 허용

특정 포트만 허용하기 위해서는 포트를 명시한다. 여기에서는 22번 포트와 80번 포트를 허용해 볼 것이다.

  • -p tcp : 프로토콜이 TCP를 사용할 경우 패킷과 매치한다.

  • --dport : 위의 -p tcp 옵션이 주어진 경우 사용 가능하다. Destination port를 매칭하기 위해 필요한 옵션이다.

loopback device로 불리는 pseudo network interface를 다루기 위해서 아래와 같이 적용한다.

  • -I INPUT 1 : -I 플래그는 iptables에게 규칙을 삽입하라고 알려주는 것이다. -A 플래그는 append이기 때문에 끝에 삽입이 되고, -I는 어디에 삽입될지 정해서 사용할 수 있다.

  • -i lo : 이 규칙의 구성은 만약 패킷이 “lo” 인터페이스 라면 match 되는 규칙이다.


5. Drop Rule 구현

위에서 설정한 규칙은 모든 패킷을 허용하고 있다. 만약 하나의 패킷이 INPUT 체인에 들어오고 위에서 만든 4개의 규칙 중 하나와도 match가 안된다면 그것은 default policy로 전달된다. Default policy는 패킷을 항상 accept 한다. 그래서 INPUT 체인의 default policy를 drop으로 수정한다.

Chain INPUT 옆에 default policy가 DROP으로 변경된 것을 볼 수 있다. 이러한 타입의 디자인의 영향중 하나는 만약 규칙이 flush되면 dropping 패킷들로 떨어지는 것이다. 이것은 허용된 것들만 규칙에 추가하는 방식인데, 다른 방식은 default policy를 Accept로 정해두고 나머지 패킷들을 Drop 하는 방식이 있다.

이 규칙은 모든 remaining 패킷이 도달해서 매치됨에 따라 동작한다. 이것은 패킷이 이전에 체인을 통해 default policy로 도달하는 모든 방식을 drop 하는 것을 방지한다. 기본적으로 이것은 default policy가 트래픽을 accept하는데 사용된다. 만약 문제가 있거나 규칙이 flush되면 여전히 machine에 access할 수 있다. 이전에 default policy를 drop으로 해두면 접근이 되지 않는다. 하지만 규칙을 넣기 위해서는 DROP 라인 위에 삽입을 해야 한다. 그렇게 하기 위해서는 아래와 같이 DROP 규칙을 삭제하고 원하는 규칙을 삽입 후 다시 DROP 규칙을 넣는다.

하지만 할 때 마다 삭제하고 넣고 추가 해야 하기 때문에 원하는 LINE에 바로 삽입할 수 있다.

라인은 아래 명령어를 통해 볼 수 있다.


참고로 iptables 규칙은 ubuntu의 경우 iptables-persistent를 설치하면 가능하다.

(sudo invoke-rc.d iptables-persistent save)




반응형