728x90

로컬에서 어떤 서비스가 특정 포트를 리스닝 중인데도 외부나 내부에서 접근이 안 되는 상황이 있었다.

예를 들어, API 서버가 6443 포트를 열고 있지만 nc, curl 등으로 접속이 실패하는 경우다.

# 테스트 커맨드
nc 127.0.0.1 6443 -zv -w 2
# 결과
nc: connect to 127.0.0.1 port 6443 (tcp) failed: Connection refused

이럴 때는 보통 3가지를 의심해 볼 수 있다.

  • 서비스가 작동 중이 아니다.
  • 포트가 잘못되었다. 즉, 호출 정보가 잘못되었다.
  • 방화벽이 막고 있다.

이번 글에서는 방화벽, iptables 때문에 막힌 경우 어떻게 해결할 수 있는지를 다루고자 한다.


1. iptables란?

iptables는 리눅스에서 네트워크 패킷을 필터링하거나 포트 포워딩, NAT 등을 설정할 수 있는 방화벽 도구다.
우리가 설정하지 않아도, 클라우드 이미지나 OS 배포판이 기본 규칙을 넣어두는 경우가 있다.


2. 지금 iptables이 어떤 규칙을 가지고 있는지 확인

sudo iptables -L -n -v

위 커멘드를 통해 iptable 정보들을 조회할 수 있다.

결과는 아래와 같은 형식으로 출력된다.

Chain INPUT (policy DROP 120 packets, 9600 bytes)
 pkts bytes target     prot opt in     out     source               destination
   10   800 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22
  • INPUT 체인에서 policy가 DROP으로 설정되어 있다면, 기본적으로 모든 요청을 차단하고 예외만 허용하는 구조다.
  • 위 예시는 22번 포트(SSH)만 허용되고 있다는 뜻이다.

3. 포트 열기: iptables로 6443 포트 허용하기

예를 들어 Kubernetes API Server나 커스텀 서버가 6443 포트를 사용하고 있다면 다음과 같이 열 수 있다.

# TCP 6443 포트를 허용
sudo iptables -A INPUT -p tcp --dport 6443 -j ACCEPT

이후 해당 설정을 적용하기 위해서는 OS마다 조금 다를 수 있다.

 

이 글은 Ubuntu를 기준으로 작성하도록 하겠다.

sudo apt install iptables-persistent
sudo netfilter-persistent save

4. 방화벽 규칙 초기화

만약 작업 중인 환경이 테스트 환경이고, 방화벽 내 설정을 비우고 싶다면 아래와 같이 설정해 주면 된다.

# 모든 규칙 초기화
sudo iptables -F

# 기본 정책 ACCEPT로 변경
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

5. 외부 접속은 다른 문제일 수 있다.

내부에서 정상적으로 호출되지만 외부에서의 접속이 어렵다면, 이는 다른 레벨의 방화벽이 막고 있을 수 있다.

흔히 AWS의 InBound 규칙과 같은 규칙들을 생각할 수 있고, ufw 때문일 수도 있다.

 

ufw는 iptables를 기반으로 손쉽게 방화벽 설정을 할 수 있는 인터페이스이다.

그럼 iptables의 설정을 열었는데 왜 그 기반으로 동작하는 인터페이스인 ufw의 영향을 받게 되는가?

 

설정 자체는 iptables에 명시되어 있습니다. 다만 iptables의 규칙들은 서로 chain을 하고 있고, 설정 중에는 ufw에 대한 설정이 존재하게 된다.

 

즉, iptables에는 ACCEPT로 설정되어 있고, ufw에는 DROP으로 설정되어 있다면 해당 Connect 요청은 iptables까지 도달하지 못하고 ufw에서 막히는 상황이 발생할 수 있다.

 

정리하자면 iptables는 방화벽의 엔진, ufw는 그 위에 올라간 인터페이스일 뿐이지만,

ufw는 자신만의 규칙 체인을 만들기 때문에 차단되는 문제가 생길 수 있는 것이다.


마지막

개인 미니 PC에 Kubernetes를 설치하는 와중 특정 포트가 닫혀있는 것을 보게 되었고,

이를 해결하는 과정에서 왜 해당 설정이 필요한지, 어떤 내용들이 존재하는지를 기록하고자 글로 남기게 되었다.

 

가장 기본적인 부분이지만, 왜 방화벽 때문에 호출이 막히는 현상이 발생하는지가 궁금하였다면, 이 글이 기본적인 개념을 잡는 데에 도움이 될 것 같다.

728x90

+ Recent posts