Introduction
Introduction Statistics Contact Development Disclaimer Help
Title: Getting started to write firewall rules
Author: Solène
Date: 07 December 2024
Tags: network security
Description: In this blog post, you will learn how to get started to
write firewall rules
# Introduction
This blog post is about designing firewall rules, not focusing on a
specific operating system.
The idea came after I made a mistake on my test network where I exposed
LAN services to the Internet after setting up a VPN with a static IPv4
on it due to too simplistic firewall rules. While discussing this
topic on Mastodon, some mentioned they never know where to start when
writing firewall rules.
# Firewall rules ordering
Firewall rules are evaluated one by one, and the evaluation order
matters.
Some firewall use a "first match" type, where the first rule matching a
packet is the rule that is applied. Other firewalls are of type "last
match", where the last matching rule is the one applied.
# Block everything
The first step when writing firewall rules is to block all incoming and
outgoing traffic.
There is no other way to correctly configure a firewall, if you plan to
block all services you want to restrict and let the default allow rule
do its job, you are doing it wrong.
# Identify flows to open
As all flows should be blocked by default, you have to list what should
go through the firewall, inbound and outbound.
In most cases, you will want to allow outbound traffic, except if you
have a specific environment on which you want to only allow outgoing
traffic to a certain IP / port.
For inbound traffic, if you do not host any services, there are nothing
to open. Otherwise, make a list of TCP, UDP, or any other ports that
should be reachable, and who should be allowed to reach it.
# Write the rules
When writing your rules, whether they are inbound or outbound, be
explicit whenever possible about this:
* restrict to a network interface
* restrict the source addresses (maybe a peer, a LAN, or anyone?)
* restrict to required ports only
Eventually, in some situations you may want to filter by source and
destination port at the same time. This is usually useful when you
have two servers communicating over a protocol enforcing both ports.
This is actually where I failed and exposed my LAN minecraft server to
the wild. After setting up a VPN with a static IPv4 address, I only
had a "allow tcp/25565" rule on my firewall as I was relying on my ISP
router to not forward traffic. This rule was not effective once the
traffic was received from the VPN, although it would have been
filtrated when using a given network interface or a source network.
If you want to restrict the access of a critical service to a some user
(1 or more), but that they do not have a static IP address, you should
consider using a VPN for this service and restrict the access to the
VPN interface only.
# Write comments and keep track of changes
Firewall rules will evolve over time, you may want to write for your
future you why you added this or that rule. Ideally, use a version
control system on the firewall rules file, so you can easily revert
changes or track history to understand a change.
# Do not lock yourself out
When applying the firewall rules the first time, you may have made a
mistake and if it is on remote equipment with no (or complicated)
physical access, it is important to prepare an escape.
There are different methods, the most simple is to run a command in a
second terminal that sleeps for 30 seconds before resetting the
firewall to a known state, you have to run this command just before
loading the new rules. So if you are locked out after applying, just
wait 30 seconds to fix the rules.
# Add statistics and logging
If you want to monitor your firewall, consider adding counters to
rules, it will tell you how many times it was evaluated/matched and how
many packets and traffic went through. With nftables on Linux they are
named "counters", whereas OpenBSD packet filter names this "label".
It is also possible to log packets matching a rule, this can be useful
to debug an issue on the firewall, or if you want to receive alerts in
your logs when a rule is triggered.
# Conclusion
Writing firewall rules is not a hard task once you identified all
flows.
While companies have to maintain flow tables, I do not think it can be
useful for a personal network (your mileage may vary).
You are viewing proxied material from dataswamp.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.