Linux Firewall with iptables based on CentOS 8

Hallo zusammen,

In den letzten Monaten habe ich die Regeln meiner Firewall mehr und mehr angepasst. Eigentlich ist es mittlerweile nur noch ein Portfilter. Deshalb konnte ich meinen Uralt TMG 2010 auf Windows Server 2008 R2 endlich einstampfen und durch diesen Linux Server auf Basis von CentOS 8 installieren.

Ich habe mir die 9.7 GB grosse ISO heruntergeladen und auf den VMWare Datastore hochgeladen.

Dann habe ich in VMWare ESXi eine neue virtuelle Maschine angelegt.

Nach dem starten der VM folgt die Installation

Nun muss das Root Passwort und die Partitionierung eingerichtet werden

Da der Server nur eine Portfilter Firewall werden soll, wähle ich die Minimal Installation aus.

Nach einem Neustart kann man sich mit dem Root account anmelden. Mit dem folgenden Befehl wird die Kernelversion angezeigt.

uname -a

Die VMWare Tools müssen nicht installiert werden, die sind schon installiert.

Wie man sieht, gibt es den Befehl ifconfig hier nicht, dafür funktioniert aber folgendes

ip address

Nun wird noch geprüft, ob es Updates gibt

yum update

Nun habe ich mich mit SSH auf den Server verbunden, denn so klappt das Copy und Paste besser.

Als erstes wird der Hostname angepasst

vi /etc/hostname

Nun muss noch die Zeitzone eingestellt werden

timedatectl
timedatectl list-timezones
timedatectl set-timezone Europe/Zurich

Nun müssen die beiden Interfaces von DHCP auf fixe IPs umkonfiguriert werden

cat /etc/sysconfig/network-scripts/ifcfg-eth0
cat /etc/sysconfig/network-scripts/ifcfg-eth1

Um die IP Adressen anzuzeigen gibt man folgendes ein

ip address

Beim routing benötigt es noch die default Route. da habe ich lange benötigt, bis ich den richtigen Befehl gefunden hatte.

ip route
ip route add default via 95.143.60.17 dev eth0

Soll die Route beim start automatisch geladen werden, so muss die in /etc/sysconfig/network hinterlegt werden

cat /etc/sysconfig/network

Ich habe noch ein paar weitere Packete installiert

#Additional Software
yum install bind-utils
yum install traceroute
yum install iptables-services
yum install tcpdump
yum install net-snmp

Nun zur Portfilter Firewall mit iptables. Ich habe schon vor fast 20 Jahren mal eine Linux Firewall mit iptables betrieben. Hier die Filter in der Reihenfolge, wie sie abgearbeitet werden.

Als erstes muss das IPv4 Forwarding aktiviert werden und auch gleich IPv6 deaktiviert werden

cat /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
sysctl -p

Nun kann man die iptables befüllen. Anzeigen der Filter

iptables -L -n

Anzeigen des NAT Tables

iptables -t nat -L -n

Hier noch mein iptables Script

###############################################################################
# Linux Firewall Script 22.05.2021
###############################################################################
#ip route add default via 95.143.60.17 dev eth0

#Flush all Rules
iptables -F

# Variables
lan="172.21.175.0/24"
ext="95.143.60.16/29"
any="0.0.0.0/0"
fw01="172.21.175.1"

###############################################################################
# Outgoing
###############################################################################
#IPv4 FORWARDING aktivieren
#echo 1 > /proc/sys/net/ipv4/ip_forward

#FORWARDING
iptables -A INPUT -i eth1 -s $lan -d $any -m state --state ESTABLISHED,RELATED -p all -j ACCEPT
iptables -A FORWARD -s $lan -p tcp -j ACCEPT
iptables -A FORWARD -s $lan -p udp -j ACCEPT
iptables -A FORWARD -s $lan -p icmp -j ACCEPT
iptables -t nat -A POSTROUTING -s $lan -o eth0 -p tcp -j MASQUERADE
iptables -t nat -A POSTROUTING -s $lan -o eth0 -p udp -j MASQUERADE
iptables -t nat -A POSTROUTING -s $lan -o eth0 -p icmp -j MASQUERADE

#HTTP/HTTPS
iptables -A INPUT -i eth1 -s $lan -d $any -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth1 -s $lan -d $any -p tcp --dport 443 -j ACCEPT

#SMB To External
#LAN --> Internet --> TCP445
iptables -A INPUT -i eth1 -s $lan -d $any -p tcp --dport 445 -j ACCEPT

#MSSQL
#LAN --> Internet --> TCP1433
iptables -A INPUT -i eth1 -s $lan -d $any -p tcp --dport 1433 -j ACCEPT

#DNS
#LAN --> Internet --> TCP53
#LAN --> Internet --> UDP53
iptables -A INPUT -i eth1 -s $lan -d $any -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -i eth1 -s $lan -d $any -p udp --dport 53 -j ACCEPT

#DNSoverHTTP
#LAN --> Internet --> TCP853
iptables -A INPUT -i eth1 -s $lan -d $any -p tcp --dport 853 -j ACCEPT

#IMAP OUT
#LAN --> Internet --> TCP993
iptables -A INPUT -i eth1 -s $lan -d $any -p tcp --dport 993 -j ACCEPT

#SMTP
#LAN --> Internet --> TCP25
#LAN --> Internet --> TCP587
iptables -A INPUT -i eth1 -s $lan -d $any -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -i eth1 -s $lan -d $any -p tcp --dport 587 -j ACCEPT

#RDP
#LAN --> Internet --> TCP3389
iptables -A INPUT -i eth1 -s $lan -d $any -p tcp --dport 3389 -j ACCEPT

#PING
#LAN --> Internet --> ICMP
iptables -A INPUT -i eth1 -s $lan -d $any -p icmp -j ACCEPT

#NTP
#LAN --> Internet --> UDP123
iptables -A INPUT -i eth1 -s $lan -d $any -p udp --dport 123 -j ACCEPT

#SIP
#LAN --> Internet --> UDP5060
#LAN --> Internet --> TCP5061
iptables -A INPUT -i eth1 -s $lan -d $any -p udp --dport 5060 -j ACCEPT
iptables -A INPUT -i eth1 -s $lan -d $any -p tcp --dport 5061 -j ACCEPT

#WHOIS
#LAN --> Internet --> TCP43
iptables -A INPUT -i eth1 -s $lan -d $any -p tcp --dport 43 -j ACCEPT

###############################################################################
# Incoming
###############################################################################

#FORWARDING
iptables -A INPUT -i eth0 -s $any -d $ext -m state --state ESTABLISHED,RELATED -p all -j ACCEPT
iptables -A FORWARD -d $lan -p tcp -j ACCEPT
iptables -A FORWARD -d $lan -p udp -j ACCEPT
iptables -A FORWARD -d $lan -p icmp -j ACCEPT

#SNMP
#LAN --> FW01 --> UDP161
iptables -A INPUT -i eth1 -s $lan -d $fw01 -p udp --dport 161 -j ACCEPT

#SSH
#LAN --> FW01 --> TCP22
iptables -A INPUT -i eth1 -s $lan -d $fw01 -p tcp --dport 22 -j ACCEPT

#www.icewolf.ch / blog.icewolf.ch
#Internet 95.143.60.18 --> 172.21.175.20 --> TCP80
#Internet 95.143.60.18 --> 172.21.175.20 --> TCP443
iptables -t nat -A PREROUTING -i eth0 -d 95.143.60.18 -p tcp -j DNAT --to 172.21.175.20
iptables -t nat -A PREROUTING -i eth0 -d 95.143.60.18 -p tcp -j DNAT --to 172.21.175.20
iptables -A INPUT -i eth0 -s $any -d 172.21.175.20 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -s $any -d 172.21.175.20 -p tcp --dport 443 -j ACCEPT

#RDP ICESRV02
#Internet 95.143.60.18 --> 172.21.175.20 --> TCP3389
iptables -A INPUT -i eth0 -s $any -d 172.21.175.20 -p tcp --dport 3389 -j ACCEPT

#Exchange 2016 OWA
#Internet 95.143.60.19 --> 172.21.175.60 --> TCP443
iptables -t nat -A PREROUTING -i eth0 -d 95.143.60.19 -p tcp -j DNAT --to 172.21.175.60
iptables -A INPUT -i eth0 -s $any -d 172.21.175.60 -p tcp --dport 443 -j ACCEPT

#DROP Rule
iptables -A INPUT -i eth0 -s $any -d $any -p all -j DROP

Grüsse
Andres Bohren