안녕하세요. 일본서버, 미국서버 호스팅 전문 지구 IDC 기술팀입니다.
오늘은 CentOS 7에서 iptables 방화벽 규칙을 추가했지만 재부팅 후 사라지는 문제를 해결하는 방법을 알아보겠습니다. iptables 명령으로 추가한 규칙은 커널의 현재 런타임 규칙에만 반영되므로 별도로 저장하지 않으면 서버 재부팅이나 iptables 서비스 재시작 후 없어질 수 있습니다.
CentOS 7에서는 기본 방화벽 관리 도구가 firewalld이므로, 전통적인 iptables 서비스를 사용하려면 iptables-services 패키지와 /etc/sysconfig/iptables 저장 파일, 서비스 자동 시작 상태를 함께 확인해야 합니다. 이 문서에서는 현재 규칙을 안전하게 백업하고 저장한 뒤 재시작과 재부팅 후에도 유지되는지 확인하는 절차를 설명합니다.
적용 환경과 지원 상태
| 항목 | 내용 |
|---|---|
| 운영체제 | CentOS Linux 7 |
| iptables 서비스 패키지 | iptables-services |
| IPv4 규칙 저장 파일 | /etc/sysconfig/iptables |
| IPv6 규칙 저장 파일 | /etc/sysconfig/ip6tables |
현재 방화벽 관리 방식 확인
CentOS 7은 기본적으로 firewalld를 사용합니다. 먼저 현재 서버가 firewalld인지 iptables 서비스인지 확인합니다.
systemctl is-active firewalld
systemctl is-active iptables
systemctl is-enabled firewalld
systemctl is-enabled iptables
현재 메모리에 적용된 IPv4 규칙도 확인합니다.
sudo iptables -S
sudo iptables -L -n -v --line-numbers
firewalld가 활성화되어 있는데 단순히 iptables 명령으로 런타임 규칙만 추가했다면 firewalld 재시작이나 재부팅 과정에서 해당 규칙이 유지되지 않을 수 있습니다. firewalld를 계속 사용할 것인지, iptables-services로 전환할 것인지 먼저 결정해야 합니다.
iptables-services 설치 여부 확인
전통적인 iptables 서비스를 사용해 재부팅 시 /etc/sysconfig/iptables 규칙을 복원하려면 iptables-services 패키지가 필요합니다.
rpm -q iptables-services
systemctl status iptables --no-pager
패키지가 설치되어 있지 않다면 현재 CentOS 7 저장소가 정상적으로 구성되어 있다는 전제에서 다음과 같이 설치합니다.
sudo yum install -y iptables-services
Red Hat의 RHEL 7 문서는 firewalld 대신 iptables 서비스를 사용할 경우 firewalld를 비활성화한 뒤 iptables-services를 설치하고 iptables 서비스를 활성화하는 구성을 안내합니다.
iptables-services로 전환하기로 결정했다면 firewalld를 중지하고 부팅 자동 시작을 해제합니다.
sudo systemctl disable firewalld
sudo systemctl stop firewalld
현재 iptables 규칙 저장
먼저 기존 저장 파일이 있다면 백업합니다.
sudo cp -a /etc/sysconfig/iptables /etc/sysconfig/iptables.backup 2>/dev/null || true
현재 메모리에 적용된 IPv4 규칙을 /etc/sysconfig/iptables에 저장합니다. Red Hat의 RHEL 7 공식 문서에서도 재부팅 후 규칙을 복원하기 위한 저장 방법으로 이 명령을 안내합니다.
sudo sh -c 'iptables-save > /etc/sysconfig/iptables'
저장된 파일을 확인합니다.
sudo ls -l /etc/sysconfig/iptables
sudo head -n 30 /etc/sysconfig/iptables
실제 적용 전에 저장 파일을 파싱 테스트할 수 있습니다.
sudo iptables-restore --test < /etc/sysconfig/iptables
명령이 오류 없이 종료되면 저장 파일의 규칙 문법을 읽을 수 있는 상태입니다.
부팅 시 iptables 자동 시작 설정
규칙 파일만 저장하고 iptables 서비스가 부팅 시 시작되지 않으면 재부팅 후 규칙이 자동 복원되지 않습니다. 서비스를 활성화하고 시작합니다.
sudo systemctl enable iptables
sudo systemctl start iptables
자동 시작과 현재 실행 상태를 확인합니다.
systemctl is-enabled iptables
systemctl is-active iptables
systemctl status iptables --no-pager
정상이라면 enabled와 active 상태를 확인할 수 있습니다.
재시작 및 재부팅 전 규칙 유지 여부 확인
곧바로 재부팅하기 전에 iptables 서비스를 재시작하여 저장한 규칙이 다시 정상적으로 로드되는지 확인합니다.
sudo systemctl restart iptables
sudo iptables -S
sudo iptables -L -n -v --line-numbers
재시작 후 필요한 규칙이 그대로 존재하고 새 SSH 세션도 정상 접속되는 것을 확인한 다음에만 서버 재부팅을 진행하는 것이 안전합니다.
sudo reboot
재접속 후 규칙과 서비스 상태를 다시 확인합니다.
systemctl is-active iptables
systemctl is-enabled iptables
sudo iptables -S
IPv6 규칙도 별도로 저장
IPv6를 사용하는 서버라면 IPv4의 iptables와 별도로 ip6tables 규칙을 저장하고 서비스도 활성화해야 합니다.
sudo sh -c 'ip6tables-save > /etc/sysconfig/ip6tables'
sudo ip6tables-restore --test < /etc/sysconfig/ip6tables
sudo systemctl enable ip6tables
sudo systemctl start ip6tables
IPv6를 실제로 사용하지 않는다고 생각하더라도 인터페이스에 글로벌 IPv6 주소가 존재하는지 먼저 확인한 후 정책을 결정하십시오.
ip -6 addr show
sudo ip6tables -S
자주 발생하는 원인과 해결 방법
| 증상 | 가능한 원인 | 확인 방법 | 해결 방법 |
|---|---|---|---|
| 재부팅 후 추가한 규칙만 사라짐 | 런타임 규칙을 저장하지 않음 | iptables -S와 /etc/sysconfig/iptables 비교 |
iptables-save > /etc/sysconfig/iptables 실행 |
| 저장 파일은 있는데 부팅 후 적용 안 됨 | iptables 서비스가 disabled 상태 | systemctl is-enabled iptables |
systemctl enable iptables |
Unit iptables.service could not be found |
iptables-services 미설치 |
rpm -q iptables-services |
정상 저장소에서 iptables-services 설치 |
| firewalld 재시작 후 규칙 변경 | firewalld와 직접 iptables 명령 혼용 | systemctl status firewalld iptables |
하나의 방화벽 관리 방식으로 통일 |
| iptables 서비스 재시작 후 SSH 끊김 | 저장 파일에 SSH 허용 규칙 누락 | 콘솔에서 iptables -S와 백업 비교 |
백업 규칙 복원 후 SSH 허용 규칙 확인 |
| IPv4는 유지되지만 IPv6 규칙만 사라짐 | ip6tables 규칙 미저장 또는 서비스 비활성 | systemctl is-enabled ip6tables |
ip6tables-save 후 서비스 활성화 |
원상복구 방법
저장한 규칙 때문에 문제가 발생했다면 콘솔에서 백업 파일을 복원한 뒤 iptables 서비스를 재시작합니다.
sudo cp -a /etc/sysconfig/iptables.backup /etc/sysconfig/iptables
sudo iptables-restore --test < /etc/sysconfig/iptables
sudo systemctl restart iptables
iptables-services 사용을 중단하고 firewalld로 되돌리려면 기존 firewalld 영구 설정이 정상적으로 존재하는지 먼저 확인한 뒤 전환해야 합니다.
sudo systemctl disable --now iptables
sudo systemctl enable --now firewalld
sudo firewall-cmd --state
sudo firewall-cmd --list-all
관련 지구 IDC 기술자료
공식 참고자료
| 기관 | 문서 | 확인 내용 | 조회일 |
|---|---|---|---|
| Red Hat | RHEL 7 — Saving Network Packet Filter Settings | iptables-save > /etc/sysconfig/iptables, systemctl enable iptables, 재시작 후 규칙 유지 검증 |
|
| Red Hat | RHEL 7 Security Guide — iptables 사용 | firewalld와 iptables-services의 차이, firewalld 비활성화, iptables-services 설치 및 서비스 활성화 | |
| CentOS Project | CentOS Linux | CentOS Linux 7 공식 지원 종료일 2024년 6월 30일 |
자주 묻는 질문
iptables 명령으로 규칙을 추가하면 자동으로 저장되지 않나요?
자동 저장되지 않습니다. iptables 명령은 현재 커널의 런타임 규칙을 변경하므로 재부팅 후 유지하려면 iptables-save로 /etc/sysconfig/iptables에 저장하고 iptables 서비스를 부팅 시 활성화해야 합니다.
service iptables save 대신 무엇을 사용해야 하나요?
CentOS 7에서는 iptables-save > /etc/sysconfig/iptables 방식을 사용하는 것이 명확합니다. RHEL 7 공식 문서도 이 저장 방식을 안내합니다.
firewalld와 iptables를 동시에 사용해도 되나요?
두 도구 모두 커널의 Netfilter 규칙을 관리하므로 운영 관리 관점에서는 하나의 방식으로 통일하는 것이 좋습니다. firewalld를 사용하는 서버라면 영구 규칙을 firewall-cmd --permanent로 관리하고, iptables-services를 사용할 서버라면 firewalld를 중지·비활성화한 뒤 전환하십시오.
규칙 저장 후 반드시 재부팅해야 하나요?
즉시 재부팅할 필요는 없습니다. 먼저 systemctl restart iptables로 저장 파일이 정상 복원되는지 확인하고 새 SSH 세션이 정상 접속되는지 검증한 뒤 유지보수 시간에 재부팅하는 편이 안전합니다.
IPv6 규칙도 같은 파일에 저장되나요?
아닙니다. IPv4는 /etc/sysconfig/iptables, IPv6는 /etc/sysconfig/ip6tables에 별도로 저장하며 ip6tables 서비스도 별도로 활성화해야 합니다.
마무리
CentOS 7에서 iptables 규칙이 재부팅 후 사라지는 가장 일반적인 원인은 런타임 규칙을 /etc/sysconfig/iptables에 저장하지 않았거나, iptables-services가 설치·활성화되어 있지 않은 경우입니다. 현재 방화벽 관리 방식을 먼저 확인한 뒤 규칙을 저장하고 iptables 서비스를 부팅 시 활성화하면 재부팅 후에도 같은 규칙을 복원할 수 있습니다.
방화벽 설정은 원격 접속에 직접 영향을 주므로 서비스 재시작과 재부팅 전에 반드시 SSH 허용 규칙, 저장 파일 문법, 별도 SSH 세션 접속 여부를 확인하시기 바랍니다.
지구 IDC는 일본서버와 미국서버를 포함한 다양한 서버 호스팅 환경에서 안정적인 운영에 도움이 되는 기술정보를 지속적으로 제공하겠습니다.