목차

1. firewalld 란


영구적 규칙과 정책 재구동

firewall-cmd firewall-cmd –permanent
즉시 적용(firewall-cmd –reload 불필요) 아니요
재부팅시 정책의 지속 여부 아니오

2. 구동상태 확인

방화벽 실행 중인지 확인

#방화벽 실행 확인(실행중이면 running, 실행중이 아니면 not running으로 표시)
[root@dns ~] firewall-cmd --state # 현재상태 확인
 
#not running일 경우 방화벽 실행
[root@dns ~] systemctl enable firewalld # 부팅 후에도 서비스가 자동으로 시작되게 설정한다.
[root@dns ~] systemctl start firewalld # firewalld를 시작한다.

3. 설치

[root@dns ~] yum install firewalld # 설치
[root@dns ~] systemctl start firewalld # 시작
[root@dns ~] systemctl enable firewalld # 부팅 후에도 서비스가 자동으로 시작되게 설정한다.

4. 특정 IP 및 포트만 허용하는 방법

IP 허용

#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대역 허용

#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

서비스 포트 허용

#서비스 포트 허용
[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에 대해 서비스 포트 허용

#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 차단

#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 적용

#방화벽 Rule 변경 내역 적용
[root@dns ~] firewall-cmd --reload
 
#방화벽 Rule 리스트 확인
[root@dns ~] firewall-cmd --list-all

5. Network Zone

[root@dns ~] sudo firewall-cmd --get-zones
 
work drop internal external trusted home dmz public block



[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:



[root@dns ~] firewall-cmd --get-active-zone
 
public
interfaces: eno0


존 설정 정보 보기(--list-all)

[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:


기본 존 바꾸기

[root@dns ~] firewall-cmd --set-default-zone=dmz


존 만들기

[root@dns ~] firewall-cmd --permanent --new-zone=webserver

6. 사전 정의 서비스

사전 정의된 서비스 확인

[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

서비스 추가

[root@dns ~] firewall-cmd --permanent --zone=webserver --add-service=http
[root@dns ~] firewall-cmd --permanent --zone=webserver --add-service=httpㄴ

서비스 삭제

[root@dns ~] firewall-cmd --permanent --zone=webserver --remove-service=http
[root@dns ~] firewall-cmd --permanent --zone=webserver --remove-service=https

Tip

유용한 명령어

firewall-cmd --state # 방화벽 상태 확인
 
firewall-cmd --get-zones # 모든 Zone 출력
 
firewall-cmd --get-default-zone # 현재 적용된 Zone 출력
 
firewall-cmd --list-all # 사용 가능한 서비스/포트 출력
 
firewall-cmd --reload # 방화벽 리로드

Troubleshooting

Failed to restart firewalld.service: Unit is masked. 에러

[root@dns ~] systemctl unmask firewalld

Ref