[TUTORIEL] Mise en place d'un parefeu

Hello tout le monde !

Je vous mets un petit tuto pour l’installation d’un parefeu sur votre raspberry, afin de pouvoir bloquer des choses si besoin.
Personnellement, je l’ai fait chez moi, car je savais, mais j’ai vu, que nos petit appareil de domotique (Milight, Philips hue etc) chercher à se connecté sur internet. Hormis les mises à jours des appareils ou je peux comprendre qu’il faut un accès sur internet, pour le reste… ils n’ont absoluement rien à faire sur internet (Et encore moins à se connecté chez google, facebook amazon :stuck_out_tongue: )

J’ai fait un petit schéma pour un raspberry sans le wifi d’activé

raspberry

Nous avons donc notre raspberry, et il comporte deux zones :

  • fw : Firewall (lui même)
  • net : Tout ce qui va passer par la carte réseau filaire (Votre réseau local ET internet)

Dans le parefeu, il y aura cette notion de zones, ou l’ont pourra dire par exemple,

  • la zone fw à le droit d’aller dans la zone net pour le HTTP
  • La zone net à le droit d’accèder à la zone fw en HTTPS

Cela va permettre de bloquer tout le traffic, sauf ce que nous avons besoin, et ainsi, nous pourrons voir des logs de connexion refusé comme par exemple ceci :

Jan 31 08:13:31 gladys-dev kernel: [132489.897592] Shorewall:net-fw:REJECT:IN=eth0 OUT= MAC=b8:27:eb:ae:29:33:30:b5:c2:05:18:54:08:00:45:10:00:3c:3a:6b:40:00:40:06:7d:83 SRC=192.168.0.254 DST=192.168.0.111 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=14955 DF PROTO=TCP SPT=33496 DPT=23 WINDOW=29200 RES=0x00 SYN URGP=0

Dans cette exemple, j’ai tenté une connexion telnet sur mon raspberry, qui n’est pas autorisé dans le parefeu, et donc la requête à été bloquer par la parefeu.

Avant d’installer le parefeu, je vais lister les ports / protocole, qui seront indispensable pour le fonctionnement du raspberry en soit (Accès internet, mise à jours, connexion au store de gladys etc)

Ce que le raspberry doit pouvoir contacter sur internet

  • DNS (Résolution de nom de domaine ) : fw --> net
  • HTTP : fw --> net
  • HTTPS : fw --> net
  • NTP (Syncro heures systeme) : fw --> net
  • DHCP (Si vous utiliser un DHCP)

Ce qui doit entrer sur votre raspberry :

  • SSH (pour pouvoir vous y connecté en CLI) : net --> fw
  • HTTP / HTTPS : (Pour l’accès à l’interface web) : net --> fw
  • Port 8080 : (Un port de gladys) : net --> fw

L’installation pourra paraitre un peu longue, mais si besoin je peux faire un petit script rapide qui installe et configure le parefeu avec le minimum vital pour faire fonctionner Gladys :slight_smile:

Installation du parefeu

apt install shorewall

cd /etc/shorewall/

Fichier de zones

sudo nano zones

Contenu du fichier

#
# Shorewall - Sample Zones File for one-interface configuration.
# Copyright (C) 2006-2015 by the Shorewall Team
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# See the file README.txt for further details.
#-----------------------------------------------------------------------------
# For information about entries in this file, type "man shorewall-zones"
###############################################################################
## Zone
###############################################################################
#ZONE           TYPE    OPTIONS                 IN                      OUT
#                                               OPTIONS                 OPTIONS
fw              firewall
net             ipv4

Fichier des interfaces

sudo nano interfaces

Contenu du fichier

#
# Shorewall - Sample Interfaces File for one-interface configuration.
# Copyright (C) 2006-2015 by the Shorewall Team
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# See the file README.txt for further details.
#------------------------------------------------------------------------------
# For information about entries in this file, type "man shorewall-interfaces"
###############################################################################
?FORMAT 2
###############################################################################
#ZONE           INTERFACE       OPTIONS
net             eth0            dhcp,tcpflags,logmartians,nosmurfs,sourceroute=0

Fichier des règles

sudo nano rules

Contenu du fichier

# Shorewall - Sample Rules File for one-interface configuration.
# Copyright (C) 2006-2014 by the Shorewall Team
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# See the file README.txt for further details.
#------------------------------------------------------------------------------------------------------------
# For information on entries in this file, type "man shorewall-rules"
######################################################################################################################################################################################################
#ACTION         SOURCE          DEST            PROTO   DEST    SOURCE          ORIGINAL        RATE            USER/   MARK    CONNLIMIT       TIME    HEADERS         SWITCH          HELPER
#                                                       PORT    PORT(S)         DEST            LIMIT           GROUP
?SECTION ALL
?SECTION ESTABLISHED
?SECTION RELATED
?SECTION INVALID
?SECTION UNTRACKED
?SECTION NEW

# Drop packets in the INVALID state

Invalid(DROP)   all             all             tcp
#ACCEPT all all

################## fw #####################

## SSH
SSH(ACCEPT)             fw              net

## DNS
DNS(ACCEPT)             fw              net


### NTP
NTP(ACCEPT)             fw              net

### Mail
SMTP(ACCEPT)            fw              net
SMTPS(ACCEPT)           fw              net
IMAPS(ACCEPT)           fw              net
IMAP(ACCEPT)            fw              net
Submission(ACCEPT)      fw              net

### WEB
HTTP(ACCEPT)            fw              net
HTTPS(ACCEPT)           fw              net

### Ping
Ping(ACCEPT)            fw              all


### Gladys
HTTP(ACCEPT)            net             fw
HTTPS(ACCEPT)           net             fw
ACCEPT                  net             fw              tcp             8080
SSH(ACCEPT)        net             fw

Fichier de politiques

sudo nano policy

Contenu du fichier

#
# Shorewall - Sample Policy File for one-interface configuration.
# Copyright (C) 2006-2015 by the Shorewall Team
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# See the file README.txt for further details.
#-----------------------------------------------------------------------------
# For information about entries in this file, type "man shorewall-policy"
###############################################################################
#SOURCE         DEST            POLICY          LOG LEVEL       LIMIT:BURST
fw              all             REJECT          info
# The FOLLOWING POLICY MUST BE LAST
all             all             REJECT          info

Lancement du firewall

shorewall start

Vérification des logs

Avec putty par exemple, essayer de faire une connexion telnet sur votre raspberry, puis faite la commande suivante sur votre raspberry :

grep -i shorewall /var/log/syslog

Vous devriez y voir ceci

Jan 31 08:13:31 gladys-dev kernel: [132489.897592] Shorewall:net-fw:REJECT:IN=eth0 OUT= MAC=b8:27:eb:ae:29:33:30:b5:c2:05:18:54:08:00:45:10:00:3c:3a:6b:40:00:40:06:7d:83 SRC=192.168.0.254 DST=192.168.0.111 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=14955 DF PROTO=TCP SPT=33496 DPT=23 WINDOW=29200 RES=0x00 SYN URGP=0

Votre parefeu à donc bien bloquer la requête

Couple Shorewall à fail2ban

Installation fail2ban

sudo apt install fail2ban

On édite le fichier suivant

sudo nano /etc/fail2ban/jail.conf

Et on remplace la directive banaction par celle ci-dessous

banaction = shorewall

Restart fail2ban

sudo service fail2ban restart

On tente des connexions ssh bidon depuis une autre ip et on vérifie

[ 18:24:44 ] - [ pi @ gladys-dev ] - [ ~ ]
 -> sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed:	1
|  |- Total failed:	8
|  `- File list:	/var/log/auth.log
`- Actions
   |- Currently banned:	1
   |- Total banned:	1
   `- Banned IP list:	192.168.0.6

Vérification dans les règles iptables

[ 18:26:46 ] - [ pi @ gladys-dev ] - [ ~ ]
 -> sudo iptables -L  dynamic -nv 
Chain dynamic (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    1    60 reject     all  --  *      *       192.168.0.6          0.0.0.0/0 

Petit mot de la fin ? :slight_smile:

Bon alors dans cette configuration, cela va bloquer certaines requêtes que l’on peut affiner au besoin, si vous avez besoin n’hésitez pas. Mais, ce tuto est la base pour le prochain que je vais faire que je trouve plus utiles si on peut dire.

En gros, pour beaucoup de personne je pense, les appareils wifi (Milight, Philips, DLINK ou autres) sont brancher sur votre wifi de la box ? et donc si votre réseau local ? Et donc ces petits appareils, peuvent, potentiellement aller sur internet, ou regarder si vous avez un deux trois pc, des téléphones ou tout autres chose. Bon et bien donc notre petit raspberry à une carte wifi, ce sera donc de faire en sorte que votre raspberry devienne votre deuxième box. Vous pourrez donc paramétrer tout vos petits équipements sur le wifi du raspberry, gladys pourra travaillez avec, mais vos devices ne pourrons ni aller voir votre réseau “domestique”, ni aller sur internet voir Facebook & CO.

L’installation du point d’accès se résumer en un fichier, et la configuration du parefeu sera très proche de celle-ci avec deux ou trois chose en plus :slight_smile:

@Jean34 est-ce que ça te vas ?

@piznel voila au niveau des fichiers de configuration ce que cela donne, donc pour ton module que tu as développer, ce serait de lire ce genre de chose

### Mail
SMTP(ACCEPT)            fw              net
SMTPS(ACCEPT)           fw              net
IMAPS(ACCEPT)           fw              net
IMAP(ACCEPT)            fw              net
Submission(ACCEPT)      fw              net

### WEB
HTTP(ACCEPT)            fw              net
HTTPS(ACCEPT)           fw              net
4 Likes

@Totof Salut :slight_smile:

Tu es un tueur :+1:, j’ai lu, un peu en diagonale parce que j’ai peu de temps là, mais ce soir je me mets dessus dès que ma fille sera au plumard :stuck_out_tongue: .

J’éditerais mon message une fois fait.

1 Like

Salut @Totof

Super tuto et c’est génial pour la sécurité
est-il possible de le coupler avec fail2ban par exemple ?
grand Merci

@phoenix3472

Salut @phoenix3472,
Merci :slight_smile:

Euh oui il y a possibilité de le coupler avec fail2ban, mais il y a un petit paramétrage a faire pour que fail2ban travail avec shorewall.

Je vais rajouter ça ce week end :wink:
Et vu que tu en parle, je peux éventuellement voir pour faire une jail Gladys pour faire du ban sur l’authentification de l’interface web :slight_smile:

Salut @Totof

sa ça serais super j’ai hâte de mettre sa en place :smile:

Merci
@phoenix3472

Je pense que demain j’editerais aussi le poste pour rajouter la parti point d’accès wifi

@phoenix3472 tu utilise des devices wifi ?

@Totof Pour le moment non rien en wifi sur gladys mais ça pourrais venir !

@phoenix3472

Salut @phoenix3472 !

J’ai édité pour rajouter fail2ban :wink:

@Totof salut :slight_smile:

Hier j’ai mit en place ton tutoriel super bien expliqué :+1: , mais au lancement de shorewall je me retrouve avec cette erreur:

[email protected]:/etc/shorewall $ sudo shorewall start
Compiling using Shorewall 5.0.15.6...
Processing /etc/shorewall/params ...
Processing /etc/shorewall/shorewall.conf...
Loading Modules...
Compiling /etc/shorewall/zones...
Compiling /etc/shorewall/interfaces...
Determining Hosts in Zones...
Locating Action Files...
Compiling /etc/shorewall/policy...
Adding Anti-smurf Rules
Adding rules for DHCP
Compiling TCP Flags filtering...
Compiling Kernel Route Filtering...
Compiling Martian Logging...
Compiling Accept Source Routing...
Compiling MAC Filtration -- Phase 1...
Compiling /etc/shorewall/rules...
Compiling /etc/shorewall/conntrack...
Compiling MAC Filtration -- Phase 2...
Applying Policies...
Compiling /usr/share/shorewall/action.Reject for chain Reject...
Compiling /usr/share/shorewall/action.Broadcast for chain Broadcast...
Generating Rule Matrix...
Creating iptables-restore input...
Shorewall configuration compiled to /var/lib/shorewall/.start
Starting Shorewall....
Initializing...
Setting up Route Filtering...
Setting up Martian Logging...
   WARNING: Cannot set Martian logging on eth0
Setting up Accept Source Routing...
   WARNING: Cannot set Accept Source Routing on eth0
Preparing iptables-restore input...
Running /sbin/iptables-restore ...

Bon je comprend vite le warning (merci google trad)

   WARNING: Cannot set Martian logging on eth0
Setting up Accept Source Routing...
   WARNING: Cannot set Accept Source Routing on eth0

Problème pour joindre mon interface réseau, je fais un petit ifconfig et je vois que mon interface ne s’appel pas eth0 mais enxb827ebbcdeca, me demander pas pourquoi je n’en sait rien …
Bref pour palier au problème j’ai modifié le fichier /etc/shorewall/interfaces et l’installation s’est bien passée .

Par contre je ne peux pas avoir plusieurs sessions ssh avec putty, la première fonctionne bien mais si je veux en ouvrir une autre j’ai un beau “connection refused”.

Je n’ai pas pu creuser plus que cela par manque de temps.

Salut @Jean34

Bizarre pour ton nom d’interface mais pourquoi pas :slight_smile:

Hum en effet, je pense que j’ai oublier de mettre une petite règle…

Dans ce que j’ai poster, seul le raspberry peut faire du ssh…

## SSH
SSH(ACCEPT)             fw              net

Je vais éditer, mais rajoute dans les règles celle-ci

SSH(ACCEPT) net fw

Salut @Totof

Super merci pour ce super Tuto et merci d’avoir rajouter fail2ban.

Dit moi petite question je souhaiterais changer le port ssh 22 en autre chose j’ai chercher sur le net et trouver cette commande sudo nano /etc/ssh/sshd_config mais dans ce fichier toute est commenté avec #Port 22 j’ai essayer de changer le 22 en XXXX mais cela ne fonctionne pas. sais tu ou je peut trouver le fichier pour changer le port ?

Merci par avance @phoenix3472

Salut @phoenix3472

Tu étais dans le bon fichier, remplace

#Port 22

Par

Port XXXX

Puis reload le service

sudo service ssh reload

Vérifie ensuite avec la commande

ss -tln

Tu devrais voir ton nouveau port

Par contre pour le parefeu, il te faudra faire des ajustements.

Supprimer les ligns

SSH(ACCEPT)

Et les remplacer par

ACCEPT fw net tcp XXX
ACCEPT net fw tcp XXX

Histoire que tu ne soit pas bloquer par le parefeu :slight_smile:
Je te conseillerais même de rajouter avant les nouvelles règles dans le parefeu, changer le port, puis supprimer les anciennes règles en port 22

Salut @Totof

Super merci pour ta réponse rapide

@phoenix3472

Salut,

@phoenix3472 , normalement snips ne devrait plus fonctionner (tu l’as installé non ?) car il peut seulement se connecter au port 22 …

@Totof merci je regarderais ça et te tiendrais au jus :wink:

Salut @Jean34

Je n’ai pas changer mon port encore car justement je veux vérifier que rien d’autre comme gladys, snips ou autre chose n’a pas besoins du port 22 et que je serais bloquer donc je vais faire des tests sur une autre carte sd en clonant celle qui fonctionne.

@phoenix3472