Rocky Linux / 방화벽 관리하는 방법
Rocky Linux의 기본 방화벽 관리 도구는 firewalld이며, firewall-cmd로 영역(zone), 서비스와 포트를 관리합니다. 원격 서버에서는 현재 SSH 연결을 유지한 채 런타임 규칙으로 먼저 시험하고, 접속이 정상인 것을 확인한 뒤 영구 설정으로 저장하는 순서가 안전합니다.
firewalld 상태와 활성 영역 확인하기
sudo firewall-cmd --state sudo systemctl status firewalld sudo firewall-cmd --get-active-zones sudo firewall-cmd --get-default-zone
영역은 네트워크 연결이나 원본 주소에 적용할 신뢰 수준과 규칙 묶음입니다. 명령에 --zone을 생략하면 예상과 다른 기본 영역을 수정할 수 있으므로 활성 인터페이스가 속한 영역을 먼저 확인하세요.
Rocky Linux의 기본 개념과 명령은 Rocky Linux firewalld 공식 가이드에서 확인할 수 있습니다.
방화벽 서비스 시작과 자동 실행
sudo systemctl enable --now firewalld
상태를 확인합니다.
systemctl is-enabled firewalld systemctl is-active firewalld
운영 서버에서 방화벽을 통째로 중지하는 방식은 권장하지 않습니다. 필요한 서비스와 원본만 허용하도록 규칙을 조정하세요. 클라우드 환경에서는 보안 그룹이나 네트워크 ACL도 별도로 적용될 수 있습니다.
런타임 설정과 영구 설정의 차이
| 설정 | 적용 시점 | 특징 |
|---|---|---|
| 런타임 | 명령 실행 즉시 | 재시작·재부팅·reload 시 사라질 수 있어 안전한 시험에 적합합니다. |
| 영구 | --permanent 기록 후 reload |
재부팅 뒤에도 유지되지만 즉시 런타임에 반영되지 않는 명령이 많습니다. |
먼저 런타임에 규칙을 추가해 시험한 뒤 전체 런타임 구성을 영구 설정으로 저장할 수 있습니다.
sudo firewall-cmd --zone=public --add-service=http sudo firewall-cmd --zone=public --query-service=http sudo firewall-cmd --runtime-to-permanent
반대로 --permanent로 변경했다면 검토 후 reload해야 런타임에 반영됩니다.
sudo firewall-cmd --reload
서비스 허용하고 제거하기
정의된 서비스 확인하기
firewall-cmd --get-services firewall-cmd --info-service=http
HTTP, HTTPS, SSH처럼 firewalld에 정의된 서비스는 개별 포트보다 서비스 이름으로 허용하는 편이 의도가 명확합니다.
서비스를 런타임에 허용하기
sudo firewall-cmd --zone=public --add-service=http sudo firewall-cmd --zone=public --add-service=https
서비스가 실제로 해당 포트에서 수신 중인지도 확인합니다.
ss -lntup
허용한 서비스 제거하기
sudo firewall-cmd --zone=public --remove-service=http
원격 SSH 관리 중이라면 SSH 서비스를 제거하기 전에 콘솔 복구 수단과 다른 허용 규칙이 있는지 확인하세요.
사용자 지정 포트 관리하기
TCP 또는 UDP 포트 허용하기
sudo firewall-cmd --zone=public --add-port=8443/tcp sudo firewall-cmd --zone=public --add-port=5000/udp
TCP와 UDP는 별도 규칙입니다. 애플리케이션 문서에서 실제 프로토콜과 포트를 확인하고 필요한 것만 여세요.
범위 허용하기
sudo firewall-cmd --zone=public --add-port=6000-6010/tcp
넓은 범위를 열기 전에 애플리케이션이 실제로 필요한 범위를 확인하고, 가능하면 원본 주소도 제한하세요.
포트 제거하고 확인하기
sudo firewall-cmd --zone=public --remove-port=8443/tcp sudo firewall-cmd --zone=public --list-ports
현재 규칙 확인하기
sudo firewall-cmd --zone=public --list-all sudo firewall-cmd --list-all-zones sudo firewall-cmd --permanent --zone=public --list-all
런타임 출력과 --permanent 출력이 다르면 다음 reload 또는 재부팅 후 동작이 달라질 수 있습니다. 변경 작업을 마치기 전에 두 구성을 비교하세요.
특정 원본 주소만 허용하기
rich rule로 SSH 원본 제한하기
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.0.2.10/32" service name="ssh" accept'
192.0.2.10은 문서용 예시 주소입니다. 실제 관리자의 고정된 공인 IP 또는 안전한 내부망 범위로 바꾸세요.
일반 SSH 허용 제거 전 시험하기
새 규칙을 추가한 뒤 다른 터미널에서 새 SSH 연결을 시험하고, 콘솔 복구 수단을 확인한 다음에만 넓은 SSH 허용 규칙을 제거합니다.
sudo firewall-cmd --zone=public --list-rich-rules sudo firewall-cmd --zone=public --remove-service=ssh
관리자 IP가 동적으로 바뀌는 환경에서는 원본 제한 때문에 잠길 수 있습니다. 고정 IP, VPN 또는 전용 관리 네트워크를 고려하세요.
네트워크 인터페이스와 영역 연결하기
nmcli connection show --active firewall-cmd --get-active-zones
NetworkManager 연결 프로필의 zone을 지정하면 네트워크 연결과 firewalld 영역을 일관되게 관리할 수 있습니다.
sudo nmcli connection modify 'System eth0' connection.zone public sudo nmcli connection up 'System eth0'
연결 이름은 환경마다 다릅니다. 원격 네트워크 프로필을 다시 활성화하면 접속이 끊길 수 있으므로 콘솔을 확보하고 유지보수 시간에 적용하세요.
문제가 생겼을 때 확인할 순서
systemctl is-active firewalld로 서비스 상태를 확인합니다.firewall-cmd --get-active-zones로 인터페이스가 속한 영역을 확인합니다.- 런타임과 영구 설정의
--list-all결과를 비교합니다. ss -lntup로 애플리케이션이 실제 주소와 포트에서 수신하는지 확인합니다.- 클라우드 보안 그룹, 라우터 ACL과 NAT 규칙을 확인합니다.
- SELinux 차단 여부와 애플리케이션 로그를 확인합니다.
방화벽에서 포트를 열어도 프로그램이 실행 중이 아니거나 루프백 주소에만 바인딩되어 있으면 외부에서 연결할 수 없습니다.
자주 묻는 질문
--permanent를 붙였는데 바로 연결되지 않습니다
영구 설정은 보통 reload 후 런타임에 반영됩니다. 현재 연결을 보호해야 한다면 런타임 규칙으로 먼저 시험하고 저장하는 방식을 사용하세요.
포트를 열었는데 외부에서 접속할 수 없습니다
활성 영역, 서비스 수신 주소, 클라우드 방화벽, NAT와 SELinux를 함께 확인해야 합니다. firewalld는 통신 경로 중 한 계층입니다.
서비스와 포트 중 어느 방식이 좋나요?
정의된 표준 서비스가 있다면 서비스 이름이 더 읽기 쉽습니다. 사용자 지정 포트나 별도 애플리케이션은 프로토콜을 명시한 포트 규칙을 사용합니다.
firewalld를 중지해도 되나요?
문제 확인을 위해서도 운영 서버에서 방화벽 전체를 중지하는 것은 위험합니다. 로그와 현재 규칙을 확인하고 필요한 범위만 임시로 조정하세요.
정리
firewalld 설정은 활성 영역을 확인하고, 런타임 규칙으로 시험한 뒤 --runtime-to-permanent로 저장하는 흐름이 안전합니다. 표준 서비스는 서비스 이름으로, 사용자 지정 포트는 TCP·UDP를 구분해 최소 범위만 허용하세요.
원격 SSH 환경에서는 기존 세션과 콘솔 복구 수단을 유지하고 새 연결이 성공한 뒤 규칙을 좁히는 것이 가장 중요합니다.









