Server mit der UFW (Uncomplicated Firewall) absichern

Ein gutes Mittel um einen Linux-Server einfach abzusichern ist die UFW (Uncomplicated Firewall).
UFW ist ein Programm zum Verwalten der netfilter firewall des Linux-Kernels, es nutzt iptables und vereinfacht die Konfiguration der Regeln ungemein.

Installation

UFW ist in den Debian-Paketen (wie auch in Ubuntu) bereits enthalten, daher kann das Tool einfach installiert werden:

root@myserver:~# apt-get install ufw

IPv6 bei Bedarf deaktivieren

Um IPv6 zu deaktivieren, ändern in der Datei /etc/default/ufw die Zeile IPV6= yes auf IPV6=no

root@myserver:~# cat /etc/default/ufw

# /etc/default/ufw
#

# Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback
# accepted). You will need to 'disable' and then 'enable' the firewall for
# the changes to take affect.
IPV6=no
.
.

Aufrufen der Hilfe

Eine einfache Hilfe finden wir so:

root@myserver:~# ufw help

Usage: ufw COMMAND

Commands:
 enable                          enables the firewall
 disable                         disables the firewall
 default ARG                     set default policy
 logging LEVEL                   set logging to LEVEL
 allow ARGS                      add allow rule
 deny ARGS                       add deny rule
 reject ARGS                     add reject rule
 limit ARGS                      add limit rule
 delete RULE|NUM                 delete RULE
 insert NUM RULE                 insert RULE at NUM
 route RULE                      add route RULE
 route delete RULE|NUM           delete route RULE
 route insert NUM RULE           insert route RULE at NUM
 reload                          reload firewall
 reset                           reset firewall
 status                          show firewall status
 status numbered                 show firewall status as numbered list of RULES
 status verbose                  show verbose firewall status
 show ARG                        show firewall report
 version                         display version information

Application profile commands:
 app list                        list application profiles
 app info PROFILE                show information on PROFILE
 app update PROFILE              update PROFILE
 app default ARG                 set default application policy

Vorgefertigte Profile

Die ufw hat vorgefertigte Profile für verschiedene Dienste, Applications genannt, welche wir wie folgt auflisten können:

root@myserver:~# ufw app list
Available applications:
  AIM
  Bonjour
  CIFS
  DNS
  Deluge
  IMAP
  IMAPS
  IPP
  KTorrent
  Kerberos Admin
  Kerberos Full
  Kerberos KDC
  Kerberos Password
  LDAP
  LDAPS
  LPD
  MSN
  MSN SSL
  Mail submission
  NFS
  OpenSSH
  POP3
  POP3S
  PeopleNearby
  SMTP
  SSH
  Socks
  Telnet
  Transmission
  Transparent Proxy
  VNC
  WWW
  WWW Cache
  WWW Full
  WWW Secure
  XMPP
  Yahoo
  qBittorrent
  svnserve

Die Dienste verwenden die Standardports, so z.B. Port 22 für SSH, Port 80 für WWW oder Port 443 für WWW Secure.

Weitere Informationen bezüglich der Ports finden wir in den Konfigurationsdateien:

root@myserver:~# cd /etc/ufw/applications.d
root@myserver:/etc/ufw/applications.d# ls -al
insgesamt 52
drwxr-xr-x 2 root root 4096 Jun  7 13:58 .
drwxr-xr-x 3 root root 4096 Feb  7  2018 ..
-rw-r--r-- 1 root root  145 Nov 18  2017 openssh-server
-rw-r--r-- 1 root root  353 Feb 18  2016 ufw-bittorent
-rw-r--r-- 1 root root  627 Feb 18  2016 ufw-chat
-rw-r--r-- 1 root root  513 Feb 18  2016 ufw-directoryserver
-rw-r--r-- 1 root root   89 Feb 18  2016 ufw-dnsserver
-rw-r--r-- 1 root root  358 Feb 18  2016 ufw-fileserver
-rw-r--r-- 1 root root  212 Feb 18  2016 ufw-loginserver
-rw-r--r-- 1 root root  524 Feb 18  2016 ufw-mailserver
-rw-r--r-- 1 root root  131 Feb 18  2016 ufw-printserver
-rw-r--r-- 1 root root  155 Feb 18  2016 ufw-proxyserver
-rw-r--r-- 1 root root  320 Feb 18  2016 ufw-webserver

root@myserver:/etc/ufw/applications.d#  cat ufw-webserver
[WWW]
title=Web Server
description=Web server
ports=80/tcp

[WWW Secure]
title=Web Server (HTTPS)
description=Web Server (HTTPS)
ports=443/tcp

[WWW Full]
title=Web Server (HTTP,HTTPS)
description=Web Server (HTTP,HTTPS)
ports=80,443/tcp

[WWW Cache]
title=Web Server (8080)
description=Web Server (8080)
ports=8080/tcp

Die Konfigurationsdateien in diesem Verzeichnis können wir durch eigene Einträge ergänzen oder wir können auch neue Konfigurationsdateien mit unseren Einträgen erstellen.

Hinzufügen und Löschen von Regeln

In diesem Beispiel wird der SSH-Zugang für das lokale Netzwerk (192.168.0.0/24) und ein Webzugriff für alle eingerichtet, IPv6 wurde deaktiviert:

root@myserver:~# ufw allow from 192.168.0.0/24 to any app SSH
Rule added
root@myserver:~#  ufw allow 'WWW Full'
Rule added

Jetzt können wir die Firewall starten, wie Warnung müssen wir mit ‚y‘ bestätigen:

root@myserver:~# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Den Status können wir wie folgt abfragen:

root@myserver:~# ufw status
Status: active

To                         Action      From
--                         ------      ----
SSH                        ALLOW       192.168.0.0/24
WWW Full                   ALLOW       Anywhere

Einen detailierten Status mit Angabe der Ports können wir wie folgt abfragen:

root@myserver:~# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (SSH)               ALLOW IN    192.168.0.0/24
80,443/tcp (WWW Full)      ALLOW IN    Anywhere

Um eine Regel wieder zu löschen rufen wir den Status wie folgt auf:

root@myserver:~# ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] SSH                        ALLOW IN    192.168.0.0/24
[ 2] WWW Full                   ALLOW IN    Anywhere

Nun können wir über die Nummer der Regel diese löschen:

root@myserver:~# ufw delete 2
Deleting:
 allow 'WWW Full'
Proceed with operation (y|n)?y
Rule deleted

Weitere Beispiele

Ausgehender Pakete zu 192.168.0.1 blocken:

ufw deny out from any to 192.168.0.1

Eingehende Pakete auf Port 12345 zulassen:

ufw allow to any port 12345

Eingehende UDP Pakete auf Port 54321 zulassen:

ufw allow proto udp to any port 54321

Eine neue Regel an erster Postition einfügen:

ufw prepend allow ...

Eine neue Regel vor der zweiten Regel einfügen:

ufw insert 2 allow ...