Shorewall

Shorewall est un excellent pare-feu simple à configurer.

Installation

Linux général

Télécharger le source, et lancer une installation classique :

$ wget http://www.shorewall.net/pub/shorewall/4.4/shorewall-4.4.8/shorewall-4.4.8.2.tgz
$ tar –xvf shore*
$ ./install.sh

Fedora, Red Hat et CentOS

Encore une fois, des distributions récentes peuvent proposer shorewall. L'avantage est que la mise-à-jour est automatique, l'inconvénient est que vous n'avez pas toujours la dernière vesion. Dans ce cas, l'installation est cependant beaucoup plus simple :

yum install shorewall

Il ne reste plus qu'à configurer Shorewall, en comprenant un peu ce que l'on fait...

Ubuntu et Debian

C'est à peu près aussi simple que sur Red Hat like :

apt-get install shorewall

Par contre attention, pour que Shorewall démarre automatiquement, n'oubliez pas de mettre de modifier le fichier /etc/default/shorewall et de mettre startup=1.

Protections Linux

Il faut aussi penser à autoriser shorewall avec AppArmor, SELinux, etc. Pour AppArmor : http://doc.ubuntu-fr.org/apparmor.

Configuration en hôte simple

Définissez le fichier interfaces

#ZONE   INTERFACE       BROADCAST       OPTIONS
net     vmbr0           detect          dhcp,routefilter,nosmurfs,logmartians,tcpflags
dmz     venet0          detect          tcpflags,routeback

Définissez le fichier zones

#ZONE   TYPE            OPTIONS         IN                      OUT
#                                       OPTIONS                 OPTIONS
fw      firewall
net     ipv4
dmz     ipv4


Définissez le fichier policy

A noter : on peut abaisser le niveau de log.

#SOURCE     DEST        POLICY          LOG             LIMIT:  CONNLIMIT:
#                                       LEVEL           BURST   MASK
# Depuis le Firewall
#
fw      fw              ACCEPT
fw      net             ACCEPT
fw      dmz             ACCEPT
#
# Depuis la DMZ
#
dmz     dmz             ACCEPT
dmz     net             ACCEPT
dmz     fw              DROP            info
#
# Depuis internet
#
net     fw              DROP            info
net     dmz             DROP            info
#
# Catch-all (pour shorewall)
#
all     all             REJECT          info

Définissez le fichier rules

Pour commencer, on met les règles de base pour permettre la connexion, ici dans le cadre d'une machine Proxmox.

#ACTION         SOURCE          DEST            PROTO   DEST    SOURCE          ORIGINAL        RATE            USER/   MARK    CONNLIMIT       TIME
#                                                       PORT    PORT(S)         DEST            LIMIT           GROUP
#SECTION ESTABLISHED
#SECTION RELATED
SECTION NEW
#
#  Accept SSH connections for administration
#
SSH/ACCEPT      net             $FW
SSH/ACCEPT      net             dmz
#
#  Permit access to Proxmox Manager and Console
#
HTTPS/ACCEPT    net             $FW
HTTP/ACCEPT     net             $FW
ACCEPT          net             $FW                     udp     5900,5901
ACCEPT          net             $FW                     tcp     5900,5901
ACCEPT          net             $FW                     udp     8006
ACCEPT          net             $FW                     tcp     8006
#
#  Allow Ping(s)
#
Ping/ACCEPT     dmz             $FW
Ping/ACCEPT     net             dmz
Ping/ACCEPT     net             $FW
ACCEPT          $FW             dmz             icmp
ACCEPT          $FW             net             icmp

Il faut ensuite ajouter les règles pour les machines virtuelles associées :

# -------------------------- #
#         Machine V1         #
# -------------------------- #
# > Ici pour une utilisation de base de serveur Web avec MySQL, apache. A adapter selon les services ouverts. IPx désigne les adresses IP de la machine virtuelle.
Web/ACCEPT      net             dmz:IP1,IP2,IP3...
DNS/ACCEPT      net             dmz:IP1,IP2,IP3...
FTP/ACCEPT      net             dmz:IP1,IP2,IP3...
NTP/ACCEPT      net             dmz:IP1,IP2,IP3...
#IMAP/ACCEPT    net             dmz:IP1,IP2,IP3...
#POP3/ACCEPT    net             dmz:IP1,IP2,IP3...
#SMTP/ACCEPT    net             dmz:IP1,IP2,IP3...
#SPAMD/ACCEPT   net             dmz:IP1,IP2,IP3...
ACCEPT          net             dmz:IP1,IP2,IP3...                tcp     3306,953,8080

Pour Plesk, ajouter :

ACCEPT          net             dmz:IP1,IP2,IP3...               udp     8443
ACCEPT          net             dmz:IP1,IP2,IP3...               tcp     8443,8447

Pour CPanel, ajouter :

ACCEPT         net             dmz:IP1,IP2,IP3...               tcp     2077,2078,2082,2083,2086,2087,2089,2095,2096
ACCEPT         net             dmz:IP1,IP2,IP3...               udp     2077,2078

Si vous utilisez un collecteur de logs (par exemple Ossec) :

ACCEPT          net             dmz:37.59.71.249               udp     514,1514

Le bug Ubuntu 15.04 et suivants

Sur Ubuntu 15, shorewall semble ne pas démarrer. On peut considérer cela comme très gênant. Peu d'informations sont disponibles sur le web, à part un bug ouvert[1] chez Debian. Une solution semble être l'installation d'un package supplémentaire, shorewall-init. Dans mon cas, ça a marché.