더북(TheBook)

모든 게스트가 test02에 접속할 수 있습니다. filter 테이블이 모든 접근을 허용하고 있기 때문입니다. ID와 비밀번호를 이용해서 로그인한 다음 프롬프트가 변경되는 것을 보면 test01에서 test02로 원격 접속한 사실을 알 수 있습니다.

administrator@test01:~$ telnet 10.0.0.2
Trying 10.0.0.2...
Connected to 10.0.0.2.
Escape character is '^]'.
Ubuntu 14.04.1 LTS
test02 login: administrator
password: *******

administrator@test02:~$
Tip

텔넷 터미널에서 빠져나오려면 exit 또는 logout 명령을 입력합니다. 명령 프롬프트의 호스트 이름을 확인하면 test02에서 다시 test01로 돌아오는 것을 확인할 수 있습니다.

방화벽이 제대로 동작하려면 기본 정책은 차단하지만, 특정 규칙을 따르는 접근을 허용하도록 해야 합니다. 게이트웨이의 방화벽을 활성화해보겠습니다. 먼저 -F 옵션으로 filter 테이블에 설정되어 있는 규칙을 모두 초기화합니다. 사슬의 기본 정책을 정의하는 -P 옵션으로 filter 테이블의 INPUT 사슬과 FORWARD 사슬의 기본 정책을 DROP(제한함)으로 변경합니다.

administrator@test05:~$ sudo iptables -F
administrator@test05:~$ sudo iptables -P INPUT DROP
administrator@test05:~$ sudo iptables -P FORWARD DROP
Tip

OUTPUT 사슬은 허용해뒀습니다. 여기에서는 게이트웨이를 거쳐 나가는 패킷은 제한하지 않기 때문입니다.

INPUT 사슬과 FORWARD 사슬의 기본 규칙이 ACCEPT에서 DROP으로 변경된 것을 확인할 수 있습니다.

administrator@test05:~$ sudo iptables -L
Chain INPUT (policy DROP)
target     prot opt source              destination

Chain FORWARD (policy DROP)
target     prot opt source              destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source              destination

게이트웨이를 거치지 않고 test02(10.0.0.2)와 연결할 수 있는 test01(10.0.0.1)에서는 여전히 텔넷 접근이 가능합니다. 게이트웨이 test05(10.0.10.254)를 거쳐야 하는 test03(10.0.10.1)과 test04(10.0.10.2)에서는 test02의 텔넷 서버로 접속이 차단됩니다. FORWARD 사슬의 기본 정책이 DROP으로 설정되어 게이트웨이를 거쳐 통과하는 패킷을 제한하기 때문입니다. 방화벽 규칙의 영향을 받는 대상은 게이트웨이를 지나는 패킷이라는 사실을 알 수 있습니다.

administrator@test03:~$ telnet 10.0.0.2
Trying 10.0.0.2...

네트워크 관리자가 승인하는 접근을 허용하도록 각 사슬에 규칙을 정의해보겠습니다. 먼저 내부 네트워크에서 게이트웨이 장치로 전송되는 패킷은 허용합니다. iptables는 네트워크 인터페이스를 통한 접근을 제어할 수 있습니다. 내부 네트워크와 연결된 네트워크 인터페이스로 들어오는 접근( -i eth1/eth2)을 허용( -j ACCEPT)하도록 INPUT 사슬에 규칙을 정의합니다( -A INPUT).

administrator@test05:~$ sudo iptables -A INPUT -i eth1 -j ACCEPT
administrator@test05:~$ sudo iptables -A INPUT -i eth2 -j ACCEPT
이렇게 하세요!

반대로 사슬에 정의된 규칙을 삭제하는 옵션은 -D입니다. -D 이후에 정의했던 규칙을 그대로 입력해야 해당 규칙이 삭제됩니다. 규칙 삭제 후 iptables -L로 확인해보기 바랍니다.

administrator@test05:~$ sudo iptables -D INPUT -i eth1 -j ACCEPT

IP 주소 매스커레이드 기능을 유지하기 위해 내부 네트워크에서 게이트웨이 장치를 거쳐 외부로 전달되는 패킷도 허용해야 합니다. 내부 네트워크와 연결된 네트워크 인터페이스로 들어오는 접근( -i eth1/eth2)을 허용( -j ACCEPT)하도록 FORWARD 사슬에 규칙을 정의합니다( -A FORWARD).

administrator@test05:~$ sudo iptables -A FORWARD -i eth1 -j ACCEPT
administrator@test05:~$ sudo iptables -A FORWARD -i eth2 -j ACCEPT

iptables는 IP 주소, 프로토콜, 포트에 대한 접근을 제어할 수 있습니다. test02로 전달( -d 10.0.0.2)되는 TCP 패킷( -p tcp) 중에서 텔넷 서버에 대한 접속 요청( –dport 23)을 허용( -j ACCEPT)하도록 FORWARD 사슬에 규칙을 정의합니다( -A FORWARD).

administrator@test05:~$ sudo iptables -A FORWARD -d 10.0.0.2 -p tcp --dport 23 -j ACCEPT
Tip

포트번호에 대해서 3장의 ‘netstat로 네트워크 정보 확인하기’에서 설명했습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.