« LINUX:Firewall » : différence entre les versions

Aucun résumé des modifications
Aucun résumé des modifications
 
(10 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
__FORCETOC__
__FORCETOC__
----
''→ [[LINUX:Routeur-PPPOE|retour au Routeur-PPPOE]]''
----
=But=
=But=
Etape très importante, il faut sécuriser et filtrer les connexions d'autant plus qu'on est directement connecté à internet. Vient s'ajouter le problème, propre à IPV4 de l'interfaçage entre le réseau public  et le réseau privé. En outre une particularité de la connexion PPP doit être appliquée.
Etape très importante, il faut sécuriser et filtrer les connexions d'autant plus qu'on est directement connecté à internet. Vient s'ajouter le problème, propre à IPV4 de l'interfaçage entre le réseau public  et le réseau privé. En outre une particularité de la connexion PPP doit être appliquée.
Ligne 10 : Ligne 13 :
  dnf install iptables-services
  dnf install iptables-services
  dnf install iptables-utils
  dnf install iptables-utils
dnf install iptables-legacy


Il comporte deux volets:
Il comporte deux volets:
Ligne 101 : Ligne 105 :
* PREROUTING: l'adressage compatible avec Internet est adapté avant de rentrer dans le réseau privé
* PREROUTING: l'adressage compatible avec Internet est adapté avant de rentrer dans le réseau privé
* -i ppp0: il concerne le trafic entrant par l'interface "^ppp0"
* -i ppp0: il concerne le trafic entrant par l'interface "^ppp0"
* -p tcp --dport 80: la requête arrivant est de type TCP et concerne le protocole HTTP (port 80)
* -p tcp --dport 80: la requête arrivant est de type TCP et concerne le protocole HTTP de destination (port 80)
* -j DNAT: type d'action qui adapte l'adressage et le port de la destination
* -j DNAT: type d'action qui adapte l'adressage et le port de la destination
* --to-destination 192.168.2.2:80: à l'arrivée, l'adresse IP de destination est celle de l'interface "ppp0"; elle est transformée en l'adresse IP du serveur WEB du LAN n°2; l'ajout du port 80 est facultatif mais si le port du service WEB de la machine 192.168.2.2 était 8080, on aurait ":8080" à la place de ":80".
* --to-destination 192.168.2.2:80: à l'arrivée, l'adresse IP de destination est celle de l'interface "ppp0"; elle est transformée en l'adresse IP du serveur WEB du LAN n°2; l'ajout du port 80 est facultatif mais si le port du service WEB de la machine 192.168.2.2 était 8080, on aurait ":8080" à la place de ":80".
Ligne 131 : Ligne 135 :




[[FILE:LINUX:Fw.input.png|300px]]
[[FILE:LINUX:Fw.input.pdf|300px]]
[[FILE:LINUX:Fw.output.png|300px]]
[[FILE:LINUX:Fw.output.pdf|300px]]
[[FILE:LINUX:Fw.forward.png|300px]]
[[FILE:LINUX:Fw.forward.pdf|300px]]




Ligne 142 : Ligne 146 :
* le LAN n°2 héberge un serveur SSH accessible à partir du LAN n°1 (FORWARD)
* le LAN n°2 héberge un serveur SSH accessible à partir du LAN n°1 (FORWARD)
* le LAN n°2 ne peut accéder au LAN n°1 (FORWARD) La première flèche du bas allant vers la gauche passe au rouge.
* le LAN n°2 ne peut accéder au LAN n°1 (FORWARD) La première flèche du bas allant vers la gauche passe au rouge.
* le LAN n°2 peut faire ses mises à jour des logficiels et de l'heure, et les résolutions DNS vers Internet (FORWARD)
* le LAN n°2 peut faire ses mises à jour des logficiels et de l'heure, et les résolutions DNS vers Internet (FORWARD)
* le LAN n°1 peut aller sur Internet librement (FORWARD)
* le LAN n°1 peut aller sur Internet librement (FORWARD)




[[FILE:LINUX:Fw2.input.png|300px]]
[[FILE:LINUX:Fw2.input.pdf|300px]]
[[FILE:LINUX:Fw2.output.png|300px]]
[[FILE:LINUX:Fw2.output.pdf|300px]]
[[FILE:LINUX:Fw2.forward.png|300px]]
[[FILE:LINUX:Fw2.forward.pdf|300px]]




Ligne 155 : Ligne 159 :


Quand une machine (client) émet une requête vers une autre machine (serveur), le statut de ce paquet est "'''NEW'''". Le serveur la refuse ou l'accepte. S'il y a acceptation, la suite du flux aura le statut "'''ESTABLISHED'''" car une connexion a été établie et il n'y a pas lieu d'en établir une seconde. Il y a quelques cas particuliers comme le protocole FTP qui utilise deux ports (21 et 20); dans ce cas un statut "RELATED" est également utilisé pour ouvrir le second port nécessaire. Le protocole ICMP en a également besoin.
Quand une machine (client) émet une requête vers une autre machine (serveur), le statut de ce paquet est "'''NEW'''". Le serveur la refuse ou l'accepte. S'il y a acceptation, la suite du flux aura le statut "'''ESTABLISHED'''" car une connexion a été établie et il n'y a pas lieu d'en établir une seconde. Il y a quelques cas particuliers comme le protocole FTP qui utilise deux ports (21 et 20); dans ce cas un statut "RELATED" est également utilisé pour ouvrir le second port nécessaire. Le protocole ICMP en a également besoin.
''Remarque'': Cette approche présentée globalement doit être analysée pour chaque type de trafic (interface, protocole, machines source et cible, ports cible et source,...).




Ligne 230 : Ligne 236 :
----
----
Les options suivantes signifient:
Les options suivantes signifient:
* -s : désigne l'adresse IP ou la tranche d'adresses IP d'où vient le paquet ('''s'''ource)
* -s : désigne l'adresse IP ou la tranche d'adresses IP d'où vient le paquet ('''s'''ource) 192.168.1.0/24 concerne le réseau 192.168.1.0 ayant le netmask 255.255.255.0 (ou 24 bits).
* ! : signifie la négation donc " ! -s " signifie "ne venant pas de ces adresses IP"
* ! : signifie la négation donc " ! -s " signifie "ne venant pas de ces adresses IP"




Maintenant passons au second schéma. Le bloc ci-dessus est àremplacer par celui-ci. Ne pa oublier d'ajouter la seconde ligne (DNAT) ajoutée dans la table NAT. (voir au chapitre précédent)
Maintenant passons au second schéma. Le bloc ci-dessus est à remplacer par celui-ci. Ne pas oublier d'ajouter la seconde ligne (DNAT) ajoutée dans la table NAT. (voir au chapitre précédent)
----
----
  # '''INPUT'''
  # '''INPUT'''
Ligne 249 : Ligne 255 :
  # Accès vers Internet
  # Accès vers Internet
  # DNS: résolution de noms de machines
  # DNS: résolution de noms de machines
  -A OUTPUT -o ppp0 -p tcp -m tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
  -A OUTPUT -o ppp0 -p tcp -m tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
  -A OUTPUT -o ppp0 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
  -A OUTPUT -o ppp0 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
  # NTP: mise à l'heure
  # NTP: mise à l'heure
  -A OUTPUT -o ppp0 -p tcp -m tcp --dport 123 -m conntrack --ctstate NEW -j ACCEPT
  -A OUTPUT -o ppp0 -p tcp -m tcp --dport 123 -m conntrack --ctstate NEW -j ACCEPT
Ligne 278 : Ligne 284 :
  # le LAN 2 a accès
  # le LAN 2 a accès
  # DNS: résolution de noms de machines
  # DNS: résolution de noms de machines
  -A FORWARD -i enp4s2  -o ppp0 -s 192.168.2.0/24 -p tcp -m tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
  -A FORWARD -i enp4s2  -o ppp0 -s 192.168.2.0/24 -p tcp -m tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
  -A FORWARD -i enp4s2  -o ppp0 -s 192.168.2.0/24 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
  -A FORWARD -i enp4s2  -o ppp0 -s 192.168.2.0/24 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
  # NTP: mise à l'heure
  # NTP: mise à l'heure
  -A FORWARD -i enp4s2  -o ppp0 -s 192.168.2.0/24 -p tcp -m tcp --dport 123 -m conntrack --ctstate NEW -j ACCEPT
  -A FORWARD -i enp4s2  -o ppp0 -s 192.168.2.0/24 -p tcp -m tcp --dport 123 -m conntrack --ctstate NEW -j ACCEPT
Ligne 293 : Ligne 299 :
  -A FORWARD -i enp4s2  -o enp4s0  -j DROP
  -A FORWARD -i enp4s2  -o enp4s0  -j DROP
----
----
L'option suivante signifie:
* --dport: port de destination sur le serveur
Remarquons que pour une question de lisibilité, de nombreuses lignes à l'action "DROP" sont ajoutées. Elles sont facultative car une action "DROP" est ajoutée d'office en fin de traitement mais avec une écriture dans le journal. (voir point suivant)
Remarquons que pour une question de lisibilité, de nombreuses lignes à l'action "DROP" sont ajoutées. Elles sont facultative car une action "DROP" est ajoutée d'office en fin de traitement mais avec une écriture dans le journal. (voir point suivant)


Ligne 324 : Ligne 333 :




=Accès à notre serveur WEB à partir de notre réseau privé=
Un autre problème courant consiste à accéder à notre serveur WEB à partir de notre réseau avec son nom de machine public connu des serveurs DNS mondiaux (exemple: www.adbweb.gslb.be).
Une solution consiste à avoir son propre serveur DNS interne et d'y ajouter son nom DNS public pointant vers l'adresse IP privée du serveur WEB, ici 192.168.2.2.
La seconde solution est d'agir directement dans le firewall du routeur. Une explication complète peut se trouver à l'URL <nowiki>https://inetdoc.net/guides/iptables-tutorial/dnattarget.html</nowiki>.
Divers cas sont à considérer:
* à partir du routeur
* à partir d'une machine du réseau
Nous nous basons sur le second schéma et donc sur les règles introduites dans le firewall.
==A partir du routeur==
En premier lieu, il faut ouvrir notre routeur au port HTTP vers notre serveur WEB, ce qui n'est pas encore permis.
Ceci se passe dans la table FILTER sous la chaîne "OUTPUT", avant l'action DROP finale.
----
# WEB interne
-A OUTPUT -o enp4s2 -p tcp -m tcp -d 192.168.2.2 --dport 80 -m conntrack --ctstate NEW -j ACCEPT
----
En second lieu, il faut introduire dans la table NAT, une action DNAT proche de celle déjà introduite mais non sur la chaîne PREROUTING mais la chaîne OUTPUT comme il se doit.
----
-A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 192.168.2.2:80
----
==A partir d'une machine de notre réseau==
Ici on agit au niveau de la table NAT.
En premier lieu, on ouvre l'action DNAT (NAT Destination) pour la chaîne PREROUTING aux autres interfaces ou au moins à l'interface désiré. Si on supprime l'option "-i", on l'ouvre à tous les interfaces réseaux.
----
-A PREROUTING -i enp4s2 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.2:80
-A PREROUTING -i enp4s0 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.2:80
----
Ensuite on effectue dans la table NAT sous la chaîne POSTROUTING (et non PREROUTING), une action SNAT (NAT Source) ayant l'option "--to-source" vers une des adresses IP privées du routeur. Notre routeur a deux interfaces réseaux ayant une adresse IP privées: 192.168.1.33 pour "enp4s0" et 192.168.2.1 pour "enp4s2". Nous avons le choix entre:
----
-A POSTROUTING -p tcp --dst 192.168.2.2 --dport 80 -j SNAT --to-source 192.168.2.1
----
et
----
-A POSTROUTING -p tcp --dst 192.168.2.2 --dport 80 -j SNAT --to-source 192.168.1.33
----
==Test==
Pour tester en ligne de commande sous Linux, on peut utiliser la commande "wget".
Pour notre test, nous supposons que nous n'avons pas de nom public pour notre serveur WEB. Nous allons rechercher son nom attribué d'office par notre IPS via son adresse IP.


La commande "ifconfig" sur le routeur nous donne l'adresse IP publique de notre routeur: "81.242.17.14".


On recherche ensuite le nom de la machine sur base de cette adresse IP via le DNS avec la commande:
nslookup 81.242.17.14
qui donne:
14.17.242.81.in-addr.arpa      name = 14.17-242-81.adsl-dyn.isp.belgacom.be.
On utilise la commande "wget" pour charger la page racine de notre site ou toute autre page:
wget <nowiki>http://14.17-242-81.adsl-dyn.isp.belgacom.be</nowiki>
qui donne si tout se déroule comme attendu:
--2022-01-24 15:46:17--  <nowiki>http://14.17-242-81.adsl-dyn.isp.belgacom.be/</nowiki>
Résolution de 14.17-242-81.adsl-dyn.isp.belgacom.be (14.17-242-81.adsl-dyn.isp.belgacom.be)… 81.242.17.14
Connexion à 14.17-242-81.adsl-dyn.isp.belgacom.be (14.17-242-81.adsl-dyn.isp.belgacom.be)|81.242.17.14|:80… connecté.
requête HTTP transmise, en attente de la réponse… 200 OK
Taille : 9 [text/html]
Sauvegarde en : « index.html »
index.html                        100%[============================================================>]      9  --.-KB/s    ds 0s
2022-01-24 15:46:17 (845 KB/s) — « index.html » sauvegardé [9/9]
Un fichier "index.html" est créé dont nous pouvons consulter le contenu.
----
''&rarr; [[LINUX:Routeur-PPPOE|retour au Routeur-PPPOE]]''
----
----
''->[[LINUX:Router-PPPOE|retour au Router-PPPOE]]''
__NOEDITSECTION__
__NOEDITSECTION__
[[Category:LINUX]]
[[Category:LINUX]]