.. Wiki Lesfourmisduweb documentation master file, created by sphinx-quickstart on Thu Apr 25 13:32:03 2019. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. .. Reminder for header structure : Niveau 1 : ==================== Niveau 2 : -------------------- Niveau 3 : ++++++++++++++++++++ Niveau 4 : """""""""""""""""""" Niveau 5 : ^^^^^^^^^^^^^^^^^^^^ Shorewall ================================================ .. image:: shorewall.png :align: center :alt: Shorewall Logo Shorewall est une solution que j'ai découvert chez TIS. Je trouve que c'est une solution sans fioriture, ça a l'avantage d'être extrement light. De plus la conf est entièrement sur fichier plat, très pratique pour une sauvegarde. Nous on install ceci sur des APU AMD ou du des SG-2440, bref au niveau matériel, vous pouvez vous inspirer du matos vendu sur le site de pfsense: https://www.pfsense.org/products/ Le boitier peut donc avoir plusieurs rôles: parfeu, vpn et pourquoi pas dhcp... A savoir que pour votre partie lan, vous pouvez directement connectée votre adsl sur le boitier si vous avez un modem. Du coup l'adresse ip publique sera directement sur le boitier... le modem lui s'occupera de la synchro (pour l'adsl) Mise en place classique wan/lan/dmz ---------------------------------------------------------------------- Dans notre cas nous allons prendre une livebox pour le WAN: .. code-block:: bash |---------------------------------------------------------------| | | | | | INTERNET --> LIVEBOX --> FWALL --> LAN | | | | | | | | v | | DMZ | | | | | |---------------------------------------------------------------| Sur la livebox le fwall doit être déclarée en DMZ A noter que sur la partie WAN on peut être en dhcp. En effet cela est intéressant lors de remplacement de box orange. Configuration réseau ++++++++++++++++++++++++ Configurer votre fichier interface :file:`/etc/network/interfaces` : .. code-block:: bash # WAN auto eth0 iface eth0 inet dhcp # LAN LOC auto eth1 iface eth1 inet static address 172.19.0.254 netmask 255.255.0.0 #DMZ auto eth2 iface eth2 inet static address 172.31.0.254 netmask 255.255.0.0 Installation Shorewall +++++++++++++++++++++++ On va maintenant installer shorewall: .. code-block:: bash apt-get update apt-get install shorewall Configuration Shorewall +++++++++++++++++++++++++ On va avant toute chose renseigner quelques variables dans le fichiers :file:`/etc/shorewall/params`: .. code-block:: bash WAN_IF="eth0" LOC_IF="eth1" DMZ_IF="eth2" LOC="172.19.0.0/16" DMZ="172.31.0.0/16" Ensuite nous allons déclarer les zones dans le fichiers :file:`/etc/shorewall/zones` .. code-block:: bash fw firewall net ipv4 loc ipv4 dmz ipv4 Nous allons ensuite déclarer nos différentes interface et leur zone associée dans :file:`/etc/shorewall/interfaces` : .. code-block:: bash net $WAN_IF detect dhcp,tcpflags,nosmurfs,logmartians dmz $DMZ_IF detect routeback loc $LOC_IF detect routeback On va maintenant activer forward de paquet: On bascule dans le fichier :file:`/etc/shorewall/shorewall.conf` .. code-block:: bash IP_FORWARDING=Yes Puis on va définir le masq: (on indique que si loc essaie de sortir par l'interface wan, son adresse ip source sera remplacée) Dans le fichier : :file:`/etc/shorewall/masq` .. code-block:: bash $WAN_IF $LOC Puis on définis dans le fichier :file:`/etc/shorewall/policy` les règles par défaut entre les différente zones (on est très restrictif par défaut): .. code-block:: bash #SOURCE DEST POLICY LOG LEVEL LIMIT:BURST fw all ACCEPT loc fw ACCEPT all all REJECT debug Puis dans le fichier :file:`/etc/shorewall/rules` on peu définir des choses plus précise. Le fichiers rules prend le dessus sur le fichier policy .. code-block:: bash ACCEPT all fw icmp .. hint:: Dans ce cas on Autorise tout le monde a effectuer un ping en direction du fwall .. Attention:: Pour le fichier rules la bonne méthode a appliquer c'est le stocker en variable les différentes chose dont on a besoin dans le fichiers :file:`/etc/shorewall/params` : .. code-block:: bash PCTEST="172.19.0.1" SRVPROXY="172.30.1.8" SRVADS="172.30.1.1" SRVWEB="172.31.0.10" NET_PEDAGO="172.28.0.0/16" NET_SRV="172.30.0.0/16" NET_DMZ="172.31.0.10" SRVMICROSOFT="3.6.53.5" Et on peu ensuite les utiliser directement dans le fichiers :file:`/etc/shorewall/rules`: .. code-block:: bash ACCEPT loc:$PCTEST net all ACCEPT loc all icmp ACCEPT loc net icmp ACCEPT loc:$SRVPROXY net tcp 80,443 ACCEPT dmz loc:$SRVADS udp 53 ACCEPT loc:$SRVADS net udp 53 DNAT net dmz:$SRVWEB:443 tcp 443 DNAT net dmz:$SRVWEB:80 tcp 80 ACCEPT loc net:$SRVMICROSOFT tcp .. note: C'est la première règle qui match qui a raison. Pour vérifier la configuration : .. code-block:: bash shorewall check Si pas de soucis on peu appliquer la conf: .. code-block:: bash shorewall restart Pour appliquer la conf mais où shorewall demande une vérif a la fin : C'est comme un restart sauf qu'a la fin, shorewall demande d'appuyer sur yes pour vérifier si vous êtes toujours là. En cas de non réponse shorewall ré-appliquera la conf précédente. .. code-block:: bash shorewall safe-restart .. attention:: Lors d'un redémarrage, les connexions déjà établie ne sont pas ré-initialiser (notament la connexion ssh) vous devez donc tester si la connexion fonctionne toujours avec un deuxième terminal. .. hint:: Pour couper toutes les connexions vous devez vider la conntrack. La commande ``conntrack -F`` permet cela. Si conntrack n'est pas installer vous pouvez l'installer avec la commande ``apt-get install conntrack`` Activation au démarrage +++++++++++++++++++++++++ Dans le fichier :file:`/etc/default/shorewall` Indiquer : .. code-block:: bash startup=1 Lancer également : .. code-block:: bash systemctl enable shorewall Test ++++++++++++++++++++ Dans la conf précédente nous avons autoriser PCTEST avec l'ip en "172.19.0.1" a a sortir directement sur internet Vous pouvez donc tester avec un pc pour vérifier que tout fonctionne. .. note:: Le pc doit avoir la conf .. code-block:: bash ip : 172.19.0.1 mask : 255.255.0.0 gateway : 172.19.0.254 dns : 8.8.8.8 Utilisation avec un coeur de réseau ---------------------------------------------------------------------- Comment ajouter les routes pour un fonctionnement avec un coeur de réseau : .. code-block:: bash |---------------------------------------------------------------| | | | | | | | INTERNET --> LIVEBOX --> FWALL --> COEUR --> NET_SRV | | | | | | | | | | v | | | DMZ v | | NET_PEDAGO | | | |---------------------------------------------------------------| Pour ajouter les routes retour sur mon fwall rdv dans :file:`/etc/network/interface`: .. code-block:: bash up route add -net 172.28.0.0/16 gw 172.19.0.253 dev eth1 up route add -net 172.30.0.0/16 gw 172.19.0.253 dev eth1 .. note:: Ici notre coeur de réseau est en 172.19.0.253 Ajouter les sous réseaux dans le fichier :file:`/etc/shorewall/params` .. code-block:: bash NET_PEDAGO="172.28.0.0/16" NET_SRV="172.30.0.0/16" Et également n'oubliez pas d'ajouter le masquerading dans :file:`/etc/shorewall/masq` pour qu'il puisse sortir sur internet .. code-block:: bash $WAN_IF $NET_PEDAGO $WAN_IF $NET_SRV Et bien évidement ajouter les routes dans le cœur de réseau, si c'est le seul coeur de réseau ce sera donc la route 0.0.0.0/0 vers le fwall .. hint:: Pour éviter les problèmes je vous conseille de laisser uniquement le fwall et le coeur dans leur propre sous réseau et de ne rien ajouter d'autre. Par exemple: 172.19.0.254 pour le fwall et 172.19.0.253 pour le coeur de réseau. Utilisation de vlan ---------------------------------------------------------------------- Peu on utiliser des vlan avec shorewall ? OUI On va utiliser la méthode classique Linux pour utiliser des vlan, dans notre exemple on ajoute le vlan wifi sur le fwall. .. code-block:: bash |-----------------------------------------------------------------------------| | WIFI(id 100) | | | | | | untagged(lan) | | INTERNET --> LIVEBOX --> FWALL -----trunk------> COEUR --> NET_SRV | | | (tagged 100) | | | | | | | v | | | DMZ v | | NET_PEDAGO | | | |-----------------------------------------------------------------------------| On a fait un vlan wifi sur le coeur de réseau: Donc un vlan sur l'id 100: On ajouter l'interface dans le fichier : :file:`/etc/network/interface` .. code-block:: bash auto eth1.100 iface eth1.100 inet static address 172.23.0.254 netmask 255.255.0.0 Puis on reprend la procédure précédente: On déclare l'interface et le sous réseau dans le fichiers :file:`/etc/shorewall/params` .. code-block:: bash WIFI_IF="eth1.100" WIFI="172.27.0.0/16" Puis on défini la nouvelle zone wifi (fichiers :file:`/etc/shorewall/zones` ) : .. code-block:: bash wifi ipv4 Puis on défini dans quelle zone va être l'interface (:file:`/etc/shorewall/interfaces` ) : .. code-block:: bash wifi $WIFI_IF detect routeback Puis on définis le masq :file:`/etc/shorewall/masq` : .. code-block:: bash $WAN_IF $WIFI Utilisation avec multi providers ---------------------------------------------------------------------- Le mutli providers c'est quoi ? Dans notre exemple c'est lorsque nous avons deux connexion wan. En multi providers les interface votre fichier :file:`/etc/network/interfaces` ne doivent pas avoir de gateway. En effet c'est la conf shorewall qui va diriger les flux. .. code-block:: bash #WAN2 iface eth3 inet static address 192.168.2.254 netmask 255.255.255.0 On ajoute ensuite l'interface dans :file:`/etc/shorewall/interfaces` .. code-block:: bash net $WAN2_IF detect optional,dhcp,tcpflags,nosmurfs,logmartians Et dans le fichier :file:`/etc/network/params`: .. code-block:: bash GW_WAN="192.168.1.254" GW_WAN2="192.168.200.254" WAN2_IF="eth3" On va définir le masq pour la sortie WAN2: .. code-block:: bash $WAN2_IF $LOC Puis on va créer un fichier :file:`/etc/shorewall/providers`: .. code-block:: bash #NAME NUMBER MARK DUPLICATE INTERFACE GATEWAY OPTIONS COPY WAN 1 1 - $WAN_IF $GW_WAN track,balance=1 - WAN2 2 2 - $WAN2_IF $GW_WAN2 track,balance=1 - Puis on va créer un fichier :file:`/etc/shorewall/mangle`: .. code-block:: bash MARK(1) $LAN $WAN MARK(1) $LAN $WAN tcp smtp MARK(2) $LAN $WAN tcp 20,21 MARK(1) $LAN $WAN tcp http,https,8080,8888 MARK(2) $LAN $WAN tcp 9418 MARK(2) $LAN $GITHUB tcp ssh,https,git MARK(2) $SRVERP $WAN MARK(1) $PUB $WAN En gros on mark les flux pour indiquer par quelle tuyau le flux doit sortir. La dernière ligne qui parle a raison. .. hint:: Il est possible de faire du load balancing mais je ne le conseille pas. Plus d'info ici : http://www.shorewall.org Mode Standalone ---------------------------------------------------------------------- On peut aussi utiliser shorewall pour un mode standalone C'est presque la même configuration que "Mise en place classique wan/lan/dmz" A la différence que vous avez n'avez que deux zones et une interface Deux zones : .. code-block:: bash fw firewall net ipv4 Et une seul interface : .. code-block:: bash net $WAN_IF detect dhcp,tcpflags,nosmurfs,logmartians Dans ce mode, inutile de configurer un masq ni d'activer l'IP_FORWARDING la zone fw est votre serveur la zone net est l'exterieur.