Table of Contents

Use Firewalld And Associated Mechanisms Such As Rich Rules Zones And Custom Rules To Implement Packet Filtering And Configure Network Address Translation Nat

General Information

Firewalld replaces iptables. It connects to the netfilter kernel code.

It differs from iptables in that it allows configuration changes without stopping current connections and it is a zone based firewall.


Lab Setup

The following virtual machines will be used:

Adding Interfaces

Virtualbox example for adding interfaces

Configure Interfaces


Help

Finding help in this section.


Firewalld Service

Ensure its running

systemctl status firewalld

Forwarding: Multiple Interfaces

If you have multiple interfaces and need to forward packets through them, IP Forwarding needs to be enabled.


Enable ip forwarding (on ipa/the router)

vim /etc/sysctl.d/router.conf
 
# Enable IP Forwarding to other interfaces
net.ipv4.ip_forward=1


Load changes from all locations

sysctl --system


Verify

sysctl -a | grep ip_forward

Packet Filtering

Open http(tcp/80)

firewall-cmd --permanent --add-service=http
firewall-cmd --reload

Zones

Firewall-cmd zone commands.

General Commands

Show default zone

firewall-cmd --get-default-zone


Active Zones (interfaces or sources assigned)

firewall-cmd --get-active-zones


Show all zones

firewall-cmd --get-zones


List config of all zones

firewall-cmd --list-all-zones


Create rule for a specific zone

firewall-cmd --permanent --zone=work --add-source=192.168.1.151
firewall-cmd --permanent --zone=work --add-service=http
firewall-cmd --reload

Lab: Set Zones for Router

Setting zones for the router (ipa) system.


Note: As of RHEL 7.4, you do not need to execute the removal command/network script update like you did in earlier versions. Listed below just in case you get an older version on the exam.


Custom Service

Copy a built in service file

cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/leetservice.xml


Edit it, then reload the firewall

vim /etc/firewalld/services/leetservice.xml
 
<make changes, save, quit>
 
firewall-cmd --reload


Custom service can now be viewed and used

firewall-cmd --get-services
 
firewall-cmd --permanent --add-service=leetservice
firewall-cmd --reload

Rich Rules

Rich rules allow you to create allow or deny rules in order to define:

Rich rule help/examples

man firewalld.richlanguage

Rich Rule Examples

Log SSH Attempts

firewall-cmd --zone=public --add-rich-rule='rule service name="ssh" log prefix="SSH Attempt: " level="notice" limit value="5/m" accept'


ICMP traffic

firewall-cmd --zone=public --add-rich-rule='rule protocol value=icmp accept'


Extending the HTTP Rule

firewall-cmd --permanent --zone=home --add-rich-rule='rule family=ipv4 source address=192.168.1.151 service name="http" log level=notice prefix="NEW HTTP RULE " limit value="100/s" accept'
firewall-cmd --reload

NAT

Network Address Translation.

Prerequisites

Masquerading

Masquerading is often done when a private network is going out to an external network (the internet) through a gateway.

A server that has both an external and internal interface that is acting as a gateway provides the NAT Masquerading.

The masquerading is configured on the external zone/interface.


Configure masquerading for hosts in a zone

firewall-cmd --permanent --zone=external --add-masquerade
firewall-cmd --reload


Additional Example: Masquerading for specific source addresses

firewall-cmd --permanent --zone=external --add-rich-rule='rule family=ipv4 source address=10.0.0.0/24 masquerade'

Port Forwarding

Port forwarding allows external systems to access internal systems.

They come in from external on one port, and get forwarded to an internal system on a different port.


Forward a connection from external 172.16.0.254 (ipa/router) on port tcp/2222 to internal 10.0.0.1 (server1) on port tcp/22

firewall-cmd --permanent --zone=external --add-forward-port=port=2222:proto=tcp:toport=22:toaddr=10.0.0.1
firewall-cmd --reload


Test the connection from server2

[root@server2 ~]# ssh -p 2222 root@172.16.0.254
 
The authenticity of host '[172.16.0.254]:2222 ([172.16.0.254]:2222)' can't be established.               
ECDSA key fingerprint is SHA256:klAqN92d6UnV80L99E5TxQHBxFDMSk9HNcL7E4DsKdY.                             
ECDSA key fingerprint is MD5:9d:56:7a:12:32:fd:df:b6:9e:6d:4c:9e:1a:72:a0:78.                            
Are you sure you want to continue connecting (yes/no)? yes                                               
Warning: Permanently added '[172.16.0.254]:2222' (ECDSA) to the list of known hosts.                                    
root@172.16.0.254's password:                                                                                                              
[root@server1 ~]#