CHAPTER 07 · NETWORK

문은 열렸는데
왜 못 들어가지?

프로그램의 Listen 상태와 방화벽 허용, 외부 노출의 차이를 구분합니다.

읽는 시간 약 12분Service · Listen · Firewall · UFW · nftables
문이 열려 보인다고 언제나 들어갈 수 있는 것은 아닙니다. 서비스가 기다리고 있고, 올바른 주소에 연결되어 있으며, 방화벽이 통신을 허용해야 실제 접속이 가능합니다.
문이 열려 보인다고 언제나 들어갈 수 있는 것은 아닙니다. 서비스가 기다리고 있고, 올바른 주소에 연결되어 있으며, 방화벽이 통신을 허용해야 실제 접속이 가능합니다.

01

포트는 혼자 열리지 않는다

포트는 실제 문이 아니라 운영체제가 통신을 받을 프로그램을 구분하기 위한 번호입니다.

웹 서버나 SSH 서버 같은 프로그램이 특정 주소와 포트에 바인딩하고 Listen해야 해당 포트가 열린 상태가 됩니다.

프로세스를 종료하면 포트도 더 이상 Listen하지 않습니다. 포트를 연다는 말은 대부분 서비스를 실행한다는 뜻입니다.

직접 확인해 보기
$ ss -tulnp $ sudo lsof -i -P -n $ systemctl status ssh $ systemctl status nginx

02

localhost와 0.0.0.0은 다르다

같은 포트라도 어느 주소에 바인딩했는지에 따라 접속 가능한 범위가 달라집니다.

개발 서버가 localhost에만 바인딩되어 있으면 방화벽을 열어도 외부에서는 접속할 수 없습니다. ss 출력에서 Local Address를 함께 확인해야 합니다.

127.0.0.1:8080현재 장비에서만 접속
0.0.0.0:8080모든 IPv4 인터페이스에서 접속
192.168.0.30:8080지정한 인터페이스에서 접속
[::]:8080IPv6 인터페이스에서 접속
같은 골목에 여러 가게가 있어도 가게마다 손님을 받는 입구가 다릅니다. 서비스도 어느 주소에 바인딩했는지에 따라 localhost에서만 받거나 외부 인터페이스에서도 통신을 받을 수 있습니다.
같은 골목에 여러 가게가 있어도 가게마다 손님을 받는 입구가 다릅니다. 서비스도 어느 주소에 바인딩했는지에 따라 localhost에서만 받거나 외부 인터페이스에서도 통신을 받을 수 있습니다.

03

경비원이 문 앞에서 막을 수 있다

서비스가 Listen 중이어도 방화벽 정책이 패킷을 차단하면 외부에서 접속할 수 없습니다.

방화벽은 출발지·목적지 IP, 포트, 프로토콜과 연결 상태를 기준으로 허용하거나 차단합니다. 기본 차단 후 필요한 통신만 허용하는 방식이 안전합니다.

UFW는 사용하기 쉬운 관리 도구이며 실제 Linux 방화벽은 nftables 또는 iptables 규칙으로 동작할 수 있습니다.

직접 확인해 보기
$ sudo ufw status verbose $ sudo ufw allow 22/tcp $ sudo ufw allow from 192.168.0.0/24 to any port 22 proto tcp $ sudo nft list ruleset

04

열린 포트는 공격 표면이다

외부에서 접근 가능한 서비스가 많을수록 점검하고 보호해야 할 대상도 늘어납니다.

사용하지 않는 서비스는 종료하고, 관리 포트는 허용 IP를 제한하며, 기본 비밀번호를 제거하고, 보안 업데이트와 로그 감시를 적용해야 합니다.

내부에서 curl localhost가 성공하지만 외부에서 실패한다면 바인딩 주소, 호스트 방화벽, 클라우드 보안 그룹, NAT·포트포워딩 순으로 확인합니다.

직접 확인해 보기
$ curl localhost:80 $ nc -vz 192.168.0.30 22 $ journalctl -u ssh --since today
Listen 중이라는 사실, 방화벽이 허용했다는 사실, 인터넷에 노출됐다는 사실은 서로 다른 상태다.

CHAPTER REVIEW

이번 장에서 기억할 한 문장

서비스가 실행되고 포트를 Listen하며 방화벽과 경로가 허용되어야 외부에서 접속할 수 있다.