« LINUX:Firewall » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| (8 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 131 : | Ligne 135 : | ||
[[FILE:LINUX:Fw.input. | [[FILE:LINUX:Fw.input.pdf|300px]] | ||
[[FILE:LINUX:Fw.output. | [[FILE:LINUX:Fw.output.pdf|300px]] | ||
[[FILE:LINUX:Fw.forward. | [[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, | * 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. | [[FILE:LINUX:Fw2.input.pdf|300px]] | ||
[[FILE:LINUX:Fw2.output. | [[FILE:LINUX:Fw2.output.pdf|300px]] | ||
[[FILE:LINUX:Fw2.forward. | [[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 234 : | Ligne 240 : | ||
Maintenant passons au second schéma. Le bloc ci-dessus est | 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 | * --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 327 : | Ligne 334 : | ||
=Accès à notre serveur WEB à partir de notre réseau privé= | =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 connu des serveurs DNS mondiaux (exemple: www.adbweb.gslb.be). | 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. | 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. | ||
| Ligne 335 : | Ligne 342 : | ||
* à partir du routeur | * à partir du routeur | ||
* à partir d'une machine du réseau | * à partir d'une machine du réseau | ||
Nous nous basons sur le second schéma. | Nous nous basons sur le second schéma et donc sur les règles introduites dans le firewall. | ||
==A partir du routeur== | ==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. | 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". | Ceci se passe dans la table FILTER sous la chaîne "OUTPUT", avant l'action DROP finale. | ||
---- | ---- | ||
# WEB interne | # WEB interne | ||
| Ligne 349 : | Ligne 356 : | ||
-A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 192.168.2.2:80 | -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 192.168.2.2:80 | ||
---- | ---- | ||
| Ligne 355 : | Ligne 361 : | ||
Ici on agit au niveau de la table NAT. | Ici on agit au niveau de la table NAT. | ||
En premier lieu, on ouvre l'action DNAT pour la chaîne | 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 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 | -A PREROUTING -i enp4s0 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.2:80 | ||
---- | ---- | ||
Ensuite on | 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 | -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 | -A POSTROUTING -p tcp --dst 192.168.2.2 --dport 80 -j SNAT --to-source 192.168.1.33 | ||
| Ligne 371 : | Ligne 377 : | ||
==Test== | ==Test== | ||
Pour tester en ligne de commande sous Linux, on peut utiliser la commande "wget" | 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. | |||
---- | |||
''→ [[LINUX:Routeur-PPPOE|retour au Routeur-PPPOE]]'' | |||
---- | ---- | ||
__NOEDITSECTION__ | __NOEDITSECTION__ | ||
[[Category:LINUX]] | [[Category:LINUX]] | ||