[CentOS7] firewalld(방화벽) 사용하기
1. firewalld란?
iptables 는 숙련된 관리자가 아니면 사용이 어려운 단점이 있었는데 이런 문제를 해결하고자 RHEL/CentOS 7 부터는 방화벽을 firewalld 라는 데몬으로 교체하였고 이에 따라 사용자 레벨의 프로그램은 iptables 명령어 대신 CLI에서는 firewall-cmd , GUI 환경에서는 firewall-config 를 사용
2. firewalld 적용
- 기본적으로 firewall-cmd command로 변경했을 경우, 즉시 적용은 되지만 지속성은 없음
- 정책을 영구적으로 적용하기 위해서는 --permanent 옵션을 추가해서 실행하여야 함. 하지만 이 옵션을 주게되면 바로 적용은 되지 않음
- 바로 적용하기 위해서는 --reload 명령어로 방화벽 정책을 재구동하거나 서버를 재부팅해야 함
→ firewall-cmd로 정책을 추가했는데 원복이 필요한 경우, firewall-cmd --reload를 수행하면 예전 정책으로 복구됨
→ firewall-cmd --permanent로 정책을 추가했는데 원복이 필요한 경우, 새로 추가한 정책은 --permanent 옵션으로 삭제하고 firewall-cmd --reload를 수행해야 예전 정책으로 복구됨
※ 만약 방화벽 정책 변경시 즉시 반영하고 재부팅시에도 유지되도록 하고 싶으면 firewall-cmd 를 두 번 호출하면 되며 한 번은 --permanet 옵션을 주고 한 번은 옵션을 빼면 됨
3. firewalld 옵션
command | 내용 | 비고 |
--reload | 방화벽 정책 재시작 | |
--get-zones | 현재 설정된 zones 목록 | |
--list-all-zones | 현재 설정된 zones에 대한 자세한 정보 | |
--get-active-zone | 현재 활성화된 zones 목록 | |
--list-all | 현재 활성화된 zone 정보 | |
--set-default-zone=[zone명] | 기본 zone 변경 | |
--change-interface=[인터페이스명] | 인터페이스가 사용할 zone 지정 | 이 command는 앞에 --zone=[zone명]을 붙여서 적용될 zone을 지정해줘야 함 |
--new-zone=[zone명] | 새로운 zone을 생성 | |
--get-services | 현재 정의된 services 확인 | |
--list-services | 현재 zone에서 사용 중인 services 확인 | |
--add-service=[서비스명] | zone에 service 추가 | 이 command는 앞에 --zone=[zone명]을 붙여서 적용될 zone을 지정해줘야 함 ※ 여러 service 추가가 필요할 경우, 하나씩 따로 추가해줘야함 |
--remove-service=[서비스명] | zone에서 servceic 삭제 | |
--add-port=[포트,포트대역/프로토콜] | zone에 port 추가 | 이 command는 앞에 --zone=[zone명]을 붙여서 적용될 zone을 지정해줘야 함 ※ 포트 추가/변경에 대해서는 --reload 옵션으로 재실행해야만 반영 |
--remove-port=[포트,포트대역/프로토콜] | zone에서 port 삭제 |
4. firewall 사용 예제
> 현재 설정된 zone 목록 보기
# firewall-cmd --get-zones block dmz drop external home internal public trusted work |
> 현재 활성화된 zone 보기
# firewall-cmd --get-active-zone public interfaces: eth0 |
> zone이 적용되는 인터페이스 변경하기
# firewall-cmd --zone=dmz --change-interface=eth1 |
> 현재 정의된 services 목록
# firewall-cmd --get-services RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server |
> 포트 추가
# firewall-cmd --permanent --zone=webserver --add-port=9090-9100/tcp |