firewalld 사용법 요약
firewalld 사용법 요약입니다. zone, service, port, runtime/permanent 차이, rich rule, 삭제와 검증, 문제 해결 순서를 정리했습니다.
firewalld는 Linux에서 동적으로 방화벽 정책을 관리하는 서비스입니다. zone, service, port, rich rule을 이용해 규칙을 구성하고, runtime 설정과 permanent 설정을 분리한다는 점이 핵심입니다.
상태 확인
sudo systemctl status firewalld --no-pager
sudo firewall-cmd --state
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --list-all
active zone은 인터페이스나 source CIDR에 연결된 현재 적용 zone입니다. default zone과 active zone이 다를 수 있으므로 둘을 구분합니다.
runtime과 permanent
sudo firewall-cmd --add-service=http
sudo firewall-cmd --list-services
sudo firewall-cmd --reload
위처럼 --permanent 없이 추가한 runtime 규칙은 reload/restart 후 사라질 수 있습니다. 운영 반영은 보통 permanent에 넣고 reload합니다.
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-services
포트 직접 허용
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports
가능하면 잘 알려진 서비스는 --add-service를 사용하고, 애플리케이션 특수 포트만 --add-port로 관리합니다.
zone 지정
sudo firewall-cmd --zone=public --list-all
sudo firewall-cmd --zone=public --permanent --add-service=ssh
sudo firewall-cmd --zone=internal --permanent --add-source=192.168.10.0/24
sudo firewall-cmd --reload
NetworkManager가 관리하는 인터페이스는 zone 설정이 connection profile과 연동될 수 있습니다. 재부팅 후 zone이 바뀌면 NetworkManager connection 설정도 확인합니다.
삭제와 검증
sudo firewall-cmd --permanent --remove-port=8080/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --query-port=8080/tcp
sudo firewall-cmd --query-service=http
rich rule 예시
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10" service name="ssh" accept'
sudo firewall-cmd --reload
sudo firewall-cmd --list-rich-rules
SSH를 공인망 전체에 열지 말아야 하는 서버에서는 source 제한 rule을 사용합니다. 단, 원격에서 방화벽을 바꿀 때는 접속이 끊겼을 경우의 console 접근이나 rollback 방법을 확보합니다.
문제 해결 순서
- 서비스가 실제 listen 중인지
ss -lntp로 확인합니다. - 해당 인터페이스가 어떤 zone에 속했는지 확인합니다.
- runtime과 permanent 중 어디에 규칙을 넣었는지 확인합니다.
- 외부에서 접근할 때는 상위 방화벽/NAT/security group도 확인합니다.
- 변경 후에는
--query-*와 실제 접속 테스트를 같이 수행합니다.