# Network Firewall

Software Firewall (Runs on operating system)

Hardware Firewall (Dedicated network appliance)

Modern Linux uses firewalld as front-end &amp; nftables under the hood

<div id="bkmrk-organises-rules-by-%22" style="direction: ltr; border-width: 100%;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 10.2881in;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 10.2881in;">- <span style="font-family: Consolas; font-size: 10.0pt;">organises rules by "zones" (like public, home, work)</span>
- <span style="font-family: Consolas; font-size: 10.0pt;">exposes "services" (ssh, http, samba, nfs, etc.)</span>

</div></div></div><div id="bkmrk-temporary-changes-ar" style="direction: ltr; border-width: 100%;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 10.2881in;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 10.2881in;">- <span style="font-family: Consolas; font-size: 10.0pt;">temporary changes are active immediately but vanish on reload</span>
- <span style="font-family: Consolas; font-size: 10.0pt;">permanent changes are written to disk and take effect after reload</span>

</div></div></div><div id="bkmrk-unspecified-zone-wil" style="direction: ltr; border-width: 100%;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 10.2881in;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 10.2881in;">- <span style="font-family: Consolas; font-size: 10.0pt;">unspecified zone will be applied to the default (public) zone</span>
- <span style="font-family: Consolas; font-size: 10.0pt;">services not on --list-all can be enabled by opening specific ports</span>

</div></div></div>Examples

<div id="bkmrk-allow-ssh-from-jump-" style="direction: ltr; border-width: 100%;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 10.2881in;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 10.2881in;">- <span style="font-family: Consolas; font-size: 10.0pt;">allow SSH from jump hosts</span>
- <span style="font-family: Consolas; font-size: 10.0pt;">open http/https on a web server</span>
- <span style="font-family: Consolas; font-size: 10.0pt;">open NFS only to specific subnets</span>

</div></div></div>Exam

<div id="bkmrk-start%2Fenable-firewal" style="direction: ltr; border-width: 100%;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 10.2881in;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 10.2881in;">- <span style="font-family: Consolas; font-size: 10.0pt;">start/enable firewall, list zones, see active zone</span>
- <span style="font-family: Consolas; font-size: 10.0pt;">add/remove a service, open/close a port, make changes permanent</span>
- <span style="font-family: Consolas; font-size: 10.0pt;">reload, create, or use a custom XML service file</span>
- <span style="font-family: Consolas; font-size: 10.0pt;">basic rich rules for blocking a specific source IP</span>
- <span style="font-family: Consolas; font-size: 10.0pt;">temporary vs permanent</span>

</div></div></div>Basic Commands

<div id="bkmrk-dnf-install-firewall" style="direction: ltr; border-width: 100%;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 10.2881in;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 10.2881in;"><div style="direction: ltr;"><table border="1" cellpadding="0" cellspacing="0" style="direction: ltr; border-collapse: collapse; border: 1pt solid #A3A3A3;" summary="" title=""><tbody><tr><td style="vertical-align: top; width: 2.6631in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">dnf install firewalld

</td><td style="vertical-align: top; width: 3.359in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">install firewalld

</td></tr><tr><td style="vertical-align: top; width: 2.6826in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">systemctl enable --now firewalld

</td><td style="vertical-align: top; width: 3.3395in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">enable now

</td></tr><tr><td style="vertical-align: top; width: 2.6631in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">systemctl status firewalld

</td><td style="vertical-align: top; width: 3.359in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">details &amp; uptime

</td></tr><tr><td style="vertical-align: top; width: 2.6631in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --state

</td><td style="vertical-align: top; width: 3.359in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">status

</td></tr><tr><td style="vertical-align: top; width: 2.6631in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --get-active-zones

</td><td style="vertical-align: top; width: 3.359in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;"></td></tr><tr><td style="vertical-align: top; width: 2.5854in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --get-zones

</td><td style="vertical-align: top; width: 3.5062in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">list predefined zone profiles

- <span style="font-family: Consolas; font-size: 10.0pt;">public - locked down default</span>
- <span style="font-family: Consolas; font-size: 10.0pt;">home/work - more relaxed (known networks)</span>
- <span style="font-family: Consolas; font-size: 10.0pt;">trusted - allow all</span>
- <span style="font-family: Consolas; font-size: 10.0pt;">dmz/external - edge scenarios</span>

</td></tr><tr><td style="vertical-align: top; width: 2.6631in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --list-all

</td><td style="vertical-align: top; width: 3.359in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">shows all zones, rules, services, etc.  
(only a few enabled by default)

</td></tr><tr><td style="vertical-align: top; width: 2.6631in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --get-services

</td><td style="vertical-align: top; width: 3.359in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">list of all services that can be allowed

</td></tr><tr><td style="vertical-align: top; width: 2.6631in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --reload

</td><td style="vertical-align: top; width: 3.3833in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">write permanent and custom rules to memory

</td></tr></tbody></table>

</div></div></div></div>Adding and Removing Temporary and Permanent Rules

<div id="bkmrk-firewall-cmd---add-s" style="direction: ltr; border-width: 100%;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 10.2881in;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 10.2881in;"><div style="direction: ltr;"><table border="1" cellpadding="0" cellspacing="0" style="direction: ltr; border-collapse: collapse; border: 1pt solid #A3A3A3;" summary="" title=""><tbody><tr><td style="vertical-align: top; width: 7.0159in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --add-service=http

</td><td style="vertical-align: top; width: 3.109in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">add http (temporary)

</td></tr><tr><td style="vertical-align: top; width: 7.0159in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --permenent --add-service=http

</td><td style="vertical-align: top; width: 3.109in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">add http (permanent)

</td></tr><tr><td style="vertical-align: top; width: 7.0159in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --remove-service=http

</td><td style="vertical-align: top; width: 3.109in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">remove http (temporary)

</td></tr><tr><td style="vertical-align: top; width: 7.0159in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --permanent --remove-service=http

</td><td style="vertical-align: top; width: 3.109in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">remove http (permanent)

</td></tr><tr><td style="vertical-align: top; width: 7.0159in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --add-port=1110/tcp

</td><td style="vertical-align: top; width: 3.109in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">add TCP 1110 (temporary)

</td></tr><tr><td style="vertical-align: top; width: 7.0159in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --permanent --add-port=1110/tcp

</td><td style="vertical-align: top; width: 3.109in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">add TCP 1110 (permanent)

</td></tr><tr><td style="vertical-align: top; width: 7.0159in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --remove-port=1110/tcp

</td><td style="vertical-align: top; width: 3.109in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">remove TCP 1110 (temporary)

</td></tr><tr><td style="vertical-align: top; width: 7.0159in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --permanent --remove-port=1110/tcp

</td><td style="vertical-align: top; width: 3.109in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">remove TCP 1110 (permanent)

</td></tr><tr><td style="vertical-align: top; width: 7.0159in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.0.25" reject'

</td><td style="vertical-align: top; width: 3.1541in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">block incoming packets from specific IP

</td></tr><tr><td style="vertical-align: top; width: 7.0354in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --remove-rich-rule='rule family="ipv4" source address="192.168.0.25" reject'

</td><td style="vertical-align: top; width: 3.0902in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">remove

</td></tr><tr><td style="vertical-align: top; width: 7.0159in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --add-icmp-block=echo-request

</td><td style="vertical-align: top; width: 3.109in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">block icmp (ping) requests

</td></tr><tr><td style="vertical-align: top; width: 7.0159in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --remove-icmp-block=echo-request

</td><td style="vertical-align: top; width: 3.109in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">remove

</td></tr><tr><td style="vertical-align: top; width: 7.0159in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -d 203.0.113.10 -j DROP

</td><td style="vertical-align: top; width: 3.1541in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">block outgoing packets to IP (priority)

</td></tr><tr><td style="vertical-align: top; width: 7.0159in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --direct --remove-rule ipv4 filter OUTPUT 0 -d 203.0.113.10 -j DROP

</td><td style="vertical-align: top; width: 3.109in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">remove

</td></tr><tr><td style="vertical-align: top; width: 7.0159in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">nano /etc/firewalld/services/sap.xml

xml version="1.0" encoding="utf-8"  
&lt;service version=1.0"&gt;  
<span style="mso-spacerun: yes;"> </span>&lt;short&gt;SAP&lt;/short&gt;

<span style="mso-spacerun: yes;"> </span>&lt;description&gt;Third-party application service&lt;/description&gt;

<span style="mso-spacerun: yes;"> </span>&lt;port protocol="tcp" port="3200"/&gt;

<span style="mso-spacerun: yes;"> </span>&lt;/service&gt;

</td><td style="vertical-align: top; width: 3.1541in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">add a custom service definition for SAP  
  
xml header for firewalld

</td></tr><tr><td style="vertical-align: top; width: 7.0159in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --get-services | grep -i sap

</td><td style="vertical-align: top; width: 3.109in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">verify

</td></tr><tr><td style="vertical-align: top; width: 7.0159in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --add-service=sap

</td><td style="vertical-align: top; width: 3.109in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">add the custom rule (temporary)

</td></tr><tr><td style="vertical-align: top; width: 7.0159in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">firewall-cmd --permanent --add-service=sap

</td><td style="vertical-align: top; width: 3.109in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">add the custom rule (permanent)

</td></tr></tbody></table>

</div></div></div></div><div id="bkmrk-dnf-install--y-httpd" style="direction: ltr; border-width: 100%;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 10.2881in;"><div style="direction: ltr; margin-top: 0in; margin-left: 0in; width: 10.2881in;"><div style="direction: ltr;"><table border="1" cellpadding="0" cellspacing="0" style="direction: ltr; border-collapse: collapse; border: 1pt solid #A3A3A3;" summary="" title=""><tbody><tr><td style="vertical-align: top; width: 2.5104in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">dnf install -y httpd

</td><td style="vertical-align: top; width: 2.95in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">install apache web service

</td></tr><tr><td style="vertical-align: top; width: 2.5104in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">systemctl enable --now httpd

</td><td style="vertical-align: top; width: 2.95in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;"></td></tr><tr><td style="vertical-align: top; width: 2.5104in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">curl -I [http://localhost](http://localhost)

</td><td style="vertical-align: top; width: 2.95in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">verify (403 Forbidden)

</td></tr><tr><td style="vertical-align: top; width: 2.5298in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">curl -I [http://192.168.50.164/](http://192.168.50.164/)

</td><td style="vertical-align: top; width: 2.9305in; padding: 2.0pt 3.0pt 2.0pt 3.0pt; border: 1pt solid #A3A3A3;">verify (403 Forbidden)

</td></tr></tbody></table>

</div></div></div></div>