다음 이전 차례

5. NAT 조절하기

어떤 접속을 바꿀것인가 그리고 어떻게 바꿀것인가를 커널에게 알려주기 위하여 NAT 규칙들을 만들 필요가 있을 것입니다. 이렇게 하기 위해서, 우리는 아주 다재다능한 iptables를 사용합니다. 이것은 '-t nat' 이라는 특별한 옵션을 사용하여 NAT 테이블을 변경해 줌으로 가능합니다.

NAT 테이블에는 세개의 '체인'이라 불리는 규칙들이 있습니다. 각 규칙은 일치하는 것이 나올때까지 순서대로 시험됩니다. 세개의 체인은 PREROUTING( 목적지 NAT의 겨우 패킷이 처음으로 들어올때), POSTROUTING ( 시작점 NAT의 경우 패킷이 떠나갈때), 그리고 출력 ( 지역 네트워크에서 생성된 목적지 NAT 패킷) 입니다.

아래 그림은 이러한 관계를 잘 나타내고 있습니다.

      _____                                     _____
     /     \                                   /     \
   PREROUTING -->[Routing ]----------------->POSTROUTING----->
     \D-NAT/     [Decision]                    \S-NAT/
                     |                            ^
                     |                          __|__
                     |                         /     \
                     |                        | OUTPUT|
                     |                         \D-NAT/
                     |                            ^
                     |                            |
                     --------> Local Process ------

패킷이 지나갈때 위의 각 단계에서 어떠한 접속과 연관되어 있는지를 살펴봅니다. 새로운 접속이라면 이것이 적용되는 체인이 무었인지를 알아보고 이것을 어떻게 할 것인지를 알아보기 위하여 NAT 테이블을 살펴봅니다. NAT 테이블의 내용은 이후 이 접속으로부터 오는 모든 패킷에 적용됩니다.

5.1 iptables 사용할때의 단순한 선택

iptables 은 아래에 나열된 몇개의 기본 옵션이 있습니다. 모든 두줄의 옵션은 iptables가 다른 가능한 옵션과 구분할 수 있다면 줄여 쓸수 있습니다.

가장 중요한 옵션은 모든 NAT 작동에 사용되는 NAT 테이블을 지칭하는 '-t nat' 옵션입니다. 두번째로 중요한 옵션은 새로운 규칙을 그 체인의 끝에 추가하는 '-A' 옵션입니다.(예. '-A POSTROUTING'). '-I'옵션은 체인의 처음에 추가합니다 (예. '-I PREROUTING').

NAT를 이용할 패킷의 시작점이나 ('-s', '--source') 목적지 ('-d', '--destination')을 지정할 수 있습니다. 이 옵션뒤에는 하나의 IP 주소(예. 192.168.1.1)나 이름 (예. www.kernelnotes.org)이나 네트워크 주소 (예. 192.168.1.0/24 또는 192.168..0/255.255.255.0) 가 따라옵니다.

일치하는 인터페이서를 지정할 수도 있는데 들어오는 것('-i', '--in-interface')과 나가는 것('-o', '--out-interface')를 따로 지정합니다. 그러나 어떤 체인에 이 규칙을 적용할 것인지를 결정해 주어야 합니다. PREROUTING 에는 들어오는 인터페이서만 선택할 수 있고 POSTROUTING (그리고 출력) 에는 나가는 인터페이서만 선택할 수 있습니다. 이것을 잘못 선택하면 iptables는 에러를 낼 것입니다.

5.2 어떠한 패킷을 조작할 것인지, 섬세한 선택

위에서 시작점과 목적지의 주소를 지정할 수 있다고 이야기 했습니다. 시작점 주소의 옵션을 사용했다면 모든 시작점 주소가 조작 될것이고 목적지 주소의 옵션을 사용했다면 모든 목적지 주소가 조작될 것입니다.

TCP 나 UDP 처럼 프로토콜을 지정할 수 있습니다 ('-p', '--protocol'). 지정한 프로토콜의 패킷만 규칙과 일치하는지 검사할 것입니다. 이렇게 하는 주 이유는 tcp나 udp를 지정하면 추가의 옵션이 가능하기 때문입니다. 그 추가의 옵션은 '--source-port'와 '--destination-port' 입니다( 줄임말. '--sport', '--dport').

이러한 옵션은 어떤 시작점이나 목적지 포트의 것만을 지정할 수 있게 합니다. 이것은 웹 요구들(TCP 80 이나 8080 포트)를 다른곳으로 방향을 바꾸고 다른패킷은 그냥 두려고 할때 유용합니다.

이러한 옵션은 '-p' 옵션뒤에 따라와야 합니다. (이것은 그 프로토콜에 대한 확장 라이브러리를 로딩하는 부작용도 있습니다.) /etc/services 에서 얻을 수 있는 이름이나 포트 번호를 사용할 수도 있습니다.

패킷을 선택하는 여러 등급의 방법들은 고통스러운 세부사항들에 대한 설명이 나와있는 메뉴얼 페이지를 참고하세요. (man iptables).


다음 이전 차례