Tutorial | einfaches iptables Firewall Script

von Thomas


Erstellt am 24.11.2021


iptables commands

Was ist iptables

iptables ist eine Software Firewall, welche vom Linux Kernel ausgeführt wird. Das Tool ist super mächtig was die einzelnen Funktionen betrifft. Dabei ist die Firewall in Tabellen organisiert, welche Chains und Rules beinhaltet. In meinem iptables Tutorial habe ich bereits sehr ausführlich über die Funktion gesprochen und einzelne Befehle erläutert. Möchtet ihr mehr über die Entstehung und Geschichte von der Software erfahren, empfehle ich euch den Wikipedia Artikel.

Iptables Script zur Automatisierung

In diesem Artikel möchte ich euch mein einfaches Script zeigen, welches ich auf meinen meisten Servern verwende. Das Script ist ausführlich kommentiert und sollte keine Fragen aufwerfen. Falls doch, schreibt mir einfach über den Kontakt.

Firewall Script

#!/bin/sh
#
# iptables firewall script v1.0
#
PATH=/usr/sbin:/sbin:/bin:/usr/bin
#den Namen eurer Netzwerkkarte könnt ihr mit dem Befehl ip addr herausfinden.
WAN=eth0
#WAN=ens3

#IP Adressen sind ebenfalls mit dem Befehl ip addr herauszufinden.
IPv6=affe:cafe:1234:5678::1
IPv4=192.168.0.1

#einfacher Switch Case (siehe weiter unten für Bedeutung)
case $1 in

        start)
            #stoppe das Script zuerst
            $0 stop

            #default policy setzen  Output ist generell okay.
            iptables -P INPUT DROP
            ip6tables -P INPUT DROP
            iptables -P OUTPUT ACCEPT
            ip6tables -P OUTPUT ACCEPT
            iptables -P FORWARD DROP
            ip6tables -P FORWARD DROP


            #localhost traffic ist okay.
            iptables -A INPUT -i lo -j ACCEPT
            ip6tables -A INPUT -i lo -j ACCEPT

            #pings gegen die firewall sind okay.
            iptables -A INPUT -p icmp -d $IPv4 -j ACCEPT
            ip6tables -A INPUT -p icmpv6 -j ACCEPT

            #sperre diverse IPs.
            iptables -A INPUT -s 14.29.232.95 -j DROP
            iptables -A INPUT -s 212.70.149.71 -j DROP
            iptables -A INPUT -s 208.115.199.19 -j DROP

            #verbindungen welche die firewall akzeptiert hat sind okay.
            #siehe iptables Tutorial für die Bedeutung von ESTABLISHED,RELATED.
            iptables -A INPUT -i $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT
            ip6tables -A INPUT -i $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT

            #verbindungen auf port 22 zur firewall werden akzeptiert.
            iptables -A INPUT -i $WAN -p tcp -d $IPv4 --dport 22 -j ACCEPT
            ip6tables -A INPUT -i $WAN -p tcp -d $IPv6 --dport 22 -j ACCEPT

            #verbindungen auf port 80 (HTTP) zur firewall werden akzeptiert.
            iptables -A INPUT -i $WAN -p tcp -d $IPv4 --dport 80 -j ACCEPT
            ip6tables -A INPUT -i $WAN -p tcp -d $IPv6 --dport 80 -j ACCEPT

            #verbindungen auf port 443 (HTTPS) zur firewall werden akzeptiert.
            iptables -A INPUT -i $WAN -p tcp -d $IPv4 --dport 443 -j ACCEPT
            ip6tables -A INPUT -i $WAN -p tcp -d $IPv6 --dport 443 -j ACCEPT

            ###
            # Hier könnten weitere Regeln für alle möglichen Ports und services stehen.
            ###

            #optional
            #solltet ihr Brut-Force-Attacken mit fail2ban filter, muss fail2ban neugestartet werden
            #da fail2ban Regeln zu Beginn gelöscht wurden.
            #/etc/init.d/fail2ban restart
            #systemctl restart fail2ban.service

            echo "Firewall activated after stopped"
        ;;

        stop)
            iptables -F
            iptables -t nat -F
            iptables -t mangle -F
            iptables -X
            iptables -P INPUT ACCEPT
            iptables -P OUTPUT ACCEPT
            iptables -P FORWARD ACCEPT
            ip6tables -F
            ip6tables -t nat -F
            ip6tables -t mangle -F
            ip6tables -X
            ip6tables -P INPUT ACCEPT
            ip6tables -P OUTPUT ACCEPT
            ip6tables -P FORWARD ACCEPT
            echo "Firewall stopped"
        ;;

        restart)
            $0 start
        ;;

        *)
            echo "Usage: $0 {start|stop|restart}"
        ;;

esac

Bedeutung von bash Befehlen aus dem Script

Firewall Script automatisch bei Systemstart ausführen.

Hierzu gibt es bereits einen Artikel von mir (Script bei Systemstart ausführen).