Firewall Builder
Firewall Builder (fwbuilder, fwb) ist ein Regelgenerator mit intuitiver Drag-and-Drop-Oberfläche für Linux, Windows und macOS, der vor allem in komplexen Umgebungen nützlich ist. Das Programm ist in C und Qt geschrieben. Es gehört mit über zehn Jahren mehr oder weniger kontinuierlicher Entwicklungszeit zu den Dinosauriern unter den GUI-Tools für Firewalls. Unterstützte Firewalls und Userspace-Utilities sind:
Cisco ASA / Cisco PIX
Cisco FWSM
Cisco Router IOS ACL
HP ProCurve ACL
ipfilter
ipfw
iptables
PF
firewalld- und nftables-Syntax wird nicht unterstützt - für letzteres hilft unser Patch (siehe weiter unten).
- Links:
Source Code bis Version 5.1.0: https://sourceforge.net/projects/fwbuilder
Source Code ab 5.3.7: https://github.com/fwbuilder/fwbuilder
RPM ab 5.3.7: http://download.opensuse.org/repositories/security/openSUSE_Tumbleweed/x86_64/
Tipp
Was ist der Unterschied zwischen der Direction-Angabe „Inbound“, „Outbound“ und „Both“? Die übersetzten Rules - hier für iptables.
any > myhost:
Inbound:
INPUT -i eth0
Outbound:
OUTPUT -o eth0 -d myhost
Both:
INPUT -i eth0; OUTPUT -o eth0 -d myhost
myhost > any:
Inbound:
INPUT -i eth0 -s myhost; FORWARD -i eth0 -s myhost
Outbound:
OUTPUT -o eth0
Both:
INPUT -i eth0 -s myhost; FORWARD -i eth0 -s myhost; OUTPUT -o eth0
Installation und Konfiguration
- FwBuilder 5.3
Damit Fwbuilder 5.3.7 unter Fedora 34+ funktioniert, geht man wie folgt vor:
VER=5.3.7-60.136 wget http://download.opensuse.org/repositories/security/openSUSE_Tumbleweed/x86_64/fwbuilder-$VER.x86_64.rpm sudo rpm --install --file --nodeps fwbuilder-$VER.x86_64.rpm # or sudo rpm --upgrade --file --nodeps fwbuilder-$VER.x86_64.rpm
Das SRPM liegt auf http://download.opensuse.org/repositories/security/SLE_15_SP2/src/
- FwBuilder 5.1
Damit Fwbuilder 5.1 unter Fedora 30+ funktioniert, geht man wie folgt vor:
sudo dnf -y install net-snmp-libs wget http://download.opensuse.org/repositories/security/SLE_11_SP4/x86_64/fwbuilder-5.1.0.3599-31.1.x86_64.rpm sudo rpm --install --file --nodeps fwbuilder-5.1.0.3599-31.1.x86_64.rpm sudo ln -s /usr/lib64/libnetsnmp.so.30 /usr/lib64/libnetsnmp.so.40.1.0 sudo ln -s /usr/lib64/libssl.so.1.1.1k /usr/lib64/libssl.so.10 sudo ln -s /usr/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.10
Fwbuilder als Systemd-Service
[Unit]
Description=Firewall Builder
After=default.target openvpn-server@server.service fail2ban.service
[Service]
Type=oneshot
ExecStart=/etc/fwb.sh start
ExecStop=/etc/fwb.sh stop
ExecReload=/etc/fwb.sh start
RemainAfterExit=yes
[Install]
WantedBy=default.target
Pro- und Epilog für OpenVPN und Fail2ban
Wenn Fwbuilder gestartet wird, aber die OpenVPN-Schnittstelle tun0
noch nicht bereit ist, wird Fwbuilder fehlschlagen. Es wird daher empfohlen, im Prolog zu warten, bis das Interface verfügbar ist.
Andere Probleme treten im Zusammenspiel mit Fail2Ban auf: Die Chains und Regeln von Fail2Ban werden beim (Re-)Start von Fwbuilder gelöscht. Daher muss Fail2Ban im Prolog gestoppt und im Epilog wieder gestartet werden.
Die folgenden Skripte können auf allen Servern eingerichtet werden, da zuerst geprüft wird, ob OpenVPN oder Fail2Ban vorhanden und aktiv ist.
Bemerkung
Unter Debian ist /bin/sh
ein Link zu dash, das heisst, die Skripte müssen zwingend POSIX kompatibel sein. Erweitere Features wie if [[ ... ]]
funktionieren in den Prolog- und Epilog-Skripten daher nicht. Unter RHEL zeigt /bin/sh
dagegen auf bash
.
### Wait for OpenVPN interface ###
# returns 1 either if the service is disabled, or if it does not exist
if systemctl is-enabled openvpn-server@server.service > /dev/null 2>&1; then
log 'Enabled OpenVPN Server found, waiting for the OpenVPN interface'
device="tun0"
timeout=60
found=0
while [ $timeout -gt 0 ]; do
if ip link show $device > /dev/null 2>&1; then
found=1
break
else
timeout=$((timeout-=1))
sleep 1
fi
done
if [ "$found" -eq 0 ]; then
log "Cannot find $device! Trying to run the fwb script regardless..."
else
log "Found $device! Continuing with the fwb script..."
fi
fi
### Kill fail2ban ###
stopped_fail2ban=0
if systemctl is-active fail2ban.service > /dev/null 2>&1; then
stopped_fail2ban=1
systemctl stop --signal SIGKILL fail2ban
log "fail2ban.service killed, continuing with fwb script..."
else
log "fail2ban not running, continuing with fwb script..."
fi
if [ "$stopped_fail2ban" -eq 1 ]; then
log "Restarting fail2ban.service"
systemctl restart fail2ban
fi
Fwbuilder und nftables
Firewall Builder beherrscht noch kein nftables, was z.B. ab RHEL 8 zum Einsatz kommt. Folgender Patch auf der eigenen Maschine, die FwBuilder ausführt, hilft:
cat << 'EOF' | sudo tee /usr/local/bin/fwb_nft
#!/usr/bin/env bash
args="$@"
while [[ $# -gt 0 ]]
do
key="$1"
case $key in
-d)
OUTPUT_DIR="$2"
shift # past argument
shift # past value
;;
-o)
OUTPUT_FILE="$2"
shift # past argument
shift # past value
;;
*) # unknown option
shift # past argument
;;
esac
done
FWB_IPT=$(which fwb_ipt)
"$FWB_IPT" $args
sed --in-place '/^reset_all()/{N;s/$/\n nft flush ruleset/}' "$OUTPUT_DIR/$OUTPUT_FILE"
echo 'Adjusted for nftables'
EOF
Unter macOS muss das Script folgendermassen aussehen und gsed
muss installiert sein (brew install gsed
):
#!/usr/bin/env bash
args="$@"
while [[ $# -gt 0 ]]
do
key="$1"
case $key in
-d)
OUTPUT_DIR="$2"
shift # past argument
shift # past value
;;
-o)
OUTPUT_FILE="$2"
shift # past argument
shift # past value
;;
*) # unknown option
shift # past argument
;;
esac
done
FWB_IPT="/Applications/fwbuilder.app/Contents/MacOS/fwb_ipt"
"$FWB_IPT" $args
/opt/homebrew/bin/gsed --in-place '/^reset_all()/{N;s/$/\n nft flush ruleset/}' "$OUTPUT_DIR/$OUTPUT_FILE"
echo 'Adjusted for nftables'
chmod +x /usr/local/bin/fwb_nft
Danach im Firewall Builder einfach den Compiler für die RHEL 8-basierte Firewalls auf „Firewall > Firewall Settings > Compiler > Compiler: /usr/local/bin/fwb_nft
setzen.
FwBuilder Installer via Non-Root User mit Sudo
Falls man die Firewalls nicht direkt mit dem root-User deployen will oder kann, reicht auch ein normaler User, solange dieser sudo
ohne Passwort verwenden darf.
Dazu muss in der jeweiligen Firewall unter Firewall Settings
im Tab Installer
folgendes gesetzt sein:
Directory on the firewall where script should be installed:
/tmp
A command that installer should execute on the firewall in order to activate the policy:
sudo mv /tmp/fwb.sh /etc/fwb.sh && sudo chown root:root /etc/fwb.sh && if command -v restorecon 1> /dev/null; then sudo restorecon -F /etc/fwb.sh; fi && sudo /etc/fwb.sh
FwBuilder und Custom Modules
Beispiel: es soll die Regel iptables -I INPUT -m geoip ! --src-cc CH -j DROP
abgebildet werden, also das xtables GeoIP-Modul verwendet und Traffic ausserhalb der Schweiz geblockt werden.
Service > Custom > Add
Name: „IP from CH“
Code String:
-m geoip --src-cc CH
Log-Dateien auf DENY untersuchen
grep DENY /var/log/messages* | grep -Ev '( FIN | SYN | RST | ACK )'
Troubleshooting
- Firewall lässt sich grafisch nicht mehr editieren, Doppelklick geht nicht, Objekte lassen sich nicht verschieben usw.?
Einträge zur spezifische fwb-Datei im Config-File sind wohl kaputt. Was hilft: Firewall Builder beenden, und alle Zeilen, die auf die betroffene fwb-Datei verweisen (bei mir zum Beispiel
git\linuxfabrik\fwbuilder\4711\4711.fwb
), aus der Datei$HOME/.config/netcitadel.com/FirewallBuilder*.conf
entfernen.
Built on 2024-11-18