서버/호스팅
RHEL 7 부터 방화벽을 관리하는 데몬이 firewalld 로 변경되었습니다.
방화벽 설정은 복잡한 iptables 명령어대신 firewall-cmd (콘솔), firewall-config(X-Windows) 명령어를 사용하는 것을 권장합니다.
firewalld는 iptables 를 대체하는 것이 아니라 iptables를 쓰기 쉽게 하는 wrapper입니다.
복잡한 규칙을 사용할 경우 --direct 옵션으로 iptables 내부에 직접 접근할 수 있습니다.
1. firewalld 실행 확인
firewalld 데몬상태를 보거나
systemctl status firewalld
firewall 상태를 보면 알 수 있습니다.
firewall-cmd --state
2. 설치 및 부팅시 실행
yum install firewalld
systemctl start firewalld
systemctl enable firewalld
3. 설정파일 변경시 재시작
firewall-cmd --reload
포트 추가/변경, IP 추가/변경는 --reload 옵션을 실행해야 반영됩니다.
4. 설정
firewalld 설정은 xml파일로 합니다.
특별한 경우가 아니면 대부분 'firewall-cmd' 명령어로 설정을 변경할 수 있습니다.
firewalld 설정 파일은 2곳에 위치하고 있습니다.
- /usr/lib/firewalld/ : default 설정파일들이 있습니다. 이곳의 파일은 수정하지 마십시오. 패키지 업데이트시 덮어쓰기 때문에 변경한 설정이 초기화됩니다.
- /etc/firewalld/ : 시스템설정 파일을 저장합니다. default 설정을 overwrite하기 때문에 이곳에 있는 파일이 실제 적용됩니다.
firewall-cmd명령어로 설정을 변경시 --permanent 옵션을 추가해주어야 시스템 리부팅 또는 firewall reload시 계속 적용됩니다.
permanent set :
sudo firewall-cmd --zone=public --add-service=http --permanent
runtime set :
sudo firewall-cmd --zone=public --add-service=http
5. firewall zones
존은 네트워크의 신뢰 레벨에 따라 사전에 룰셋을 만들어 놓은 것입니다.
보통의 경우(웹서버 용도) public을 default로 사용합니다.
존은 다른 네트워크 인터페이스에 적용할 수 있습니다.
예를 들어 내부 네트워크와 인터넷을 분리할 경우 internal zone에서 DHCP만 허용하고, external zone에서 HTTP와 SSH만 허용할 수 있습니다.
사전 정의된 존 목록 출력
firewall-cmd --get-zones
전체 존 목록을 상세하게 출력
firewall-cmd --list-all-zones
default 로 설정된 존 출력
firewall-cmd --get-default-zone
활성화된 존 출력(네트워크 인터페이스에서 사용하는)
firewall-cmd --get-active-zone
default zone 변경
firewall-cmd --set-default-zone=internal
6. Service 작업
제공되는 기본 설정 파일은 /usr/liv/firewalld/services 에 위치하고 있습니다.
사용자가 생성한 설정파일은 /etc.firewalld/services 에 저장합니다.
사전에 정의된(default) 서비스 목록은 아래 명령어로 알 수 있습니다.
firewall-cmd --get-services
예를들어 HTTP 서비스를 활성화(--add-service), 비활성화(--remove-service)는 아래와 같이 합니다.
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --remove-service=http --permanent
임의의 포트/프로토콜 허용(--add-port), 제거(--remove-port)
firewall-cmd --zone=public --add-port=12345/tcp --permanent
firewall-cmd --zone=public --remove-port=12345/tcp --permanent
7. Rich Rules
보다 복잡한 규칙 설정이 필요할 때,
firewall-cmd에서 옵션을 제공하지 않을 경우 rich rule 언어를 사용하여 직접 방화벽 규칙을 설정할 수 있습니다.
(--add-rich-rule, --list-rich-rules, --remove-rich-rule)
IP 192.168.0.10의 ipv4 모든 트래픽 허용
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.10 accept'
IP 192.168.0.10의 ipv4 모든 트래픽 차단
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.10 drop'
8. Direct
--direct 옵션을 사용하여 iptables에 직접 접근할 수 있습니다.
Direct rules는 Rich rules사용이 불가능한 경우 등 마지막에 사용하는 수단입니다.