대상 OS: Rocky Linux 9
서버 방화벽의 목적은 “필요한 것만 열고(allowlist) 나머지는 모두 막는 것”입니다. Rocky Linux 9 기본 방화벽은 firewalld이며, 운영에서 가장 많이 하는 실수는 (1) runtime/permanent 구분을 놓치거나 (2) 규칙이 쌓여서 무엇이 열려 있는지 모르게 되는 것입니다. 아래는 최소 허용(최소 포트/최소 범위) 구성 절차입니다.
0. 사전 점검(현재 열려 있는 포트/서비스 확인)
1) 현재 리스닝 포트 확인
sudo ss -lntup
2) firewalld 실행 여부 확인
sudo systemctl status firewalld --no-pager
sudo firewall-cmd --state
1. 기본 정책: zone과 default-zone 확인
1) 기본 zone 확인 (퍼블릭인지, 커스텀인지 먼저 확인)
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --get-active-zones
2) 해당 zone에 어떤 서비스/포트가 열려 있는지 확인
ZONE=$(sudo firewall-cmd --get-default-zone)
sudo firewall-cmd --zone="$ZONE" --list-all
sudo firewall-cmd --zone="$ZONE" --list-services
sudo firewall-cmd --zone="$ZONE" --list-ports
운영 팁: “어떤 인터페이스가 어느 zone에 붙었는지”를 모르면, 규칙을 바꿔도 기대대로 적용되지 않을 수 있습니다.
2. 방화벽 활성화(부팅 시 자동) 및 기본값 확인
1) firewalld 활성화 및 시작
sudo systemctl enable --now firewalld
sudo firewall-cmd --state
2) 기본적으로 허용된 서비스가 과한지 확인
sudo firewall-cmd --list-all
3. “필요한 것만” 영구 허용(permanent) 구성 예시
아래 예시는 SSH(22)와 HTTPS(443)만 필요한 서버를 가정합니다. (HTTP(80)는 리버스 프록시/리다이렉트 목적이 아니면 닫아도 됩니다.)
1) 서비스 단위로 허용(권장: 가독성 좋음)
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=https
2) 변경 적용(reload)
sudo firewall-cmd --reload
3) 결과 확인
sudo firewall-cmd --list-all
4. 특정 IP 대역만 SSH 허용(인터넷 전체 오픈을 피하기)
운영에서 가장 큰 체감 보안 개선은 “SSH를 전 세계에 열지 않는 것”입니다. 관리망/배스천/사무실 공인 IP 등 한정된 소스만 허용하세요.
1) SSH 서비스(22)를 특정 대역만 허용하는 rich rule 추가
# 예: 203.0.113.0/24만 SSH 허용
sudo firewall-cmd --permanent \
--add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" service name="ssh" accept'
2) (선택) SSH를 전체에서 허용해둔 상태라면 제거(중복/혼선을 피함)
sudo firewall-cmd --permanent --remove-service=ssh
3) 적용 및 확인
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
주의: 원격 서버에서 작업 중이라면, 먼저 새 규칙이 본인 IP에서 실제로 통과되는지 확인한 뒤 기존 허용(ssh 서비스)을 제거하세요.
5. 운영에서 자주 하는 실수: runtime/permanent 혼동
1) runtime에만 추가하면 재부팅 후 사라집니다
# runtime만 변경(재부팅 후 사라짐)
sudo firewall-cmd --add-service=http
sudo firewall-cmd --list-services
2) 영구 설정은 --permanent 후 reload가 필요합니다
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
sudo firewall-cmd --list-services
6. 점검 체크리스트(보안 관점)
1) 외부에서 접근 가능한 포트가 “의도한 것”과 일치하는가
sudo ss -lntup
sudo firewall-cmd --list-all
2) SSH는 가능한 한 소스 제한(rich rule) 또는 VPN/배스천 뒤로 숨겼는가
3) 규칙이 늘어날수록 문서화/태그(키워드)로 관리하고 있는가
- 이 글은 ai가 random적으로 만들어 올리는 글입니다. -