본문 바로가기
Linux

[Linux] Ubuntu 부팅시 iptables 설정 reset 대응

by lucas_owner 2025. 5. 26.

재부팅시 Iptables 설정 Reset 대응

얼마전 Oracle Cloud 에서 이메일이 하나 왔다. 마이그레이션을 위해 인스턴스를 정해진 날짜안에 "수동 재부팅" 혹은 날짜이후 자동 재부팅 된다는 내용이었다.

오라클 서버에서 재부팅 후 꼭 실행 되어야 하는것들과 그렇지 않은것은 전부 설정을 해두었기 때문에 재부팅을 해도 사이드 이펙트가 없을것으로 판단하여 재부팅을 진행 하였다.

 

 

- 문제 상황

재부팅 이후 인스턴스가 정상적으로 작동하는것을 콘솔에서 확인 이후 SSH 접속을 시도 했지만 

"Connection Refused" 와 함께 접속이 되지 않았다.

 

해당 인스턴스는 Password 접속 방식이 아닌, SSH Key 접속 방식이어서 Oracle Console 의 "Local Connection" 도 불가능하여

설정 자체 수정이나 확인 불가한 상황.

 

더 자세한 내용과 해결방법은 맨 아래의 "번외" 부분 참고!


 

원인 분석

해당 서버에서는 SSH 의 기본 포트인 22 번을 비활성화 하고, 별도의 포트를 통해 22 port 로 forwarding 을 수행하고 있었는데

  1. Oracle Cloud Console : 별도의 TCP Port Open
  2. 인스턴스 내에서 iptables nat PREROUTING {Port} to 22 로 특정 포트 접속시 22로 포워딩

위의 흐름으로 SSH 접속을 하게 해두었다. 

ssh user@{IP} -p {Port}

 

 

iptables로 내부에서 포워딩을 진행했기에 해당 부분이 문제일것 같아서, iptables 에 대해서 알아보니 아래와 같은 내용을 확인 할 수 있었다.

iptables 로 직접 추가한 nat, REDIRECT, ACCEPT 와 같은 Rule 은 재부팅 하면 저장이 되지 않고 날라간다.
-> iptables 의 rule 은 휘발성이다.

 

 

그런데 Nginx 의 Connection Rule 은 정상적으로 동작하고 있었다. 

이때 서비스 포트들의 경우 아래처럼 오픈을 해두었었다.

> iptables 80 port open 
> ufw 80 enable

 

왜 ufw 로 허용한 설정들은 적용이 되고 있을까?


 

- ufw 

Uncomplicated Firewall(ufw) 는 iptables 위에서 동작하는 추상화 레이어이며, 

Linux/debian 계열에서 사용되는 방화벽 관리 프로그램이다. 

네트워크  트래픽이 들어올 수 있는 통로를 설정, 통제를 수행한다. 

 

ufw allow {port} 

 

명령어를 통해, 특정 port 에 대한 ingress, egress, 프로토콜 등을 설정 할 수 있다. 

다만 port 차단/허용에 대해서만 지원하며, nat(포트포워딩, 리다이렉트), 패킷조작에 대한 기능은 지원하지 않는다.

해당 개념을 왜 언급했냐면 

 

ufw 로 특정 port 에 대한 설정을 하면 재부팅시 iptables 에 해당 내용을 반영한다.

 

즉 ufw 로 설정해준 80,443,Nginx 에 대한 프로토콜 설정들은 ufw 를 통해 iptables 에 자동으로 반영 되었지만

수동으로 추가해준 nat PREROUTING 설정은 반영되지 않았던것이다.(nat 는 불가)

 


 

해결 방안

휘발성인 iptables 의 설정을 재부팅이 되어도 유지하게 하려면 무언가 조치를 취해야 한다. 

이때 선택지는 2가지 정도로 볼 수 있을것 같다.

 

  1. iptables-persistent 로 수동 저장
  2. systemd 부팅시 자동 적용 (Script 방식)

 

1. iptables-persistent 방식

해당 방법이 가장 간편하게 사용할 수 있는 방법일것 같다. 

iptables 의 rules 을 수동으로 저장 하고, 부팅시 저장해놓은 rules 를 읽어와 동작하게 하는 pacakge 이다. 

해당 패키지 내부에는 netfilter-persistent 가 같이 설치되며, 수동 저장시 생성되는 "rules.v4" 파일을 읽어

시스템에 load 하게 하는 방식이다. 

 

nat 포함 전체가 저장되며, ufw 와 혼용시 주의해야 할 점도 존재한다. 

# 설치 및 사용 Command

# 설정 추가
$iptables -t nat ...


# 설치 
$sudo apt uipdate
$sudo apt install iptables-persistent

# 저장
$sudo iptables-save > /etc/iptables/rules.v4

# NAT 포함 전부 저장 됨!

 

 

2. systemd 부팅시 자동 적용(스크립트 방식)

재부팅 이후 지정된 shell script 를 실행하게 하여, rule 을 추가 하게 하는 방식.

iptables-persistent 에 비해 유연하게 사용할 수 있다는 장점이 존재한다(필요한것만 사용)

해당 스크립트는 실행시점을 조정 할 수 있다. 

  1. if-pre-up.d/ : 네트워크 인터페이스 올리기 직전 실행(systemd 초기화 이후)
  2. rc.local : 대부분의 데몬 실행 이후 실행

어떤 시점에서 실행할지는 크게 상관이 없다.

"if-pre-up.d" 의 경우 systemd 가 시작(초기화) 된 이후에 실행 됨으로 iptables 명령어를 사용할 수 있는 시점이다.

필자의 경우 nat 명령어 하나만 추가 하면 되기에, 충돌 가능성이 있는 iptables-persistent 를 사용하지 않고

해당 방법을 사용 했다. 

 

 

설정 방법은 3단계를 거치기만 하면 된다.

  1. 파일 생성
  2. 파일 내부에 실행할 스크립트 작성
  3. 실행 권한 부여 
# 파일 생성
$sudo vi /etc/network/if-pre-up.d/iptables-redirect

# 파일내 스크립트 작성!!!  ```안의 내용만
```
#!/bin/sh
iptables -t nat ...
```

# 실행권한 부여
$sudo chmod +x /etc/network/if-pre-up.d/iptables-redirect

 

단계들을 차례로 진행이 정상적으로 되었다면, 재부팅시 systemd 가 초기화된 이후 해당 스크립트가 실행 되며 nat 관련 설정이 적용되며

정상적으로 ssh 에 접속이 되는것을 확인 할 수 있다.

 


 

번외

Oracle Cloud 의 해당 인스턴스는 3번째 재설치(초기화) 를 진행 하였으며, 재설치가 거듭되며 누락되는 설정들이 존재했다. 

필자의 경우 나름 보안을 신경쓴다고

- Password 로그인 방식 -> SSH Key 접속 방식으로만 로그인 가능

- 기본 포트 접속 차단 -> 22 ~ 25 

 

를 Oralce Console 단에서 차단 해뒀다. 

 

이번처럼 SSH 접속이 불가할때, Oracle Console 내부에서 Local Connection 이나, OCI 로 접속등 전부 불가한 아이러니한 상황이 발생했다. 

(주인조차 들어가지 못하는 서버,,,)

 

Local Connection 을 통해 접속은 됬지만 Login 부분에서 막혔었다. 

Root 계정으로 로그인 불가, 기본계정 패스워드 사용X 설정 때문이었다.... 

 

결국 Oracle Console 내에서 22 port 를 오픈하여 서버 인스턴스에 접속 후에 iptables nat 설정을 다시하고 나서야 해결이 되었다.

SSH Key 로 로그인하도록 설정 한다면, 보안적으로는 좋을지 몰라도 이런 상황에서 접속조차 불가한 상황이 발생할줄은 몰랐다..

더 좋은 방법이 있을지 이번기회를 통해 찾아봐야겠다.

 

당시 찾아본 방법은 아래와 같다.

  1. boot volume 마운트해서 수동 복구 -> 새로운 인스턴스 연결 후 sshd_config 설정 바꾸는 방법.
  2. GRUB 진입 하여 sshd_config 설정 변경
  3. Oracle Cloud Metadata Sciprt 사용 -> ssh 설정 변경, 키 추가 sciprt 실행 가능 (Cloud-init)

 

* 번외속 번외: 이런 접속 수단 완전 차단 상황이 가끔 벌어지는 상황이라고 한다.. (필자처럼 어중간하게 하면) 대책을 잘 세워놓도록 하자

반응형

댓글