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'

연결 이름은 환경마다 다릅니다. 원격 네트워크 프로필을 다시 활성화하면 접속이 끊길 수 있으므로 콘솔을 확보하고 유지보수 시간에 적용하세요.

문제가 생겼을 때 확인할 순서

  1. systemctl is-active firewalld로 서비스 상태를 확인합니다.
  2. firewall-cmd --get-active-zones로 인터페이스가 속한 영역을 확인합니다.
  3. 런타임과 영구 설정의 --list-all 결과를 비교합니다.
  4. ss -lntup로 애플리케이션이 실제 주소와 포트에서 수신하는지 확인합니다.
  5. 클라우드 보안 그룹, 라우터 ACL과 NAT 규칙을 확인합니다.
  6. SELinux 차단 여부와 애플리케이션 로그를 확인합니다.

방화벽에서 포트를 열어도 프로그램이 실행 중이 아니거나 루프백 주소에만 바인딩되어 있으면 외부에서 연결할 수 없습니다.

자주 묻는 질문

--permanent를 붙였는데 바로 연결되지 않습니다

영구 설정은 보통 reload 후 런타임에 반영됩니다. 현재 연결을 보호해야 한다면 런타임 규칙으로 먼저 시험하고 저장하는 방식을 사용하세요.

포트를 열었는데 외부에서 접속할 수 없습니다

활성 영역, 서비스 수신 주소, 클라우드 방화벽, NAT와 SELinux를 함께 확인해야 합니다. firewalld는 통신 경로 중 한 계층입니다.

서비스와 포트 중 어느 방식이 좋나요?

정의된 표준 서비스가 있다면 서비스 이름이 더 읽기 쉽습니다. 사용자 지정 포트나 별도 애플리케이션은 프로토콜을 명시한 포트 규칙을 사용합니다.

firewalld를 중지해도 되나요?

문제 확인을 위해서도 운영 서버에서 방화벽 전체를 중지하는 것은 위험합니다. 로그와 현재 규칙을 확인하고 필요한 범위만 임시로 조정하세요.

정리

firewalld 설정은 활성 영역을 확인하고, 런타임 규칙으로 시험한 뒤 --runtime-to-permanent로 저장하는 흐름이 안전합니다. 표준 서비스는 서비스 이름으로, 사용자 지정 포트는 TCP·UDP를 구분해 최소 범위만 허용하세요.

원격 SSH 환경에서는 기존 세션과 콘솔 복구 수단을 유지하고 새 연결이 성공한 뒤 규칙을 좁히는 것이 가장 중요합니다.

같은 카테고리의 다른 글
Rocky Linux / DNF 사용법

Rocky Linux / DNF 사용법

Rocky Linux의 DNF로 패키지를 검색·설치·업데이트·삭제하는 방법을 설명합니다. 저장소, 거래 이력, 캐시와 안전한 운영 요령도 함께 정리합니다.

Rocky Linux / SELinux 끄는 방법

Rocky Linux / SELinux 끄는 방법

Rocky Linux의 SELinux 상태와 모드를 확인하고 차단 원인을 해결하는 방법을 설명합니다. Permissive 전환, 정책 조정과 완전 비활성화 시 주의점도 정리합니다.

Rocky Linux / IP 설정하는 방법

Rocky Linux / IP 설정하는 방법

Rocky Linux에서 nmcli로 고정 IP와 DHCP, DNS, IPv6 연결 프로필을 설정하는 방법을 설명합니다. 원격 변경 전 주의점과 확인 명령도 함께 정리합니다.

Rocky Linux / MariaDB 설치하는 방법

Rocky Linux / MariaDB 설치하는 방법

Rocky Linux에 MariaDB를 설치하고 초기 보안을 설정하는 방법을 설명합니다. 최소 권한 계정, 원격 수신 주소, 방화벽 원본 제한과 TLS 점검 사항도 정리합니다.

Rocky Linux / 언어 변경하는 방법

Rocky Linux / 언어 변경하는 방법

Rocky Linux에서 localectl과 언어 팩으로 시스템 로케일을 확인·변경하는 방법을 설명합니다. 세션별 변경, LANG·LC_* 우선순위와 한글 깨짐 점검도 정리합니다.

Rocky Linux / Memo

Rocky Linux / Memo

Rocky Linux와 관련된 잡다한 정보를 정리합니다.

Rocky Linux / 호스트네임 변경하는 방법

Rocky Linux / 호스트네임 변경하는 방법

Rocky Linux에서 hostnamectl로 호스트네임을 변경하고 결과를 확인하는 방법을 설명합니다. 이름 해석과 서비스 재시작이 필요한 경우도 함께 살펴봅니다.

Rocky Linux / 설치된 패키지 확인하는 방법

Rocky Linux / 설치된 패키지 확인하는 방법

Rocky Linux에서 설치된 패키지를 DNF와 RPM으로 확인하는 방법을 설명합니다. 전체 목록, 특정 파일의 소유 패키지, 설치 시각과 변경 검증 방법도 정리합니다.

Rocky Linux / GUI 환경 만드는 방법

Rocky Linux / GUI 환경 만드는 방법

Rocky Linux에 GNOME GUI를 설치하고 그래픽 부팅을 설정하는 방법을 설명합니다. Rocky Linux 8·9의 XRDP와 Rocky Linux 10의 GNOME 원격 데스크톱 차이도 정리합니다.

Rocky Linux / 방화벽 관리하는 방법

Rocky Linux / 방화벽 관리하는 방법

Rocky Linux firewalld에서 영역, 서비스와 포트를 확인·관리하는 방법을 설명합니다. 런타임 시험 후 영구 저장하고 원본 주소를 제한하는 안전한 절차를 정리합니다.