더북(TheBook)

※ 여기서 문제!

텔넷 서버(23)에 대한 접근을 허용한 상태에서 test03(10.0.10.1)의 접근만 차단하려고 한다. 이렇게 설정하면 test03에서 접근이 차단될까?

administrator@test02:~$ sudo ufw deny from 10.0.10.1
Rule added
administrator@test02:~$ sudo ufw status
Status: active

To                         Action     From
--                         ------     ----
23                         ALLOW      Anywhere
Anywhere                   DENY       10.0.10.1
23                         ALLOW      Anywhere (v6)

정답은 ‘아니오’다. test03에서 여전히 연결이 잘 된다. iptables -L로 확인해보면 알 수 있는데, INPUT이 참조하는 ufw-user-input 사슬에서 텔넷 서버에 대한 접근을 허용하는 규칙이 test03(10.0.10.1)의 접근을 제한하는 규칙보다 먼저 적용되기 때문이다.

Chain ufw-user-input (1 references)
target     prot opt source            destination
ACCEPT     tcp  --  anywhere          anywhere          tcp dpt:telnet
ACCEPT     udp  --  anywhere          anywhere          udp dpt:23
DROP       all  --  10.0.10.1         anywhere

따라서 정말 test03의 접근을 제한하고 다른 게스트의 텔넷 접근을 허용하려면 다음과 같이 test03에 대한 접근 제한을 먼저 정의하고 20번 포트를 허용해야 한다. 그런데 이렇게 해버리면 기본 규칙은 제한( DROP)하지만, 특정 포트로 모든 접근을 허용( ALLOW)하고 다시 특정 IP 주소 접근만 제한( DENY)하는 이상한 규칙이 적용된다.

administrator@test02:~$ sudo ufw deny from 10.0.10.1
administrator@test02:~$ sudo ufw allow 23
administrator@test02:~$ sudo ufw status
Status: active

To                       Action      From
--                       ------      ----
Anywawhere               DENY        10.0.10.1
23                       ALLOW       Anywhere
23                       ALLOW       Anywhere (v6)

administrator@test02:~$ sudo iptables -L
Chain ufw-user-input (1 references)
target     prot opt source              destination
DROP       all  --  10.0.10.0           anywhere
ACCEPT     tcp  --  anywhere            anywhere           tcp dpt:telnet
ACCEPT     udp  --  anywhere            anywhere           udp dpt:23

기본 정책은 제한(DROP)으로 두고 특정 IP 주소 대역에서 특정 포트로의 접근을 허용(ALLOW)하는 식으로 규칙을 간결하게 정의하는 편이 바람직하다. ufw에 정의된 모든 규칙을 삭제해서 초기화하는 명령은 ufw reset이다. 초기화한 다음 ufw enable 명령으로 다시 방화벽을 활성화한다.

administrator@test02:~$ sudo ufw reset
Resetting all rules to installed defaults. Proceed with operation (y|n)? y
administrator@test02:~$ sudo ufw enable

특정 IP 주소에서 특정 포트로 들어오는 접근을 허용하려면 ufw allow from [IP 주소] to port [포트번호]를 입력한다. 다음과 같이 test01(10.0.0.1)에서 텔넷 서버(23)에 대한 접근을 허용한다.

administrator@test02:~$ sudo ufw allow from 10.0.0.1 to port 23

특정 네트워크에서 특정 포트로 들어오는 접근을 허용하려면 ufw allow from [IP 주소] to any port [포트번호]를 입력한다. 다음 명령은 test03과 test04가 속해 있는 10.0.10.0 네트워크 전체에서 텔넷 서버(23)에 대한 접근을 허용한다.

administrator@test02:~$ sudo ufw allow from 10.0.10.0/24 to any port 23

이렇게 해서 ufw에 의해 방화벽 규칙이 간결하게 정의된 것을 확인할 수 있다.

administrator@test02:~$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
23                         ALLOW       10.0.0.1
23                         ALLOW       10.0.10.0/24
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.