firewall-cmd –reload
를 실행하거나 시스템을 재부팅하면 예전 정책으로 다시 초기화 되며 이로 인해 서비스의 장애가 발생할 수 있습니다.–permanent
옵션을 추가해서 실행하면 되지만 이는 즉시 적용되지 않고 firewall-cmd –reload
명령어로 방화벽 정책을 재구동하거나 재부팅을 하기 전에는 변경한 방화벽 설정이 적용되지 않습니다.firewall-cmd | firewall-cmd –permanent | |
---|---|---|
즉시 적용(firewall-cmd –reload 불필요) | 예 | 아니요 |
재부팅시 정책의 지속 여부 | 아니오 | 예 |
fireall-cmd
로 정책을 추가했을 경우 즉시 반영되지만 만약 잘못된 설정이었을 경우에 firewall-cmd –reload
명령어를 실행하면 예전 정책으로 복구됩니다.firewall-cmd –permanent
로 정책을 추가했을 경우 firewall-cmd –reload
명령어를 실행해야 변경한 정책이 적용되며 예전 정책으로 복구하려면 새로 추가한 정책을 삭제하고 다시 방화벽을 구동해야 합니다.#방화벽 실행 확인(실행중이면 running, 실행중이 아니면 not running으로 표시) [root@dns ~] firewall-cmd --state # 현재상태 확인 #not running일 경우 방화벽 실행 [root@dns ~] systemctl enable firewalld # 부팅 후에도 서비스가 자동으로 시작되게 설정한다. [root@dns ~] systemctl start firewalld # firewalld를 시작한다.
[root@dns ~] yum install firewalld # 설치 [root@dns ~] systemctl start firewalld # 시작 [root@dns ~] systemctl enable firewalld # 부팅 후에도 서비스가 자동으로 시작되게 설정한다.
#IP 허용 [root@dns ~] firewall-cmd --permanent --add-source=10.10.10.10 #IP 허용 제거 [root@dns ~] firewall-cmd --permanent --remove-source=10.10.10.10
#IP 대역 허용 [root@dns ~] firewall-cmd --permanent --add-source=10.10.10.0/24 #IP 대역 허용 제거 [root@dns ~] firewall-cmd --permanent --remove-source=10.10.10.0/24
/24
는 해당 IP의 마지막까지 대역을 설정한다는 의미로, 위 코드를 예를 들면 10.10.10.0
에서 10.10.10.255
까지를 의미한다.#서비스 포트 허용 [root@dns ~] firewall-cmd --permanent --add-port=80/tcp #서비스 포트 허용 제거 [root@dns ~] firewall-cmd --permanent --remove-port=80/tcp
#서비스 포트 범위 허용 [root@dns ~] firewall-cmd --permanent --add-port=1000-2000/tcp #서비스 포트 범위 허용 제거 [root@dns ~] firewall-cmd --permanent --remove-port=1000-2000/tcp
#IP에 대해 서비스 포트 허용 [root@dns ~] firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address=10.10.10.10 port port="80" protocol="tcp" accept' #IP에 대한 서비스 포트 허용 제거 [root@dns ~] firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address=10.10.10.10 port port="80" protocol="tcp" accept'
#IP 차단 [root@dns ~] firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address=10.10.10.10 drop' #IP 차단 제거 [root@dns ~] firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address=10.10.10.10 drop'
#방화벽 Rule 변경 내역 적용 [root@dns ~] firewall-cmd --reload #방화벽 Rule 리스트 확인 [root@dns ~] firewall-cmd --list-all
–get-zones
옵션을 주고 실행하면 됩니다.[root@dns ~] sudo firewall-cmd --get-zones work drop internal external trusted home dmz public block
–list-all-zones
옵션으로 사전 정의된 zone에 대한 자세한 정보를 볼 수 있습니다.
[root@dns ~] sudo firewall-cmd --list-all-zones dmz target: default icmp-block-inversion: no interfaces: sources: services: ssh ports: protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules: internal target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client mdns samba-client ssh ports: protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules:
dmz
는 ssh를, internal
은 dhcpv6-client, mdns 등을 허용하는 것을 알 수 있습니다.–get-active-zone
옵션을 실행하면 되며 현재 활성화된 zone은 public
인 것을 알 수 있습니다.(default)
[root@dns ~] firewall-cmd --get-active-zone public interfaces: eno0
–list-all
옵션을 사용하면 됩니다. 아래는 현재 활성화된 존이 dmz
이고 10022 등의 port가 열려 있음을 표시합니다.[root@dns ~] sudo firewall-cmd --list-all dmz (active) target: default icmp-block-inversion: no interfaces: enp5s0f0 enp5s0f1 sources: services: ssh http https ports: 10022/tcp 2120-2121/tcp 20/tcp 2120-2142/tcp 10000/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
–set-default-zone={ZONE_NAME}
옵션을 사용하여 변경해주면 되며 다음은 dmz
로 변경하는 예제입니다.[root@dns ~] firewall-cmd --set-default-zone=dmz
–new-zone
옵션을 사용하여 새로 zone을 만들면 됩니다. 아래는 webserver라는 이름의 새로운 존을 만드는 예제입니다.[root@dns ~] firewall-cmd --permanent --new-zone=webserver
–reload
을 주어서 변경된 내역을 firewalld에 반영할 수 있습니다.[root@dns ~] firewall-cmd --get-services RH-Satellite-6 RH-Satellite-6-capsule 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
–add-service=SERVICENAME
구문으로 서비스를 추가해 줍니다. –add-service
는 여러개의 서비스를 동시에 기술할 수 없으므로 http와 https를 따로 기술해 줍니다.[root@dns ~] firewall-cmd --permanent --zone=webserver --add-service=http [root@dns ~] firewall-cmd --permanent --zone=webserver --add-service=httpㄴ
–remove-service=SERVICENAME
구문을 사용합니다. 아래는 http/https 서비스를 삭제합니다.[root@dns ~] firewall-cmd --permanent --zone=webserver --remove-service=http [root@dns ~] firewall-cmd --permanent --zone=webserver --remove-service=https
firewall-cmd --state # 방화벽 상태 확인 firewall-cmd --get-zones # 모든 Zone 출력 firewall-cmd --get-default-zone # 현재 적용된 Zone 출력 firewall-cmd --list-all # 사용 가능한 서비스/포트 출력 firewall-cmd --reload # 방화벽 리로드
[root@dns ~] systemctl unmask firewalld