Debian - Shorewall - 1 interface

Un article de Wiki.OmBreNoiRe.net.

Vous être en train de lire comment Installer un serveur sécurisé sur Debian.

Sommaire Install Aptitude Locales SSHd Shorewall 6wall DHCP3-server Bind9 VsFTPd Apache/MySQL Mail BackupManager

Préambule 1 interface (Serveur Distant) 2 interfaces (Serveur Local/Partage connexion internet)

Sommaire

But de la configuration

Vous avez serveur qui ne possède qu'une interface (carte réseau), vous souhaitez héberger dessus votre site Web, qu'il serve de serveur mail, etc... Vous êtes au bon endroit.

Ce type de configuration convient parfaitement à un serveur dédié kimsufi ou dédibox).

Grâce à cette configuration, on filtre seulement les connexions qui vont vers le serveur (le serveur n'est pas limité en sortie).

Comme d'habitude, c'est du copier-coller, pour plus d'informations, je vous invite à aller sur le site de Shorewall qui est très bien documenté.

Pré-requis

Avant d'installer et paramétrer Shorewall, il faut s'assurer que votre configuration réseau est correcte. Pour cela voici différents fichiers que vous devez éditer afin qu'il contienne à peu prêt les mêmes informations (à adapter pour votre configuration bien sûr) :

Le fichier /etc/hostname

Il contient le nom de votre machine.

Fichier : /etc/hostname
monordi

Le fichier /etc/hosts

Il contient le nom de votre machine sur chacune des adresses des ips.

Fichier : /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.

# IPv4
127.0.0.1       localhost.localdomain localhost
1.2.3.4         monordi.mondomaine.net  monordi

Plusieurs remarques pour ce fichier :

  • Remplacer 1.2.3.4 par votre IP fixe
  • Remplacer monordi par votre nom de machine (le même que dans /etc/hostname)
  • Remplacer mondomaine.net par votre domaine auquel vous avez rattaché votre machine. Par exemple si votre adresse IP est 82.136.78.144 et que votre domaine est trucdeouf.fr, il vous faudra déclarer dans vos zones DNS (sur le serveur par la suite à l'étape du serveur DNS Bind9 ou chez votre registrar si vous ne désirer pas gérer vos DNS pour ce domaine).

Le fichier /etc/network/interfaces

Il contient la configuration de vos différentes interfaces.

Attention !
Je pars du principe que votre interface unique s'appelle eth0, si pour une raison ou pour une autre, ce n'était pas le cas : eth1 etc... Veuillez remplacer dans les fichiers de configuration qui vont suivre eth0 par votre nom d'interface !
Fichier : /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
        address 1.2.3.4
        netmask 255.255.255.0
        network 1.2.3.0
        broadcast 1.2.3.255
        gateway 1.2.3.1

Ce qu'il faut modifier :

  • 1.2.3.4 : Par votre adresse IP, par exemple 82.136.78.144
  • 255.255.255.0: A vous de vérifier avec celui qui est mis par défaut ou auprès de votre fournisseur d'accès (généralement c'est 255.255.255.0)
  • 1.2.3.1 : Généralement c'est votre adresse IP qui finie par 0, soit avec l'exemple, 82.136.78.0
  • 1.2.3.255 : Idem mais avec 255, soit avec l'exemple, 82.136.78.255
  • 1.2.3.1 : Idem mais avec 1, soit avec l'exemple, 82.136.78.1.
Attention !
Tous ces paramètres sont fournis par votre fournisseur, à vous d'en vérifier l'exactitude, si vous commettez une erreur dans ce fichier, le prochain reboot sera fatal et vous aller être condamné à dépanner votre machine
Astuce !

Si vous avez une Kimsufi et que vous souhaitez ajouter votre IP fail-back pour vous en servir comme deuxième adresse IP, c'est le moment, il vous faut alors ajouter à la fin du fichier /etc/network/interfaces les lignes suivantes :

Fichier : etc/network/interfaces
[...]
auto eth0:0
iface eth0:0 inet static
        address VOTRE.IP.FAIL.BACK
        netmask 255.255.255.255

Installation de Shorewall et ULOGd

Comme d'habitude grâce à Debian tout va très vite :

root@monordi:~# aptitude install shorewall make ulogd

Cela va normalement installer d'autres paquets, tout cela est normal.

ULOGd va permettre de rediriger les logs de Shorewall dans un fichier spécifique et vous permettre de voir plus clair dans vos logs.

Configuration de ULOGd

  • Il faut juste remplacer le fichier /etc/ulogd.conf par celui là :
Fichier : /etc/ulogd.conf
# Example configuration for ulogd
# $Id: ulogd.conf.in 714 2005-02-19 21:33:43Z laforge $
# Adapted to Debian by Achilleas Kotsis <achille@debian.gr>

[global]
######################################################################
# GLOBAL OPTIONS
######################################################################

# netlink multicast group (the same as the iptables --ulog-nlgroup param)
nlgroup=1

# logfile for status messages
logfile="/var/log/ulogd.log"

# loglevel: debug(1), info(3), notice(5), error(7) or fatal(8)
loglevel=5

# socket receive buffer size (should be at least the size of the
# in-kernel buffer (ipt_ULOG.o 'nlbufsiz' parameter)
rmem=131071

# libipulog/ulogd receive buffer size, should be > rmem
bufsize=150000

######################################################################
# PLUGIN OPTIONS
######################################################################

# We have to configure and load all the plugins we want to use

# general rules:
# 1. load the plugins _first_ from the global section
# 2. options for each plugin in seperate section below


#
# ulogd_BASE.so - interpreter plugin for basic IPv4 header fields
#                 you will always need this
plugin="/usr/lib/ulogd/ulogd_BASE.so"


# output plugins.
plugin="/usr/lib/ulogd/ulogd_LOGEMU.so"
#plugin="/usr/lib/ulogd/ulogd_OPRINT.so"
#plugin="/usr/lib/ulogd/ulogd_MYSQL.so"
#plugin="/usr/lib/ulogd/ulogd_PGSQL.so"
#plugin="/usr/lib/ulogd/ulogd_SQLITE3.so"
#plugin="/usr/lib/ulogd/ulogd_PCAP.so"

[LOGEMU]
file="/var/log/shorewall"
sync=1

[OPRINT]
file="/var/log/ulog/pktlog.log"

[MYSQL]
table="ulog"
pass="changeme"
user="laforge"
db="ulogd"
host="localhost"

[PGSQL]
table="ulog"
schema="public"
pass="changeme"
user="postgres"
db="ulogd"
host="localhost"

[SQLITE3]
table="ulog"
db="/path/to/sqlite/db"
buffer=200

[PCAP]
file="/var/log/ulog/pcap.log"
sync=1
  • Et créer le fichier de log, comme ceci et on redémarre :
root@monordi:~# touch /var/log/shorewall

root@monordi:~# chgrp adm /var/log/shorewall root@monordi:~# reboot

Configuration de Shorewall

Presque tout se passe dans /etc/shorewall

Sauvegarde configuration d'origine

Comme je vous donne une configuration clé en main, il vaut mieux remplacer directement les fichiers installés par défaut par les miens. Mais on sauvegarde tout de même.

root@monordi:~# cd /etc/shorewall

root@monordi:~# mkdir orig
root@monordi:~# mv * orig
mv: ne peut déplacer `orig' vers un sous-répertoire de lui-même `orig/orig'
root@monordi:~# mv orig/Makefile .

Création des fichiers de configuration

Avec emacs, il vous suffit de créer chacun des fichiers suivants :

Le fichier /etc/shorewall/shorewall.conf

La seule chose à modifier sur ce fichier est DISABLE_IPV6=Yes par DISABLE_IPV6=No si vous souhaitez utiliser l'IPv6 (n'oubliez pas d'installer un firewall IPv6 dans ce cas !).

Fichier : /etc/shorewall/shorewall.conf
#
#  /etc/shorewall/shorewall.conf V3.2
#
STARTUP_ENABLED=Yes
VERBOSITY=1
LOG=ULOG
LOGFILE=/var/log/shorewall
LOGFORMAT="Shorewall:%s:%s:"
LOGTAGONLY=No
LOGRATE=
LOGBURST=
LOGALLNEW=
BLACKLIST_LOGLEVEL=
MACLIST_LOG_LEVEL=$LOG
TCP_FLAGS_LOG_LEVEL=$LOG
RFC1918_LOG_LEVEL=$LOG
SMURF_LOG_LEVEL=$LOG
LOG_MARTIANS=No
IPTABLES=
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
SHOREWALL_SHELL=/bin/sh
SUBSYSLOCK=""
MODULESDIR=
CONFIG_PATH=/etc/shorewall:/usr/share/shorewall
RESTOREFILE=
IPSECFILE=zones
IP_FORWARDING=Keep
ADD_IP_ALIASES=Yes
ADD_SNAT_ALIASES=No
RETAIN_ALIASES=No
TC_ENABLED=Internal
TC_EXPERT=No
CLEAR_TC=Yes
MARK_IN_FORWARD_CHAIN=No
CLAMPMSS=No
ROUTE_FILTER=Yes
DETECT_DNAT_IPADDRS=No
MUTEX_TIMEOUT=60
ADMINISABSENTMINDED=Yes
BLACKLISTNEWONLY=Yes
DELAYBLACKLISTLOAD=No
MODULE_SUFFIX=
DISABLE_IPV6=Yes
BRIDGING=No
DYNAMIC_ZONES=No
PKTTYPE=Yes
RFC1918_STRICT=No
MACLIST_TABLE=filter
MACLIST_TTL=
SAVE_IPSETS=No
MAPOLDACTIONS=No
FASTACCEPT=No
IMPLICIT_CONTINUE=Yes
HIGH_ROUTE_MARKS=No
BLACKLIST_DISPOSITION=DROP
MACLIST_DISPOSITION=REJECT
TCP_FLAGS_DISPOSITION=DROP

Le fichier /etc/shorewall/blacklist

Vierge pour l'instant, mais si vous êtes amenés à bloquer des IP, il vous suffira de les ajouter avant la #LAST LINE.

Fichier : /etc/shorewall/blacklist
#
# Shorewall version 3.2 - Blacklist File
#
###############################################################################
#ADDRESS/SUBNET         PROTOCOL        PORT


#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
À noter !
  • En ajoutant une IP vous lui interdisez de se connecter à vous, sur TOUS les ports, mais VOUS pouvez encore la contacter.
  • Veuillez à blacklister uniquement TEMPORAIREMENT pour 2 raisons :
    • Certaines IP sont dynamiques
    • Les IP fixes peuvent changer de propriétaire
  • Après avoir modifié ce fichier n'oubliez pas de faire un make dans le répertoire /etc/shorewall.

Le fichier /etc/shorewall/interfaces

Fichier : /etc/shorewall/interfaces
#
# Shorewall version 3.2 - Interfaces File for one-interface configuration.
#
###############################################################################
#ZONE   INTERFACE       BROADCAST       OPTIONS
net     eth0            detect          norfc1918,routefilter,dhcp,tcpflags,blacklist,nosmurfs
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

Le fichier /etc/shorewall/policy

Dans ce fichier est spécifié le comportement général de Shorewall (sans qu'aucune règle ne soit mis en place dans le fichier /etc/shorewall/rules).

Fichier : /etc/shorewall/policy
#
# Shorewall version 3.2 - Policy File for one-interface configuration.
#
###############################################################################
#SOURCE         DEST            POLICY          LOG LEVEL       LIMIT:BURST
$FW             net             ACCEPT
net             $FW             DROP            $LOG
net             all             DROP            $LOG
# The FOLLOWING POLICY MUST BE LAST
all             all             REJECT          $LOG
#LAST LINE -- ADD YOUR ENTRIES ABOVE THIS LINE -- DO NOT REMOVE

Le fichier /etc/shorewall/zones

Fichier : /etc/shorewall/zones
#
# Shorewall version 3.2 - Zones File for one-interface configuration.
#
###############################################################################
#ZONE   TYPE    OPTIONS                 IN                      OUT
#                                       OPTIONS                 OPTIONS
fw      firewall
net     ipv4
#LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE

Le fichier /etc/shorewall/rules

On attaque le fichier de configuration que VOUS allez devoir personnaliser. Je vous donne ici la configuration qu'il faut avec les services que je vous fais installer par la suite. Si vous ne voulez pas, par exemple, installer de serveur ftp, n'oubliez pas de fermer les ports en commentant (avec #) ou supprimant les lignes dans le fichier /etc/shorewall/rules.

Fichier : /etc/shorewall/rules
#
# Shorewall version 3.2 - Rules File for one-interface configuration.
#
#############################################################################################################
#ACTION         SOURCE          DEST            PROTO   DEST    SOURCE          ORIGINAL        RATE            USER/
#                                                       PORT    PORT(S)         DEST            LIMIT           GROUP

# Accept ping
ACCEPT          net             $FW       icmp    8

# Pour le serveur SMTP
ACCEPT          net             $FW       tcp     25

# Pour le serveur POP
ACCEPT          net             $FW       tcp     110

# Pour le serveur IMAP
ACCEPT          net             $FW       tcp     143
ACCEPT          net             $FW       tcp     993

# Accept FTP (port NON standard et mode PASSIF)
ACCEPT          net             $FW       tcp     891
ACCEPT          net             $FW       tcp     890
ACCEPT          net             $FW       tcp     44600:44700

# Accept DNS
ACCEPT          net             $FW       tcp     53
ACCEPT          net             $FW       udp     53

# Accept SSH (port NON standard)
ACCEPT          net             $FW       tcp     52

# SERVEUR WEB
ACCEPT          net             $FW       tcp     80
ACCEPT          net             $FW       tcp     443

# On interdit le port 113 bizarrement rester ouvert
DROP            net             $FW             tcp     113
DROP            net             $FW             udp     113

#LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE
Problème connu !
Shorewall ne ferme pas le port 113 de façon automatique, à vous de le spécifier (ce qui est fait ici)

La structure de se fichier est simple, pour ouvrir un port vous n'avez qu'à ajouter une ligne sous se format :

Règle Firewall : Ouverture d'un port
ACCEPT net $FW PROTOCOLE PORT

En remplaçant :

  • PROTOCOLE par tcp ou udp
  • PORT par le numéro du port d'écoute

Vous pouvez d'ailleurs cibler un peu plus vos requêtes:

  • Mettre net:IP IP étant une IP externe, en faisant cela vous n'accepter les requêtes QUE de cette IP
  • Mettre $FW:IP IP étant l'une de vos IP sur le serveur (utile quand on a 2 IP comme avec la fail-back de la Kimsufi, pour n'ouvrir par exemple un service que sur l'une des 2 IP)
À noter !
  • Faites des règles les plus précises possibles (à chaque fois que vous ajouter une règle, vous faites un trou dans votre firewall. Il vaut mieux plein de petit trou que peu de grand trou.
  • Après avoir modifié ce fichier n'oubliez pas de faire un make dans le répertoire /etc/shorewall.

Il existe d'autre types de règles comme REDIRECT par exemple qui peut vous permettre de rediriger un port.
Mettons que vous souhaitiez vous connecter depuis votre faculté sur votre serveur en SSH, mais que la fac bloque votre port non standard, mais ouvre le port standard. Vous pouvez spécifier une règle qui va rediriger les requetes faites depuis votre fac sur le port standard vers le port non standard comme ceci :

Règle Firewall : Redirection de port grâce à REDIRECT
REDIRECT        net:IP.DE.VOTRE.FAC       52    tcp     22      -       -

Modification du fichier /etc/default/shorewall

Se fichier est configurer pour empêcher Shorewall de se lancer par défaut sans configuration. Maintenant qu'il est configurer il faut le modifier comme ceci :

Fichier : /etc/default/shorewall
# prevent startup with default configuration
# set the below variable to 1 in order to allow shorewall to start
startup=1

Premier lancement de Shorewall

root@monordi:~# cd /etc/shorewall

root@monordi:~# chmod 640 *
root@monordi:~# chmod 755 orig
root@monordi:~# make

Attention !
NE FERMEZ PAS LA SESSION SSH EN COURS ! Essayez tout de suite d'en ouvrir une autre en parallèle, si cela fonctionne c'est que Shorewall ne bloque pas le port, ce qui indique soit qu'il ne fonctionne pas, soit qu'il est bien configuré ;)

Verification du filtrage

Lancer la commande suivante :

root@monordi:~# tail -f /var/log/shorewall

En parallèle, ouvrez un explorateur web et taper l'adresse suivante : http://IP.DE.VOTRE.SERVEUR:PORT PORT étant un port NON ouvert bien sûr, par exemple 1037 en prenant la configuration que je vous ai donnée. Avec l'IP prise en exemple plus haut : http://82.136.78.144:1037

Revenez à votre terminal SSH vous devez voir ce genre de ligne apparaitre :

root@monordi:~# tail -f /var/log/shorewall
Jun 22 13:49:52 monordi Shorewall:net2fw:DROP: IN=eth0 OUT= MAC=00:12:AA:BB:CC:DD:EE:FF:00:11:AA:BB:CC:DD SRC=96.128.14.63 DST=82.136.78.144 LEN=48 TOS=00 PREC=0x00 TTL=116 ID=4829 DF PROTO=TCP SPT=54671 DPT=1037 SEQ=416072178 ACK=0 WINDOW=8192 SYN URGP=0

Ce qu'il faut regarder dans toutes ces informations c'est :

  • net2fw : c'est une requête qui vient du net vers le serveur
  • IN=eth0 et OUT= : la requête vient rentre par eth0 et rien n'allez sortir (c'est donc bien une requête qui vient du net)
  • DPT=1037 : C'est le port D'arriver de la requête, donc ici notre port local, à savoir 1037 fermé :)
  • SPT=54671 : C'est le port de départ (Start) qui n'apporte pas d'information car c'est le port de la machine distante
  • SRC=96.128.14.63 : L'adresse IP qui a réalisé cette requête (c'est ce genre d'IP qu'il faut ajouter dans votre fichier /etc/shorewall/blacklist si elle revient trop fréquemment.
  • DST=82.136.78.144 C'est votre IP ;)

Modification de la configuration

A chaque fois que je vous aller modifier un fichier (normalement vous n'avez plus qu'à modifier /etc/shorewall/rules et /etc/shorewall/blacklist) n'oubliez de réaliser les commandes suivantes :

root@monordi:~# cd /etc/shorewall

root@monordi:~# make

Conclusion

Votre serveur dispose maintenant d'un firewall fiable!

Vous pouvez passer à l'installation de votre firewall pour IPv6, ou si vous ne souhaitez pas utiliser IPv6, passer directement à l'installation de Bind 9, le serveur DNS (vous remarquerez que je vous fait sauter l'étape du serveur dhcp étant donné que votre présence ici signifie que vous n'allez pas en avoir besoin).

Affichages
Boîte à outils
Publicité