7.4. FORWARDNAT 규칙

대부분의 기업체는 ISP에서 제한된 숫자의 공공 IP 주소를 할당받았습니다. 따라서 관리자는 부족한 IP 주소를 LAN 상의 모든 시스템에 주지 않고서도 인터넷 서비스에 액세스를 공유할 수 있는 방법을 강구해내야 합니다. LAN 상의 모든 시스템이 내부 및 외부 네트워크 서비스에 적절히 액세스할 수 있도록 하는데 사설 IP 주소를 사용하는 방법이 가장 많이 사용되고 있습니다. 방화벽과 같은 Edge 라우터는 인터넷으로부터 들어오는 전송을 받고 그 패킷을 목적 LAN 시스템으로 라우팅해줍니다; 동시에 방화벽/게이트웨이는 또한 LAN 시스템으로부터 외부로 향하는 요청을 받아 원격 인터넷 서비스로 라우팅할 수도 있습니다. 이렇게 네트워크 트래픽을 전송하는 것이 워험할 경우가 있습니다. 특히 최신 크래킹 도구를 사용하여 내부 IP 주소인 것처럼하여 원격 침입자의 컴퓨터가 마치 기업체 LAN에 위치한 것처럼 작업할 가능성이 있기 때문에 더욱 그러합니다. 이러한 상황이 발생하는 것을 방지하기 위하여, iptables는 네트워크 자원이 악용되는 것을 방지할 수 있는 라우팅 및 전송 정책을 제공합니다.

관리자는 FORWARD 정책을 사용하여 LAN에서 패킷이 전송될 위치를 제어할 수 있습니다. 예를 들면 전체 LAN으로 전송을 허용하려면 다음과 같은 규칙을 설정하시면 됩니다 (방화벽/게이트웨이의 내부 IP 주소가 eth1 상에 위치한다고 가정합니다):

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

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

알림알림
 

기본으로 Red Hat Enterprise Linux 커널의 IPv4 정책은 Red Hat Enterprise Linux를 운용하는 시스템이 전용 edge 라우터로 작동하는 것을 방지하기 위하여 IP 전송 지원을 비활성화 합니다. IP 전송을 활성화하시려면 다음 명령을 실행하십시오:

sysctl -w net.ipv4.ip_forward=1

만일 이 명령을 쉘 프롬프트에서 실행하시면 시스템을 재부팅하시는 경우 설정이 남아있지 않습니다. 영구적으로 설정을 보존하시려면 /etc/sysctl.conf 파일에서 전송을 설정하시면 됩니다. 다음 줄을 찾아서 01로 변경하시기 바랍니다:

net.ipv4.ip_forward = 0

다음 명령을 실행하여 sysctl.conf 파일의 변경 사항이 활성화되도록 하십시오:

sysctl -p /etc/sysctl.conf

이렇게 함으로서 LAN 상의 시스템들이 서로 통신할 수 있게 됩니다; 그러나 인터넷과 같은 외부 시스템과의 통신은 허용되지 않습니다. LAN 상의 시스템이 가상 IP 주소를 가지고 외부 공중 네트워크와 통신할 수 있도록 허용하시려면, LAN 시스템에서 외부로 향하는 요청이 방화벽 외부 장치(이 예시에서는 eth0)의 IP 주소로 나가도록 방화벽에 IP masquerading 기능을 설정하십시오:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

이 규칙은 NAT 패킷 매칭표(matching table) (-t nat)을 사용하며 방화벽 외부 네트워킹 장치 (-o eth0)에서 NAT에 내장된 POSTROUTING chain을 (-A POSTROUTING) 지정합니다. POSTROUTING을 사용할 경우 패킷이 방화벽의 외부 장치를 떠날때 변경됩니다. -j MASQUERADE 옵션은 컴퓨터의 사설 IP 주소를 방화벽/게이트웨이의 외부 IP 주소로 바꾸기 위해 사용되었습니다.

내부 네트워크에 위치한 서버를 외부에서 사용 가능하도록 설정하시려면 NAT의 PREROUTING chain에 -j DNAT 옵션을 사용하여 내부 서비스로 접속을 요청하는 들어오는 패킷을 전송할 수신 IP 주소와 포트 번호를 지정할 수 있습니다. 예를 들어 HTTP 요청이 들어올 경우 전용 Apache HTTP 서버 서버 시스템의 주소 172.31.0.23으로 전송하려면, 다음과 같은 명령을 입력하시면 됩니다:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT \
      --to 172.31.0.23:80

이 규칙은 NAT 테이블이 내장된 PREROUTING chain을 사용하여 들어오는 HTTP 요청을 모두 수신 IP 주소 172.31.0.23으로 전송합니다.

알림알림
 

FORWARD chain에 기본 DROP 정책을 지정하셨다면, 수신 NAT 라우팅이 가능하도록 들어오는 HTTP 요청 전송을 허가하는 규칙을 첨가하셔야 합니다.

iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 172.31.0.23 -j ACCEPT

이렇게 설정하시면 방화벽 외부에서 들어오는 HTTP 요청을 방화벽 내부에 위치한 목적 Apache HTTP 서버 서버로 전송 가능합니다.

7.4.1. DMZ과 iptables

iptables 규칙을 설정시 특정 시스템, 예를 들면 전용 HTTP 또는 FTP 서버로, 특히 가능하다면 내부 네트워크에서 격리된 DMZ (demilitarized zone: 비무장 지대)에 위치한 서버로 트래픽을 라우팅하도록 설정 가능합니다. 들어오는 모든 HTTP 요청을 (LAN의 192.168.1.0/24 범위에서 벗어난) IP 주소가 10.0.4.2이고 포트 80에 위치한 전용 HTTP 서버로 라우팅할 규칙을 설정하시면, 네트워크 주소 변환 (NAT)은 패킷을 적절한 목적지로 전송하기 위해 PREROUTING 표를 호출합니다:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT \
	    --to-destination 10.0.4.2:80

이 명령을 사용하시면 LAN 외부에서 포트 80으로 들어오는 모든 HTTP 연결이 내부 네트워크에서 격리된 별개의 네트워크 상에 위치한 HTTP 서버로 라우팅됩니다. 이렇게 네트워크를 분리하는 것이 동일한 네트워크 상에 위치한 기계에 HTTP 연결을 허용하는 것보다 훨씬 안전합니다. 만일 HTTP 서버가 보안 연결을 허용하도록 설정되었다면, 포트 443도 전송(forward)하셔야 합니다.