Korea Digital Contents Society
[ Article ]
Journal of Digital Contents Society - Vol. 21, No. 3, pp.561-567
ISSN: 1598-2009 (Print) 2287-738X (Online)
Print publication date 31 Mar 2020
Received 07 Jan 2020 Revised 15 Mar 2020 Accepted 25 Mar 2020
DOI: https://doi.org/10.9728/dcs.2020.21.3.561

Firewalld 기반의 리눅스 방화벽 분석

성경
목원대학교 융합컴퓨터미디어학부 교수
Analysis of Linux firewall based on Firewalld
Kyung Sung
Professor, Division of Convergence Computer & Media, Mokwon University, Daejeon 35349, Korea

Correspondence to: *Kyung Sung Tel: +82-42-829-7643 E-mail: skyys04@mokwon.ac.kr

Copyright ⓒ 2020 The Digital Contents Society
This is an Open Access article distributed under the terms of the Creative Commons Attribution Non-CommercialLicense(http://creativecommons.org/licenses/by-nc/3.0/) which permits unrestricted non-commercial use, distribution, and reproduction in any medium, provided the original work is properly cited.

초록

서버 분야에서 공개 소프트웨어인 리눅스 운영체제가 대세로 자리 잡으면서 보안의 핵심인 리눅스 기반 방화벽의 활용도 증가하는 추세이다. 현재 리눅스 방화벽의 핵심은 넷필터(netfilter) 프로젝트에서 만든 iptables가 리눅스 커널 버전 2.4 이후부터 지금까지 그 위치를 굳건히 하고 있다. 그러나 iptables의 많은 기능으로 인해 정책 설정이 매우 어렵고 조작하기에도 매우 불편하다는 단점이 있다. RHEL 7에 적용된 Firewalld는 iptables 기반의 방화벽 프로그램이다. Firewalld는 직관적인 명령어 옵션 제공, 이해하기 쉬운 구조, 사용하기 쉬운 설정, GUI 기반의 유용한 도구 기본 제공, 서비스 및 응용 프로그램에서의 설정 지원, 동적 방화벽 시스템 도입 등의 장점을 보이면서 사용자들이 보다 편리하게 방화벽을 이용할 수 있는 환경을 제공하고 있다. Firewalld의 등장은 관리자들에게 어렵게만 느껴졌던 리눅스 방화벽 시스템을 더욱 쉽게 이용할 수 있는 환경을 제공하고 , 리눅스 대중화에 따른 일반인들의 리눅스 방화벽 이용 증가에도 기여할 것으로 사료된다.

Abstract

As the Linux operating system, the open source software in the server market, is booming, the use of Linux-based firewalls, the core of security, is also increasing. At the heart of the current Linux firewall is iptables, created by the netfilter project, that has been firmly in place since the Linux kernel version 2.4. However, due to many features of iptables, it is very difficult to set policy and very inconvenient to operate. Firewalld in RHEL 7 is an iptables based firewall program. Firewalld has the advantages of providing intuitive command options, easy-to-understand structure, easy-to-use configuration, built-in GUI-based useful tools, support for configuration in services and applications, and a dynamic firewall system. Therefore, it provides a more convenient environment for users to use a firewall. The advent of Firewalld will provide administrators with an easier environment to use the Linux firewall system, which has been felt difficult. In addition, it is expected to contribute to the increase of general public's use of Linux firewall due to the popularization of Linux.

Keywords:

Access Control, Firewall, Firewalld, Linux, RHEL 7

키워드:

접근 제어, 방화벽, 파이어월디, 리눅스, 레드햇 엔터프라이즈 리눅스 7

Ⅰ. 서 론

방화벽(firewall)은 외부의 원치 않는 트래픽(traffic)으로부터 시스템을 보호하는 대표적인 방법이다. 방화벽의 규칙 세트를 정의하여 외부의 호스트 시스템에서 들어오는 네트워크 트래픽을 제어한다. 또한 규칙을 통해 시스템으로 들어오는 트래픽을 정렬하고 차단하거나 통과시킬 때 사용된다. 이러한 방화벽은 서버 분야의 전유물인 것처럼 여겨졌지만 요즘 같이 데스크톱, 서버, 모바일 장치 등 모든 기기가 인터넷에 접속되어 있는 환경에서는 필수적인 구성 요소로 인식되고 있다. 특히 외부로부터 지능적이고 다양한 위협들이 등장하면서 방화벽도 지속적으로 발전해오고 있다.

최근 서버 분야에서 공개 소프트웨어인 리눅스 운영체제가 대세로 자리 잡으면서 보안의 핵심인 리눅스 기반 방화벽의 활용도 증가하는 추세이다. 국내외 리눅스 서버 시장에서 가장 점유율이 높은 리눅스 배포판은 레드햇(red hat)사의 Red Hat Enterprise Linux(이하 RHEL)인데 중추가 되는 버전이 6에서 7로 변경되면서 방화벽 관리 도구로 새롭게 등장한 Firewalld에 대한 관심과 활용도가 증가하고 있다. 현재 리눅스 방화벽의 핵심은 넷필터(netfilter) 프로젝트에서 만든 iptables가 리눅스 커널 버전 2.4 이후부터 지금까지 그 위치를 굳건히 하고 있다. 그러나 iptables의 많은 기능으로 인해 정책 설정이 매우 어렵고 조작하기에도 매우 불편하다는 단점이 있다[1]. 리눅스가 대중화되면서 명령행 기반의 iptables 조작은 초보자들에게는 다루기 힘든 내용이었다. 이러한 불편함을 해소하기 위해 lokkit 및 system-config-firewall이라는 도구들이 등장하지만, 이 도구들도 몇 가지 큰 단점이 존재하고 있었다. RHEL 7에 내장된 Firewalld는 단점으로 지적되었던 문제점을 어느 정도 해소시키면서 큰 관심을 얻고 있다.

본 논문에서는 현재 서버 시장에서 가장 많이 사용되고 있는 RHEL 7에 기본적으로 포함된 Firewalld를 기반으로 리눅스 방화벽에 대해 분석한다.


Ⅱ. 리눅스 방화벽의 역사

2-1 개요

초기의 리눅스는 서버로 사용되었던 유닉스(unix) 운영체제를 기반으로 탄생된 관계로 다양한 네트워크 서비스를 기본적으로 제공하였다. Web, Mail, DNS(domain name system) 등과 같은 다양한 서비스를 운영하고, 다수의 사용자들이 접속하는 환경인 관계로 불필요한 접속이나 악의적인 목적을 가진 호스트를 접근이 늘어나게 되었다. 이러한 환경에서 특정 호스트의 접근을 차단하거나 특정 서비스에는 특정 호스트만 접속할 수 있도록 하는 접근 제어법이 요구되었다. 이 시기에 네트워크 서비스를 제어하기 위해 가장 손쉽게 사용되던 도구가 유닉스에서 가져온 TCP Wrapper이다. TCP Wrapper는 슈퍼 데몬인 inetd에 의해 수행되는 서비스의 접근 제어를 담당하였고, 단순히 특정 호스트에서 대한 허가 또는 차단만 가능하였다. 특히 응용 프로그램 형식으로 동작하였기 때문에 방화벽이라고 부르기에는 기능적으로 많이 부족하였다. 방화벽의 주요 역할은 패킷을 분석하여 접근을 제어하는 패킷 필터링(packet filtering)이라고 할 수 있는데, TCP Wrapper는 /etc/hosts.allow 및 /etc/hosts.deny라는 파일을 이용해서 네트워크 서비스별로 호스트의 접근 제어만 수행하였다[2],[3]. 세밀한 접근 제어를 위해서는 패킷 필터링이 필수인데, 이 작업을 수행하기 위해 리눅스 커널 1.0 버전에서는 BSD 계열에서 사용하던 ipfw이라는 도구를 그대로 가져다 사용하였다. 리눅스 커널 1.2 및 2.0 버전에서는 ipfw을 보완하여 만든 ipfwadm을 사용하였다. ipfwadm부터 리눅스 방화벽 프로그램이라고 볼 수 있는 기존의 서비스별로 호스트의 접근 제어를 수행할 뿐만 아니라 TCP(transmission control protocol), UDP(user datagram protocol), ICMP(internet control message protocol) 패킷들의 출입을 관리할 수 있었다. 특정 IP(internet protocol) 주소나 일정 영역의 IP 주소 대역을 지정할 수 있으며, 허용하는 포트도 지정하고 특정 프로토콜과 조합하여 사용할 수도 있었다[4].

2-2 ipchains

리눅스 운영체제가 본격적으로 서버 시장에서 두각을 나타내기 시작한 것은 커널 2.2 버전이라고 볼 수 있다. 또한 이 버전에 내장된 ipchains는 현재 리눅스 방화벽의 기틀이 되었다고 볼 수 있다. ipchains는 ipfwadm를 다시 작성해서 만든 것으로 논리적으로 INPUT, OUTPUT, FORWARD라는 3개의 사슬(chain)을 정의하여 들어오는 패킷, 나가는 패킷, 매스커레이딩(masquerading) 패킷으로 나누어 설정하였다. 특히 패킷 기반의 필터링뿐만 아니라. 하나의 IP를 공유하여 서버를 운영하거나 인터넷 사용을 공유할 수 있는 매스커레이딩을 지원하여 기존에 단순히 패킷 필터링만 하는 역할에서 진보된 역할을 수행하기 시작하였다 [5].

2-3 iptables

리눅스 커널 2.4 버전부터 현재까지 사용되고 있는 리눅스의 대표적인 프로그램은 iptables이다[6]. iptables는 ipchains를 확장해서 만든 프로그램으로 사슬 구조를 그대로 승계하였지만 각각의 사슬을 갖는 있는 4개의 테이블(table)을 이용해서 iptables라고 명명하였다. iptables는 패킷 필터링 기능을 직접 수행하지 않고 넷필터라는 커널 모듈이 필터링을 수행한다. iptables에서 사용하는 4개의 테이블에는 filter, nat, mangle, raw가 있다.

filter는 iptables의 기본 테이블로 방화벽의 기본 기능이라고 할 수 있는 패킷 필터링을 담당한다. nat 테이블은 network address translation의 약자처럼 IP의 주소를 변환시키는 역할을 수행한다. 한 개의 공인 IP주소를 가지고 여러 대의 컴퓨터를 사용하거나, 하나의 공인 IP 주소를 가지고 여러 대의 서버를 운영하고자 할 때 주로 사용한다. mangle은 패킷 데이터를 변경하는 특수 규칙을 적용하는 테이블로 성능 향상을 위한 TOS (type of service)를 설정하고, raw는 넷필터의 연결추적 하위시스템과 독립적으로 동작해야 하는 규칙을 설정하는 테이블이다. 각 테이블은 자신만의 고유한 사슬 집합을 가지고 있지만, 사용자가 INPUT_ESTABLISHED나 DMZ_ NETWORK와 같은 공통 태그와 관련된 규칙집합을 만들기 위해 사용자 정의 사슬을 생성할 수 있다[7].

2-4 iptables 설정 유틸리티

iptables가 계속적으로 발전하면서 상용 방화벽 프로그램에 필적할 만큼의 성능을 보이고 있다. iptables는 복잡한 명령어 구조를 가지고 있으며 다수의 서비스에 대한 정책을 수행하려면 일일이 서비스별로 룰(rule)을 선언해야 한다. 기본적으로 표 1과 같이 테이블 지정, 테이블에 포함되어 있는 사슬 지정, 복잡한 룰 설정을 거쳐야한다. 또한 다양한 기능이 추가되면서 명령어가 더욱 복잡해지고 있다. 이렇게 복잡한 iptables 명령어를 손쉽게 수행할 수 있는 도구들이 등장하는데, 이 도구가 lokkit과 system-config-firewall이다. lokkit은 대표적인 명령행 기반의 iptables 설정 유틸리티로서 iptables의 정책이 저장되는 /etc/sysconfig/iptables를 편집기로 수정하는 번거로움을 없애준다. 특히 표 2와 같이 매우 단순한 명령어 구조를 가지고 있으므로 iptables보다 손쉽게 방화벽 정책을 수정할 수 있다.

Examples of iptables

Examples of lokkit

lokkit이 CLI(command line interface) 기반의 도구라면 system-config-firewall은 X 윈도 환경에서 실행하는 GUI(graphic user interface)의 도구이다. 그림 1과 같이 메뉴가 나타나고 마우스를 이용해서 원하는 설정을 클릭하면 제어할 수 있다. 그러나 lokkit이나 system-config-firewall은 좀 더 손쉽게 방화벽을 제어할 수 있도록 제공할 뿐이고 기본적인 동작은 iptables 기반에서 수행되므로 정교한 방화벽 작업을 위해서는 iptables의 사용법을 익혀야한다.

Fig. 1.

Examples of system-config-firewall


Ⅲ. Firewalld

3-1 Firewalld의 개요

Firewalld는 D-Bus(desktop bus) 인터페이스가 있는 호스트 기반 방화벽을 제공하는 서비스 데몬이다. 동적 관리 방화벽으로 규칙이 변경될 때마다 방화벽 데몬을 다시 시작할 필요 없이 규칙을 작성, 변경, 삭제할 수 있다. Firewalld도 iptables를 기반으로 동작하고 구조는 그림 2와 같다[8].

Fig. 2.

The Firewall Stack

Firewalld는 네트워크 연결 또는 네트워크 인터페이스의 수준으로 규칙을 설정하는데, 런타임(runtime) 및 영구 구성 옵션으로 분리되어 있다. 기본적으로 IPv4 및 IPv6 방화벽 설정, 이더넷 브리지(ethernet bridge) 등을 지원한다. 또한 서비스나 응용 프로그램이 방화벽 규칙을 직접 추가할 수 있는 인터페이스를 제공한다. Firewalld에서 제공하는 특징을 정리하면 표 3과 같다[9]. Firewalld는 RHEL(red hat enterprise linux) 7, CentOS 7, Fedora 18 이후 버전 등에서 기본적으로 포함되어 사용되고 있다. 또한 NetworkManager, libvirt, docker, fail2ban 등 다양한 응용 프로그램을 지원하고 있다.

Features of Firewalld

3-2 Firewalld의 Zones

iptables는 기본 구성이 되는 테이블의 구조를 알아야 하고, 해당 테이블에 존재하는 사슬에 특정 규칙을 설정하는 구조이다. Firewalld는 일반 사용자들도 쉽게 이해할 수 있는 영역(zone)에 설정한다. 즉 신뢰할 수 있는 영역(trusted zone)과 비신뢰 영역(untrusted zone)으로 구분할 수 있는데, 각각의 영역에 따라 네트워크 인터페이스를 선택하여 다양한 설정을 할 수 있다. 사전에 정의된 영역(predefined zones)은 /usr/lib/Firewalld/zones 디렉터리에 저장되고 사용 가능한 모든 네트워크 인터페이스에 즉시 적용할 수 있다. 이 파일이 수정되면 /etc/Firewalld/zones 디렉터리에 복사하고 사전 정의된 영역은 다음의 표 4와 같다.

Predefined zones

3-3 Firewalld의 주요 사용법

Firewalld은 firewall-cmd라는 명령행 기반의 명령어를 이용해서 방화벽 규칙을 직접 설정한다. 특별한 영역(Zone)을 지정하지 않으면 public 영역을 대상으로 설정된다. 전체적인 명령어 사용법을 확인하려면 ‘man firewall-cmd' 실행하면 된다. 대부분 직관적인 옵션을 제공하고 있어서 초보자들도 이해하기 쉽게 되어 있다. 주요 사용 예를 정리하면 다음의 표 5 부터 표 11과 같다[10].

The firewall-cmd usage help

Example of top-level firewall configuration

Lock down and unlock the firewall

Check the services in a zone

Remove a service from a zone

Open a specific port in a zone

Example of complex configuration


Ⅳ. iptables 기반 도구와 Firewalld의 비교

4-1 정적 방화벽과 동적 방화벽

iptables 기반으로 동작하는 lokkit 또는 system-config-firewall로 방화벽의 정책을 변경한 경우에 이를 적용시키려면 방화벽을 다시 시작해야한다. 이러한 유형을 정적 방화벽(dynamic firewall)이라고 한다. 정적 방화벽의 단점은 방화벽 정책 변화로 인해 재시작을 수행하면 이미 연결된 접속이 종료되는 문제점이 발생한다. 또한 TCP 연결 정보를 기록하고 이 기록을 토대로 관리하는 상태 기반 방화벽(stateful inspection firewall) 기능이 초기화되는 문제점도 발생할 수 있다. 동적 방화벽 서비스 데몬인 Firewalld는 방화벽 정책을 실시간 환경(runtime environment)에서 즉시 변경할 수 있다. 서비스나 데몬(daemon)을 재시작할 필요가 없다.

4-2 서비스, 응용 프로그램, 사용자의 쉬운 설정

iptables는 특정 서비스나 응용 프로그램에서 방화벽 설정을 조정할 수 없었다. 그러나 Firewalld는 D-Bus(desktop bus) 인터페이스를 지원한다. D-Bus는 같은 시스템에서 동시에 실행 중인 여러 프로세스간의 통신을 가능하게 하는 IPC(inter-process call) 및 RPC(remote procedure call)이다. Firewalld는 D-Bus 인터페이스를 통해 사용자뿐만 아니라 서비스나 응용 프로그램에서도 손쉽게 방화벽 설정을 조정할 수 있도록 지원한다.

4-3 다양한 방화벽 구성 도구 기본 제공

iptables인 경우에는 iptables라는 명령어 이외에는 특별한 설정도구가 존재하지 않았다. 이러한 이유로 lokkit이나 system-config-firewall과 같은 도구를 사용하였지만 Firewalld는 명령행에서 사용하는 firewall-cmd, GUI 도구인 firewall-config, 주요 설정은 손쉽게 확인할 수 있는 firewall-applet과 같은 다양한 도구를 제공한다.

Fig. 3.

Examples of firewall-config

Fig. 4.

Examples of firewall-applet

4-4 런타임 및 영구 설정 분할 지원

iptables에서는 방화벽 정책을 설정할 때 런타임 구성 또는 영구 구성 설정이 별도로 분리되어 있지 않다. 그러나 Firewalld는 정책을 설정하는 명령어인 firewall-cmd를 사용할 때 지정할 수 있다. 기본적으로 명령행에서 firewall-cmd로 정책을 설정하면 임시적으로 적용되는 런타임 모드라고 보면 된다. 이 경우 Firewalld를 재로드 및 재시작하거나 시스템 재부팅을 수행하면 해당 설정은 사라진다. 시스템 재부팅을 한 경우에도 특정 방화벽 설정을 유지시키려면 영구 구성으로 설정해야 한다. 영구 구성 설정은 기존의 firewall-cmd 명령에 관련 옵션인 --permanent만 지정하면 된다. 따라서 매우 손쉽게 런타임 및 영구 구성 설정을 나뉘어 적용할 수 있다. 아울러 런타임 모드에서는 일정시간 동안만 특정 정책이 적용되도록 설정할 수 있는데, ‘--timeout 시간’ 형식으로 추가만 해주면 원하는 시간동안만 특정 서비스를 활성화시킬 수 있다.

Set runtime and permanent independently

Examples of service time settings


Ⅴ. 결 론

서버를 비롯하여 클라우드 시스템의 인프라 시장에서 리눅스 운영체제가 대세로 자리 잡게 되면서 리눅스 기반 방화벽 이용도 증가하는 추세이다. 현재 리눅스에서는 커널 모듈로 동작하는 iptables가 상용 방화벽에 필적할 만한 기능 및 성능을 보이면서 리눅스 방화벽의 표준처럼 자리 잡고 있다. iptables가 많은 기능을 제공하지만 정책 설정을 위해 매우 복잡한 구조와 옵션 등을 이해해야 하고, 운영 및 관리상의 불편함으로 인해 초보자들에게 쉽지 않은 방화벽 시스템이다. 이러한 불편함을 해소하기 위해 lokkit, system-config-firewall과 같은 도구들이 등장했지만 만족할만한 수준은 아니었다. 그러나 RHEL 7에 적용된 Firewalld는 직관적인 명령어 옵션 제공, 이해하기 쉬운 구조, 사용하기 쉬운 설정, GUI 기반의 유용한 도구 기본 제공, 서비스 및 응용 프로그램에서의 설정 지원, 동적 방화벽 시스템 도입 등의 장점을 보이면서 사용자들이 보다 편리하게 방화벽을 이용할 수 있는 환경을 제공하고 있다. Firewalld는 기존의 iptables 도구들이 가지고 있던 문제점을 해소하고 사용자들이 좀 더 쉽게 접근할 수 있는 체계를 제공하는 동적 방화벽 시스템이다. Firewalld의 등장은 관리자들에게 어렵게만 느껴졌던 리눅스 방화벽 시스템을 더욱 쉽게 이용할 수 있는 환경을 제공할 것으로 보이고 , 리눅스 대중화에 따른 일반인들의 리눅스 방화벽 이용 증가에도 기여할 것으로 사료된다.

Acknowledgments

이 논문은 2019년도 목원대학교 연구년 지원에 의하여 연구되었음.

참고문헌

  • Y. M. Bae, and S. J Jung, “A study on the linux firewall,” Journal of Security Engineering, Vol. 8, No. 5, pp. 599-610, Oct. 2011.
  • S. J. Jung, B. Y. Bae, B. W. Shin, J. S Park, J. H. Shin, and K. Y. Lee, Understanding the Linux Core with CentOS7. Seoul, Booksholic publishing, 2018.
  • S. J. Jung, B. Y. Bae, and K. Y. Lee, Linux Management and System Security, Seoul, Booksholic publishing, 2016.
  • ipfwadm, [Internet]. Available: https://web.archive.org/web/20080714230323/, http://www.xos.nl/resources/ipfwadm/, .
  • ipchains, [Internet]. Available: http://people.netfilter.org/rusty/ipchains/, .
  • netfilter, [Internet]. Available: http://netfilter.org/, .
  • S. J. Jung, and K. Sung, “A Study on the iptables Ruleset Against Dos Attacks,” The Journal of Advanced Navigation Technology, Vol. 19, No. 3, pp. 175-181, June 2015. [https://doi.org/10.12673/jant.2015.19.3.257]
  • Red Hat Customer Portal, [Internet]. Available: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-using_firewalls#sec-Modifying_Settings_in_Runtime_and_Permanent_Mode_with_CLI/, .
  • Firewalld, [Internet]. Available: https://Firewalld.org/, .
  • Oracle-Base, Linux Firewall, [Internet]. Available: https://oracle-base.com/articles/linux/linux-firewall-Firewalld#installation/, .

저자소개

성경(Kyung Sung)

1993년 경희대학교 대학원(공학석사)

2003년 한남대학교 대학원(공학박사)

1994년∼2004년: 동해대학교 컴퓨터공학과 교수

2004년∼2014년: 목원대학교 컴퓨터교육학과 교수

2014년∼현 재: 목원대학교 융합컴퓨터미디어학부 교수

※관심분야: 정보보호 및 정보관리, 증강현실, 빅데이터, 컴퓨터네트워크, 신경회로망, 컴퓨터교육

Fig. 1.

Fig. 1.
Examples of system-config-firewall

Fig. 2.

Fig. 2.
The Firewall Stack

Fig. 3.

Fig. 3.
Examples of firewall-config

Fig. 4.

Fig. 4.
Examples of firewall-applet

Table 1.

Examples of iptables

# iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
# iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
# iptables -t filter -A INPUT-s 192.168.56.122 -p tcp --dport 22 -j ACCEPT

Table 2.

Examples of lokkit

# lokkit -s http -s https -s ssh
# service iptables restart

Table 3.

Features of Firewalld

· Complete D-Bus API
·  IPv4, IPv6, bridge and ipset support
·  IPv4 and IPv6 NAT support
·  Firewall zones
·  Predefined list of zones, services and icmptypes
· Simple service, port, protocol, source port, masquerading, port forwarding, icmp filter, rich rule, interface and source address handlig in zones
·  Simple service definition with ports, protocols, source ports, modules (netfilter helpers) and destination address handling
·  Rich Language for more flexible and complex rules in zones
·  Timed firewall rules in zones
·  Simple log of denied packets
·  Direct interface
·  Lockdown: Whitelisting of applications that may modify the firewall
·  Automatic loading of Linux kernel modules
·  Integration with Puppet
·  Command line clints for online and offline configuration
·  Graphical configuration tool using gtk3
·  Applet using Qt4

Table 4.

Predefined zones

Zones Describes
block Any incoming network connections are rejected with an icmp-host-prohibited message for IPv4 and icmp6-adm-prohibited for IPv6. Only network connections initiated from within the system are possible.
dmz For computers in your demilitarized zone that are publicly-accessible with limited access to your internal network. Only selected incoming connections are accepted.
drop Any incoming network packets are dropped without any notification. Only outgoing network connections are possible.
external For use on external networks with masquerading enabled, especially for routers. You do not trust the other computers on the network to not harm your computer. Only selected incoming connections are accepted.
home For use at home when you mostly trust the other computers on the network. Only selected incoming connections are accepted.
internal For use on internal networks when you mostly trust the other computers on the network. Only selected incoming connections are accepted.
public For use in public areas where you do not trust other computers on the network. Only selected incoming connections are accepted.
trusted All network connections are accepted.
work For use at work where you mostly trust the other computers on the network. Only selected incoming connections are accepted.

Table 5.

The firewall-cmd usage help

# firewall-cmd --help

Table 6.

Example of top-level firewall configuration

// Check firewall state.
# firewall-cmd --state

// Check active zones.
# firewall-cmd --get-active-zones

// Check current active services.
# firewall-cmd --get-service

// Check services that will be active after next reload.
# firewall-cmd --get-service --permanent

Table 7.

Lock down and unlock the firewall

# firewall-cmd --panic-on
success
# firewall-cmd --query-panic
yes
# firewall-cmd --panic-off
success
# firewall-cmd --query-panic
no

Table 8.

Check the services in a zone

# firewall-cmd --zone=public --list-services
dhcpv6-client https ss
# firewall-cmd --permanent --zone=public \ --list-services
dhcpv6-client https ss

Table 9.

Remove a service from a zone

# firewall-cmd --permanent --zone=public --remove-service=https
# firewall-cmd --reload

Table 10.

Open a specific port in a zone

# firewall-cmd --permanent --zone=public --add-port=8080-8081/tcp
# firewall-cmd --reload

Table 11.

Example of complex configuration

# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" \
    source address="192.168.0.4/24" service name="http" accept"

Table 12.

Set runtime and permanent independently

# firewall-cmd --zone=public --add-service=https
# firewall-cmd --permanent --zone=public \
--add-service=https

Table 13.

Examples of service time settings

# firewall-cmd --add-service=ssh --timeout 15m