UFW - Uncomplicated Firewall

Gufw est l'interface graphique de Ufw (intégré à ubuntu, basé sup iptable), cette page concerne les lignes de commandes ufw et ses fichiers de configuration. Vers ma page commandes réseau linux (avec netstat et dig).
fail2ban : lit les logs de divers services (à la recherche d'erreurs d'authentification répétées) et ajoute une règle iptables pour bannir l'adresse IP.

Surveiller - tips netstat

voir les ports TCP ouverts: sudo netstat -napt | grep LISTEN      et voir les ports UDP ouverts: sudo netstat -napu     option -c en continu
voir ports ouverts en écoute (udp+tcp): sudo netstat -naptu | grep LISTEN

Pour windows: voir les connections actives netstat -ano  noter le PID puis netstat parameter -s displays per-protocol statistics

Commandes de Ufw

vérifier état: sudo ufw status verbose     sudo ufw status -> état et règles en cours (policy active). Dans la sortie générée par status, Anywhere=any=0.0.0.0/0.

Commandes ufw et sortie de ufw status
commandes ufw résultat de ufw status
ufw allow in on eth0 from 192.168.0.0/16
ufw allow out on eth1 to 10.0.0.0/8
ufw route allow in on eth0 out on eth1  to  10.0.0.0/8  from 192.168.0.0/16
To                          Action                 From
 --                           ------                    ----
Anywhere on eth0   ALLOW            192.168.0.0/16
10.0.0.0/8                ALLOW OUT   Anywhere on eth1
10.0.0.0/8 on eth1   ALLOW FWD  192.168.0.0/16 on eth0

sudo ufw enable  ->   enable disable ou reload   mais enable: l'active au boot + recharge fw (=reload)

L'ajout de l'option --dry-run à la commande ufw affichera les règles sans les appliquer. Par ex, tester   sudo ufw --dry-run allow samba

Voir profils d'application:   ufw app list   (par ex, liste: cups, samba ; les fichiers de conf sont à /etc/ufw/applications.d/)
fichiers de règle à lire: /etc/ufw/fichiers.rules  et à   /lib/ufw/user.rules

sudo ufw delete deny 80/tcp   efface la règle "deny 80/tcp"
sudo ufw reset   retour à la conf par défaut, mais il existe aussi sudo ufw reload

policy par défaut: ex de déclaration: sudo ufw default reject. Quand on change la policy par défaut, les règles existantes devont etre migrées manuellement.
syntaxe: sudo ufw default allow|deny|reject incoming|outcoming|routed

ufw --help ->   ufw version (affiche ufw 0.34~rc-0ubuntu2)

Application profile commands: 
 app list                         liste les PROFILEs (ex: CUPS Samba... sensible à la casse)
 app info PROFILE         montre information. Ex: sudo ufw app info CUPS
 app update PROFILE    update PROFILE
 app default ARG           définir la policy d'application default

règles et lignes (syntaxe)

Ne voir que les règles, avec leur numéro : sudo ufw status numbered

sudo ufw --dry-run delete 1  (mais n'effacera pas la règle ipv6 associée)
sudo ufw --dry-run insert 10 allow from 192.168.3.102    (mais si on n'a que 5 règles, retourne une erreur)

Pour bloquer l'accès au port TCP 22 depuis 192.168.0.1 et 192.168.0.7 mais en permettant aux autres IP du lan (ok pour les 192.168.0.x avec x<>1 et 7) - car il lit de haut en bas (et s'arrète au 1er match)

sudo ufw deny from 192.168.0.1 to any port 22
sudo ufw deny from 192.168.0.7 to any port 22
sudo ufw allow from 192.168.0.0/24 to any port 22 proto tcp

Syntaxe ufw (proche du PF de OpenBSD)

Allow et Deny
Syntaxe Ex

sudo ufw allow <port>/<optional: protocol>
sudo ufw deny <port>/<optional: protocol>

si pas de direction (in ou out) alors la règle s'applique sur in

laisser entrer tcp et udp sur 53   sudo ufw allow 53
laisser entrer tcp sur 53       sudo ufw allow 53/tcp

ufw allow in http
ufw reject out smtp
ufw deny proto tcp to any port 80

deny/allow par port et IP

sudo ufw deny from <ip address> to <protocol> port <port number>

sudo ufw allow from <ip address> to any port <port number>

bloquer paquets de   sudo ufw deny from 207.46.232.182

permettre un accès ssh depuis l'ensemble du sous-réseau:
sudo ufw allow proto tcp from 192.168.0.0/24 to any port 22

ex du man (14.04 lts)  
 ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 25 bloque tout traffic en provenance de la classe A RFC1918 vers le port TCP 192.168.0.1:25
ufw deny proto tcp from 2001:db8::/32 to any port 25 bloque tout traffic en provenance de l'IPv6 2001:db8::/32  vers le port 25 sur cette machine.
ufw allow proto tcp from any to any port 80,443,8080:8090 ouvre les ports cités. Cette liste de ports (chiffres, sans espaces) doit etre modifiée "comme un tout" - on ne pourra pas par la suite, par ex, retirer le port 443. Et le nb max de port est 15 (sachant que ":" compte pour2).
ufw delete deny 80/tcp efface la règle "ufw deny 80/tcp"

UFW lit /etc/services donc on peut utiliser les noms des services (voir la liste des services: less /etc/services) sudo ufw allow <service name>

Les règles qui doivent etre routées/forwardées doivent commencer par route - la syntaxe diffère ici de PF car conventions netfilter de chaine FORWARD).
Ex: ufw route allow in on eth1 out on eth2 qui autorise le traffic routé vers eth2 qui arrive en in eth0 pour traverser le firewall / pare-feu.
L'ip forwarding se configure dans sysctl.conf

limit rules voir http://www.debian-administration.org/articles/187

Par défaut, ufw applique les règles sur toutes les interfaces. Les alias d'interfaces ne sont pas supportées (ex vmnet1 et 8). Il faut donc préciser la direction et l'interface (par ex pour autoriser tout nouveau traffic entrant http sur eth0: ufw allow in on eth0 to any port 80 proto tcp)

Par défaut, UFW laisse passer icmp (voir before.rules).

  • sudo ufw status
  • sudo ufw logging on    et    sudo ufw logging off

logs et reports (du man), avantages du raw

sudo ufw show raw

raw est complet. les autres (builtins before-rules user-rules after-rules logging-rules listening added) sont des sous-ensembles de raw.

listening listée dans l'ordre d'évaluation du kernel (le 1er match gagne). default policy n'y est pas et tcp6 et udp6 ne sont montrées que si ipv6 a été activé.
added règles ajoutées en ligne de commande

log de ufw fonctionnent par règle

Par défaut, Ufw ne logue pas un paquet qui correspond à une règle. log logera les nouvelles connections qui correspondent à règle ; log-all logera tous les paquets qui matchent la règle. Ex: ufw allow log 22/tcp

ufw logging LEVEL  Par défaut à low ; peut prendre: off low medium hight ou full:

  • low = log les bloqués qui ne matchent pas la defaut policy (avec limitation de taux) + ceux qui match une règle avec l'instruction log
  • medium = low + les paquets qui ne matchent pas la default policy en ALLOW + INVALID + toute nouvelle connection. C'est logué avec limitation de taux.
  • hight = medium (sans limitation de taux) + tous les paquets avec limitation de taux
  • full = complet sans limitation de taux

Ci joint, 2 fichiers qui regroupent les principaux fichiers de conf (avant modif d'un client saucy 13.10, avril 2014): etc-ufw.txt et etc-ufw2.txt.

Plus (ressources web)