# 사전에 정의된 zone 확인
[root@server2 ~]# firewall-cmd --get-zones
block dmz drop external home internal nm-shared public trusted work
# 활성화된 zone 확인
[root@server2 ~]# firewall-cmd --get-active-zones
public
interfaces: eth1 eth0
# 기본 영역 확인(기본 값 :public)
firewall-cmd --get-default-zone
# 기본 영역 설정
firewall-cmd --set-default-zone=<zonename>
# zone에 interface 추가
firewall-cmd --add-interface=<interface> --zone=<zonename>
# 변경
firewall-cmd --change-interface=<interface> --zone=<zonename>
# 사전에 정의된 서비스 확인
firewall-cmd --get-services
# 서비스 추가
firewall-cmd --add-service=<servicename> --zone=<zonename>
# 제거
firewall-cmd --remove-service=<servicename> --zone=<zonename>

# server2의 ssh 서비스를 삭제하여 ssh접근 차단
firewall-cmd --remove-service=ssh
# 원상복귀
firewall-cmd --add-service=ssh

사전에 정의된 서비스 뿐만 아닐라 포트나 프로토콜을 직접 지정하여 규칙을 생성할 수 있다.
# port rule add
firewall-cmd --add-port=<port>/<protocol> --zone=<zonename>
# port rule remove
firewall-cmd --remove-port=<port>/<protocol> --zone=<zonename>
프로토콜 규칙에서의 프로토콜은 포트규칙의 TCP/UDP와 달리 통신 규약 프로토콜 자체를 의미(/etc/protocols에서 확인가능)
# protocol rule add
firewall-cmd --add-protocol=<protocol> --zome=<zonename>
# protocol rule remove
firewall-cmd --remove-protocol=<protocol> --zome=<zonename>
외부 네트워크에서 접속할 때 시스템에서 연결을 중계하여 같은 시스템의 다른 포트로 연결하는 것
# port forwarding add
firewall-cmd --add-forward-port=<port-Forwarding-rule> [--zone] [--permanent]
# port forwarding remove
firewall-cmd --remove-forward-port=<port-Forwarding-rule> [--zone] [--permanent]
# 80/tcp 접속을 192.168.10.10:22로 중계
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=22:toaddr=192.168.10.10
firewalld에서 세부적인 규칙을 설정할 때 사용 특정 이벤트 발생 시 해당 이벤트에 대한 로그(syslog), audit 기록을 생성할 수도 있다.
# rich rule add
firewall-cmd --add-rich-rule='rule RULE'
# rich rule remove
firewall-cmd --remove-rich-rule='rule RULE'
# rich rule check
firewall-cmd --list-rich-rule
rich rule은 자동완성 기능이 제공되지 않아 문법을 숙지해야한다.
| 옵션 | 설명 | 사용 |
|---|---|---|
| family | IP 패킷의 패밀리 지정(ipv4 또는 ipv6) | family="ipv4" |
| source | 출발지 주소 지정 | source address="192.168.1.1" |
| destination | 목적지 주소 지정 | destination address="10.0.0.1" |
| service | 서비스 이름 또는 포트 번호 지정 | service name="http" |
| port | 포트 번호 지정 | port port="80" protocol="tcp" |
| protocol | 프로토콜 지정 (tcp, udp, icmp) | protocol="tcp" |
| action | 규칙의 행동을 지정(accept, reject, drop) | action="accept" |
| log | 패킷 로깅 | log prefix="Firewall", level='PRIORITY' |
| audit | audit log 기록 | audit |
| forward-port | 포트 포워딩 | forward-port port="80:proto=tcp:toport=8080" |

# server2에서 192.168.10.30을 제외한 모든 접속 차단
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source not address="192.168.10.30" reject"



ip가 192.168.10.20로 설정된 server2로 ssh 접속하면 192.168.10.10 ip를 가진 server1로 redirection 되도록 port forwarding
# 80번 포트를 통해 server2로 접속 요청 시에 192.168.10.10:22로 redirection 되도록 port forwarding
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=22:toaddr=192.168.10.10
# rich rule 방식
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" forward-port port="80" protocol="tcp" to-port="22" to-addr="192.168.10.10"'
# masquerade를 활성화
firewall-cmd --add-masquerade
server3 에서 192.168.10.20:80으로 ssh 접근하여 192.168.10.10 ip를 가진 server1로 redirection 되는 것을 확인
