Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:reseau:iptables-pare-feu-pour-un-client [06/11/2014 09:53] Hypathie [Pare-feu pour une station (client)] |
doc:reseau:iptables-pare-feu-pour-un-client [23/08/2018 21:05] Beta-Pictoris |
||
---|---|---|---|
Ligne 4: | Ligne 4: | ||
* Niveau requis : {{tag> avisé}} | * Niveau requis : {{tag> avisé}} | ||
* Commentaires : //Contexte d'utilisation du sujet du tuto. // | * Commentaires : //Contexte d'utilisation du sujet du tuto. // | ||
- | * Suivi : {{à-placer}} | + | * Suivi : {{tag>à-tester}} |
* Création par [[user>Hypathie]] 08/10/2014 | * Création par [[user>Hypathie]] 08/10/2014 | ||
* Testé par <...> le <...> | * Testé par <...> le <...> | ||
Ligne 53: | Ligne 53: | ||
**SSL/https** = UDP 443((voir samba))\\ | **SSL/https** = UDP 443((voir samba))\\ | ||
**[[doc:reseau:dns|DNS]]** = UDP = 53\\ | **[[doc:reseau:dns|DNS]]** = UDP = 53\\ | ||
- | **[[atelier:chantier:dhcp|DHCP]]** = UDP = 67 et 68\\ | + | **[[doc:reseau:dhcp|DHCP]]** = UDP = 67 et 68\\ |
**[[doc:reseau:samba|SAMBA]]** = 137-139 et 445 (voir ci-dessous)\\ | **[[doc:reseau:samba|SAMBA]]** = 137-139 et 445 (voir ci-dessous)\\ | ||
**NETBIOS** = 137-139\\ | **NETBIOS** = 137-139\\ | ||
Ligne 98: | Ligne 98: | ||
> **''-t table''** : pour demander une table en particulier((Par défaut c'est la table filter qui est listée, donc on peut aussi utiliser la commande: ''iptables -L'' pour le même résultat.)) | > **''-t table''** : pour demander une table en particulier((Par défaut c'est la table filter qui est listée, donc on peut aussi utiliser la commande: ''iptables -L'' pour le même résultat.)) | ||
- | <code> | + | <code config retour de la commande> |
Chain INPUT (policy ACCEPT) | Chain INPUT (policy ACCEPT) | ||
target prot opt source destination | target prot opt source destination | ||
Ligne 125: | Ligne 125: | ||
> **La cinquième ligne ''Chain OUTPUT (policy ACCEPT)''** concerne les paquets sortants (**''OUTPUT''**). | > **La cinquième ligne ''Chain OUTPUT (policy ACCEPT)''** concerne les paquets sortants (**''OUTPUT''**). | ||
+ | === Lien utile === | ||
+ | |||
+ | En complément, voir ce post sur le forum : | ||
+ | * [[https://debian-facile.org/viewtopic.php?id=18221]] | ||
====Quelques définitions==== | ====Quelques définitions==== | ||
Ligne 143: | Ligne 147: | ||
Une chaîne est un ensemble de règles définies dans un **ordre précis**.\\ Pour l'instant, il n'y n'a pas de règle mais une fois le pare-feu mis en place on pourrait avoir par exemple pour les entrées ''INPUT'': | Une chaîne est un ensemble de règles définies dans un **ordre précis**.\\ Pour l'instant, il n'y n'a pas de règle mais une fois le pare-feu mis en place on pourrait avoir par exemple pour les entrées ''INPUT'': | ||
<code root>iptables -L --line-numbers Chain INPUT</code> | <code root>iptables -L --line-numbers Chain INPUT</code> | ||
- | <code> | + | |
- | num target prot opt source destination | + | <code config retour de la commande>num target prot opt source destination |
1 ACCEPT tcp -- anywhere anywhere tcp dpt:www | 1 ACCEPT tcp -- anywhere anywhere tcp dpt:www | ||
2 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh | 2 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh | ||
- | 3 ACCEPT tcp -- anywhere anywhere tcp dpt:imap2 | + | 3 ACCEPT tcp -- anywhere anywhere tcp dpt:imap2</code> |
- | </code> | + | |
>**Il y a bien un ordre précis** : | >**Il y a bien un ordre précis** : | ||
>>La première règle (''1'') autorise ''ACCEPT'', le protocole ''tcp'', venant de partout ''anywhere'', allant partout ''anywhere'', et cela pour ''www'', le web (ou port 80). | >>La première règle (''1'') autorise ''ACCEPT'', le protocole ''tcp'', venant de partout ''anywhere'', allant partout ''anywhere'', et cela pour ''www'', le web (ou port 80). | ||
+ | >> | ||
>>La seconde (''2'') pour ''ssh'' | >>La seconde (''2'') pour ''ssh'' | ||
+ | >> | ||
>>la troisième (''3'')pour ''imap2'' | >>la troisième (''3'')pour ''imap2'' | ||
Ligne 207: | Ligne 213: | ||
* Voyons le résultat : | * Voyons le résultat : | ||
<code root>iptables -L -n --line-numbers</code> | <code root>iptables -L -n --line-numbers</code> | ||
- | <code>Chain INPUT (policy DROP) | + | <code config retour de la commande>Chain INPUT (policy DROP) |
num target prot opt source destination | num target prot opt source destination | ||
Ligne 214: | Ligne 220: | ||
Chain OUTPUT (policy DROP) | Chain OUTPUT (policy DROP) | ||
- | num target prot opt source destination </code> | + | num target prot opt source destination</code> |
===Autoriser les échanges avec les serveurs DNS=== | ===Autoriser les échanges avec les serveurs DNS=== | ||
<code root> | <code root> | ||
- | iptables -t filter -A OUTPUT -p udp -m udp\ | + | iptables -t filter -A OUTPUT -p udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT |
- | --dport 53 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT | + | iptables -t filter -A INPUT -p udp --sport 53 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
- | + | ||
- | iptables -t filter -A INPUT -p udp -m udp\ | + | |
- | --sport 53 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT | + | |
</code> | </code> | ||
Ligne 262: | Ligne 265: | ||
Pour l'espace utilisateur les états valides sont NEW, ESTABLISHED, RELATED et INVALID. | Pour l'espace utilisateur les états valides sont NEW, ESTABLISHED, RELATED et INVALID. | ||
- | Voir [[http://www.inetdoc.net/guides/iptables-tutorial/traversingoftables.html|la traverser des tables et des chaînes]]. | + | Voir [[http://www.inetdoc.net/guides/iptables-tutorial/traversingoftables.html|la traversée des tables et des chaînes]]. |
[[http://www.inetdoc.net/guides/iptables-tutorial/tcpconnections.html|La machine d'état: connexion TCP]] | [[http://www.inetdoc.net/guides/iptables-tutorial/tcpconnections.html|La machine d'état: connexion TCP]] | ||
Ligne 281: | Ligne 284: | ||
<note> | <note> | ||
- | Commande précédente, ou on peut aussi faire : | + | Commandes précédentes, ou celles-ci plus précises que l'on préférera : |
<code root> | <code root> | ||
- | iptables -A OUTPUT -p icmp -m conntrack\ | + | iptables -A OUTPUT -o eth0 -p icmp -m conntrack\ |
--ctstate NEW,ESTABLISHED,RELATED -j ACCEPT | --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT | ||
- | iptables -A INPUT -p icmp -m conntrack\ | + | iptables -A INPUT -i eth0 -p icmp -m conntrack\ |
--ctstate NEW,ESTABLISHED,RELATED -j ACCEPT | --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT | ||
</code> | </code> | ||
Ligne 301: | Ligne 304: | ||
RELATED,ESTABLISHED -j ACCEPT | RELATED,ESTABLISHED -j ACCEPT | ||
</code> | </code> | ||
+ | |||
+ | ===Pour IMAP et SMTP (utilisation de messagerie icedove) === | ||
+ | <code root>iptables -A INPUT -m multiport -p tcp --sport 25,2525,587,465,143,993,995 -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
+ | |||
+ | iptables -A OUTPUT -m multiport -p tcp --dport 25,2525,143,465,587,993,995 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT </code> | ||
+ | |||
+ | Pour la liste des ports selon les serveurs de messagerie utilisés voir : [[https://www.arclab.com/en/amlc/list-of-smtp-and-imap-servers-mailserver-list.html|list of smtp and imap servers mailserver]] | ||
===Pour installer une imprimante partagée === | ===Pour installer une imprimante partagée === | ||
Ligne 306: | Ligne 316: | ||
<code root>iptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.22 -p tcp\ | <code root>iptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.22 -p tcp\ | ||
- | --dport 631 -m state --state RELATED,ESTABLISHED -j ACCEPT | + | --dport 631 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT |
iptables -A OUTPUT -o eth0 -s 192.168.0.22 -d 192.168.0.0/24 -p tcp\ | iptables -A OUTPUT -o eth0 -s 192.168.0.22 -d 192.168.0.0/24 -p tcp\ | ||
Ligne 313: | Ligne 323: | ||
<note>Remarque sur la place du point d'exclamation, qui ne se place pas devant ''INVALID'' comme on le voit souvent !</note> | <note>Remarque sur la place du point d'exclamation, qui ne se place pas devant ''INVALID'' comme on le voit souvent !</note> | ||
- | * Si l'on veut que cette imprimante soit partagée aussi par un autre réseau, par exemple 192.168.1.0/24 on ajoutera : | + | <note tip>**Si l'on veut que cette imprimante soit partagée aussi par un autre réseau, par exemple 192.168.1.0/24 on ajoutera ceci au pare-feu du client :** |
- | <code root>iptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.1.0/24 -p tcp\ | + | <code root>iptables -A INPUT -i eth0 -s 192.168.1.0/24 -d 192.168.0.22 -p tcp\ |
- | --dport 631 -m state --state RELATED,ESTABLISHED -j ACCEPT</code> | + | --dport 631 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT |
- | + | iptables -A OUTPUT -o eth0 -s 192.168.0.22 -d 192.168.1.0/24 -p tcp\ | |
- | <code root>iptables -A OUTPUT -o eth0 -s 192.168.0.22 -d 192.168.1.1 -p tcp\ | + | |
--sport 631 -m state ! --state INVALID -j ACCEPT</code> | --sport 631 -m state ! --state INVALID -j ACCEPT</code> | ||
- | Dans ce cas au niveau de la passerelle, il faudra relayer le trafic pour le port 631, c'est-à-dire accepter sur eth0 (réseau 192.168.0.0/24) en entrée et en sortie tcp sur le port 631, de même pour eth1 (réseau 168.168.1.0/24).\\ | + | **Dans ce cas au niveau de la passerelle** : |
+ | Si elle dotée d'un pare-feu, il faudra que **son** pare-feu permette le trafic pour le port 631, c'est-à-dire accepter sur eth0 (réseau 192.168.0.0/24) les entrées et les sorties tcp sur le port 631.\\ | ||
+ | |||
+ | Par exemple : | ||
+ | |||
+ | iptables -A INPUT -i eth0 -s 192.168.0.22 -d 192.168.0.1 -p tcp --sport 631 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | ||
+ | iptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.22 -p tcp --dport 631 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | ||
+ | |||
+ | |||
+ | Voir : [[doc:reseau:iptables-pare-feu-pour-une-passerelle?&#le-script-de-la-passerelle|Script d'une passerelle]] | ||
+ | </note> | ||
====Vérifier et faire des tests==== | ====Vérifier et faire des tests==== | ||
Ligne 329: | Ligne 348: | ||
ou | ou | ||
<code root>iptables -L -n --line-numbers</code> | <code root>iptables -L -n --line-numbers</code> | ||
- | <code> | + | |
- | Chain INPUT (policy DROP 80 packets, 19279 bytes) | + | <code config retour de la commande>Chain INPUT (policy DROP 80 packets, 19279 bytes) |
pkts bytes target prot opt in out source destination | pkts bytes target prot opt in out source destination | ||
1 131 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp\ | 1 131 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp\ | ||
Ligne 353: | Ligne 372: | ||
dports 80,443,8000 ctstate NEW,RELATED,ESTABLISHED | dports 80,443,8000 ctstate NEW,RELATED,ESTABLISHED | ||
| | ||
- | 4 336 ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0 | + | 4 336 ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0</code> |
- | </code> | + | |
===Faire des tests === | ===Faire des tests === | ||
+ | |||
* Sur l'interface lo | * Sur l'interface lo | ||
<code user>ping localhost</code> | <code user>ping localhost</code> | ||
- | <code> | + | |
- | PING localhost (127.0.0.1) 56(84) bytes of data. | + | <code config retour de la commande>PING localhost (127.0.0.1) 56(84) bytes of data. |
64 bytes from localhost (127.0.0.1): icmp_req=1 ttl=64 time=0.050 ms | 64 bytes from localhost (127.0.0.1): icmp_req=1 ttl=64 time=0.050 ms | ||
64 bytes from localhost (127.0.0.1): icmp_req=2 ttl=64 time=0.042 ms | 64 bytes from localhost (127.0.0.1): icmp_req=2 ttl=64 time=0.042 ms | ||
Ligne 366: | Ligne 386: | ||
--- localhost ping statistics --- | --- localhost ping statistics --- | ||
2 packets transmitted, 2 received, 0% packet loss, time 999ms | 2 packets transmitted, 2 received, 0% packet loss, time 999ms | ||
- | rtt min/avg/max/mdev = 0.042/0.046/0.050/0.004 ms | + | rtt min/avg/max/mdev = 0.042/0.046/0.050/0.004 ms</code> |
- | </code> | + | |
Ça marche 8-) | Ça marche 8-) | ||
Ligne 373: | Ligne 392: | ||
* Vers un autre client : | * Vers un autre client : | ||
<code user>ping 192.168.0.1</code> | <code user>ping 192.168.0.1</code> | ||
- | <code> | + | |
- | PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. | + | <code config retour de la commande>PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. |
64 bytes from 192.168.0.1: icmp_req=1 ttl=64 time=0.226 ms | 64 bytes from 192.168.0.1: icmp_req=1 ttl=64 time=0.226 ms | ||
64 bytes from 192.168.0.1: icmp_req=2 ttl=64 time=0.209 ms | 64 bytes from 192.168.0.1: icmp_req=2 ttl=64 time=0.209 ms | ||
Ligne 380: | Ligne 399: | ||
--- 192.168.0.1 ping statistics --- | --- 192.168.0.1 ping statistics --- | ||
2 packets transmitted, 2 received, 0% packet loss, time 999ms | 2 packets transmitted, 2 received, 0% packet loss, time 999ms | ||
- | rtt min/avg/max/mdev = 0.209/0.217/0.226/0.017 ms | + | rtt min/avg/max/mdev = 0.209/0.217/0.226/0.017 ms</code> |
- | </code> | + | |
Tout va bien :-D | Tout va bien :-D | ||
* Ping sur un domaine : | * Ping sur un domaine : | ||
- | <code root>ping google.fr</code> | + | <code user>ping google.fr</code> |
- | <code>PING google.fr (173.194.40.152) 56(84) bytes of data. | + | <code config retour de la commande>PING google.fr (173.194.40.152) 56(84) bytes of data. |
64 bytes from par10s10-in-f24.1e100.net (173.194.40.152): icmp_req=1 ttl=55 time=34.0 ms | 64 bytes from par10s10-in-f24.1e100.net (173.194.40.152): icmp_req=1 ttl=55 time=34.0 ms | ||
^C | ^C | ||
Ligne 493: | Ligne 512: | ||
<code user>less /var/log/messages | grep OUTGOING_SSH</code> | <code user>less /var/log/messages | grep OUTGOING_SSH</code> | ||
- | <code> | + | |
- | <...> | + | <code config retour de la commande><...> |
Oct 8 12:01:07 debian-pc1 kernel: [16793.633030] [OUTGOING_SSH] : IN=eth0 OUT= MAC=xxx.. | Oct 8 12:01:07 debian-pc1 kernel: [16793.633030] [OUTGOING_SSH] : IN=eth0 OUT= MAC=xxx.. | ||
SRC=192.168.0.1 DST=192.168.0.22 LEN=52 TOS=0x10 PREC=0x00 TTL=64 ID=13465 | SRC=192.168.0.1 DST=192.168.0.22 LEN=52 TOS=0x10 PREC=0x00 TTL=64 ID=13465 | ||
DF PROTO=TCP SPT=48542 DPT=22 WINDOW=1523 RES=0x00 ACK URGP=0 | DF PROTO=TCP SPT=48542 DPT=22 WINDOW=1523 RES=0x00 ACK URGP=0 | ||
- | <...> | + | <...></code> |
- | </code> | + | |
<code user>less /var/log/messages | grep INCOMING_SSH</code> | <code user>less /var/log/messages | grep INCOMING_SSH</code> | ||
- | <code> | + | |
- | <...> | + | <code config retour de la commande><...> |
Oct 8 12:01:07 debian-pc1 kernel: [16793.632822] [INCOMING_SSH] : IN= OUT=eth0 | Oct 8 12:01:07 debian-pc1 kernel: [16793.632822] [INCOMING_SSH] : IN= OUT=eth0 | ||
SRC=192.168.0.22 DST=192.168.0.1 LEN=52 TOS=0x10 PREC=0x00 TTL=64 | SRC=192.168.0.22 DST=192.168.0.1 LEN=52 TOS=0x10 PREC=0x00 TTL=64 | ||
ID=35238 DF PROTO=TCP SPT=22 DPT=48542 WINDOW=431 RES=0x00 ACK FIN URGP=0 | ID=35238 DF PROTO=TCP SPT=22 DPT=48542 WINDOW=431 RES=0x00 ACK FIN URGP=0 | ||
- | <...> | + | <...></code> |
- | </code> | + | |
- | ====Sauvegarder ses règles ==== | + | |
+ | =====Sauvegarder ses règles ===== | ||
En l'état actuel, si on éteint le système au redémarrage nos règles et tables utilisateur auront disparu.\\ | En l'état actuel, si on éteint le système au redémarrage nos règles et tables utilisateur auront disparu.\\ | ||
Pour les sauvegarder, il y a plusieurs méthodes. On peut créer un script de démarrage, ou se servir de les commandes iptables-save et iptables-restore.\\ | Pour les sauvegarder, il y a plusieurs méthodes. On peut créer un script de démarrage, ou se servir de les commandes iptables-save et iptables-restore.\\ | ||
On choisira d'abord la seconde méthode car c'est la plus simple ! | On choisira d'abord la seconde méthode car c'est la plus simple ! | ||
- | ===Avec les commandes iptables-save et iptables-restore=== | + | ====Avec les commandes iptables-save et iptables-restore==== |
La commande iptables-save crée un fichier et la commande iptables-restore charge la dernière sauvegarde à partir du fichier crée par iptables-save. | La commande iptables-save crée un fichier et la commande iptables-restore charge la dernière sauvegarde à partir du fichier crée par iptables-save. | ||
- | * Pour sauvegarder toutes les règles : | + | ===Pour sauvegarder toutes les règles=== |
- | <code root>iptables-save > /etc/iptables</code> | + | <code root>iptables-save > /etc/firewall-client</code> |
- | * Pour les charger après le redémarrage : | + | ===Pour les charger après le redémarrage=== |
- | <code root>iptables-restore < /etc/iptables</code> | + | <code root>iptables-restore < /etc/firewall-client</code> |
Bon il ne faut pas oublier de charger son pare-feu à chaque redémarrage !\\ | Bon il ne faut pas oublier de charger son pare-feu à chaque redémarrage !\\ | ||
Ligne 529: | Ligne 548: | ||
Évitons ce risque et surtout de nous fatiguer...\\ | Évitons ce risque et surtout de nous fatiguer...\\ | ||
- | * Pour restaurer automatiquement les règles au démarrage | + | ===Pour restaurer automatiquement les règles au démarrage=== |
- | On va installer la commande iptables-restore avant que les interfaces ne soient chargés via le fichier /etc/network/interfaces.\\ | + | On va installer la commande iptables-restore avant que les interfaces ethernet ne soient chargés via le fichier /etc/network/interfaces.\\ |
- | L'avantage de cette méthode est la possibilité de créer des règles personnalisées pour chaque interface. Si les règles sont indépendantes des interfaces, on place la commande iptables-restore en pre-up de la boucle locale. | + | <code root>vim /etc/network/interfaces</code> |
- | <code root>vim /etc/network/interfaces</code> | + | <file config interfaces> |
- | <code> | + | |
# The loopback network interface | # The loopback network interface | ||
- | pre-up iptables-restore < /etc/iptables | ||
auto lo | auto lo | ||
iface lo inet loopback | iface lo inet loopback | ||
- | </code> | + | post-up iptables-restore < /etc/firewall-client |
+ | </file> | ||
- | Donc le jour où on installera une carte wifi sur son vieil ordi fixe, on se teste d'abord quelques nouvelles règles iptables, puis quand elles sont tip-top, on les sauvegarde en crant un ''iptables-save > /etc/iptables-wifi''.\\ | ||
- | On ne restera plus qu'à ajouter ''pre-up iptables-restore < /etc/iptables-wifi'' avant la configuration de l'interface wlan dans /etc/network/interfaces sans avoir toucher ce qui fonctionnait déjà... | + | ===Avantages de cette méthode=== |
- | ===Pour les fadas du "scripting" shell=== | + | * La possibilité de créer des règles personnalisées pour chaque interface. |
+ | Si les règles sont indépendantes des interfaces, on place la commande iptables-restore en pre-up de la boucle locale. | ||
- | **C'est soit la méthode précédente, soit celle-ci !**\\ | + | On peut créer plusieurs fichiers à restaurer, un pour chaque interface par exemple, ou un fichier particulier pour un service particulier (un pour masquerade et squid, un autre pour un pare-feu)... |
- | (Pour tester n'oubliez pas de commenter, mettre un ''#'' devant la ligne\\ ''pre-up iptables-restore < /etc/iptables'' du fichier /etc/network/interfaces ajoutée lors de la méthode précédente.) | + | |
+ | Ainsi par exemple le jour où on ajoutera une carte wifi sur son vieil ordi fixe, on se teste quelques nouvelles règles iptables, puis quand elles sont tip-top, on les sauvegarde en créant un ''iptables-save > /etc/iptables-wifi''.\\ | ||
+ | |||
+ | On ne restera plus qu'à ajouter ''pre-up iptables-restore < /etc/iptables-wifi'' avant la configuration de l'interface wlan dans /etc/network/interfaces sans avoir à modifier ce qui fonctionnait déjà... | ||
+ | |||
+ | * Une grande facilité de modification des règles du pare-feu : | ||
+ | Si pour une raison ou une autre il est nécessaire d'ajouter une règle au pare-feu, ou d'en supprimer une pour la modifier, on peut utiliser la commande iptables de suppression : | ||
+ | |||
+ | Par exemple :\\ | ||
+ | Lister les règles avec un numéro de ligne : | ||
+ | |||
+ | iptables -L INPUT -n --line-numbers | ||
+ | |||
+ | Supprimer une ligne particulière (avec le numéro de la colonne de gauche) : | ||
+ | |||
+ | iptables -D INPUT numeroDeLaLigneASupprimer | ||
+ | |||
+ | Dans ce cas pour sauvegarder les nouvelles règles il n'y a qu'à relancer : | ||
+ | |||
+ | iptables-save > /etc/même_nom_de_fichier_que_celui_modifier | ||
+ | |||
+ | Ainsi cela évite de modifier un quelconque fichier, et l'on peut se servir de toutes les commandes fournies par sa distribution. | ||
+ | |||
+ | ====Pour les fadas du "scripting" shell==== | ||
+ | Le script suivant permettra de mettre en place le pare-feu à chaque démarrage du système.\\ | ||
+ | Donc c'est soit la méthode de sauvegarde des règles iptables précédente, soit celle-ci.\\ | ||
+ | Si vous avez testé la première méthode, ne pas oublier de supprimer ou de commenté la ligne **''#post-up iptables-restore < /etc/firewall-client''** du fichier /etc/network/interfaces. | ||
+ | |||
+ | * Ce script permettra : | ||
+ | <code root>/etc/init.d/firewall-client.sh</code> | ||
+ | |||
+ | Usage: /etc/init.d/firewall-client.sh { start | stop | restart | status } | ||
+ | |||
+ | * Par exemple pour supprimer toutes les règles de toutes les tables : | ||
+ | <code root>/etc/init.d/firewall-client.sh stop</code> | ||
+ | |||
+ | * Avec "restart" pour permettre de remettre en place toutes les règles (via le fichier de sauvegarde d'iptables-restore) | ||
+ | * Avec "start" pour relancer toutes les règles avec le script lui-même et les sauvegarder | ||
+ | * Avec "status" pour l'affichage des règles FILTER et NAT) | ||
+ | |||
+ | <note tip> | ||
+ | Il faut prendre conscience que si l'on souhaite modifier les règles du pare-feu, il est nécessaire après avoir effectué ses tests d'aller éditer le fichier /etc/init.d/firewall-client pour y apporter les modifications souhaitées aux commandes iptables du script.\\ | ||
+ | |||
+ | Pour ce faire :\\ | ||
+ | |||
+ | **''update-rc.d -f firewall-client.sh remove''** | ||
+ | |||
+ | **''vim /etc/init.d/firewall-client.sh''** | ||
+ | |||
+ | -> On modifie ce qu'on veut | ||
+ | |||
+ | **''update-rc.d -f firewall-client.sh default''** | ||
+ | |||
+ | Si l'on n'inscrit pas toute modification dans /etc/init.d/firewall-client.sh ainsi qu'une réinitialisation de ipdate-rc, comme ci-dessus, la simple commande iptables-save lancée après toutes modifications de règles iptables seraient écrasées au prochain redémarrage du système qui ré-installera les règles du script /etc/init.d/firewall-client laissées en l'état. | ||
+ | </note> | ||
<code bash firewall-client.sh> | <code bash firewall-client.sh> | ||
Ligne 569: | Ligne 641: | ||
# Author: hypathie <hypathie@debian-facile> | # Author: hypathie <hypathie@debian-facile> | ||
# | # | ||
- | ##Set up init.d script | + | ##Set up /etc/init.d/firewall-client |
case "$1" in | case "$1" in | ||
'start') | 'start') | ||
- | /sbin/iptables-restore < /etc/config_parefeu | ||
- | RETVAL=$? | ||
- | ;; | ||
- | 'stop') | ||
- | /sbin/iptables-save > /etc/config_parefeu | ||
- | RETVAL=$? | ||
- | ;; | ||
- | 'clean') | ||
##Set up firewall-client | ##Set up firewall-client | ||
- | # Clear any existing rules | + | # Clear any FILTER existing rules |
/sbin/iptables -F | /sbin/iptables -F | ||
# Delete all User-specified chains | # Delete all User-specified chains | ||
Ligne 590: | Ligne 654: | ||
/sbin/iptables -P FORWARD DROP | /sbin/iptables -P FORWARD DROP | ||
# Allow trafic with DNS server | # Allow trafic with DNS server | ||
- | /sbin/iptables -t filter -A OUTPUT -p udp -m udp --dport 53 -m conntrack --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT | + | /sbin/iptables -t filter -A OUTPUT -p udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT |
- | /sbin/iptables -t filter -A INPUT -p udp -m udp --sport 53 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT | + | /sbin/iptables -t filter -A INPUT -p udp --sport 53 -m conntrack --ctstate ESTABLISHED -j ACCEPT |
#Allow trafic on internal network | #Allow trafic on internal network | ||
/sbin/iptables -t filter -A INPUT -i lo -j ACCEPT | /sbin/iptables -t filter -A INPUT -i lo -j ACCEPT | ||
/sbin/iptables -t filter -A OUTPUT -o lo -j ACCEPT | /sbin/iptables -t filter -A OUTPUT -o lo -j ACCEPT | ||
#Allow ping to internal network | #Allow ping to internal network | ||
- | /sbin/iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT | + | /sbin/iptables -A OUTPUT -o eth0 -p icmp -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT |
- | /sbin/iptables -A INPUT -p icmp -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | + | /sbin/iptables -A INPUT -i eth0 -p icmp -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT |
#Get web | #Get web | ||
/sbin/iptables -t filter -A OUTPUT -p tcp -m multiport --dports 80,443,8000 -m conntrack --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT | /sbin/iptables -t filter -A OUTPUT -p tcp -m multiport --dports 80,443,8000 -m conntrack --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT | ||
/sbin/iptables -t filter -A INPUT -p tcp -m multiport --sports 80,443,8000 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT | /sbin/iptables -t filter -A INPUT -p tcp -m multiport --sports 80,443,8000 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT | ||
+ | #Allow mailing protocols (IMAP and SMTP) | ||
+ | /sbin/iptables -A INPUT -m multiport -p tcp --sport 25,2525,587,465,143,993,995 -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
+ | /sbin/iptables -A OUTPUT -m multiport -p tcp --dport 25,2525,143,465,587,993,995 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | ||
+ | #Allow cups | ||
+ | iptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.22 -p tcp --dport 631 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | ||
+ | |||
+ | iptables -A OUTPUT -o eth0 -s 192.168.0.22 -d 192.168.0.0/24 -p tcp --sport 631 -m state ! --state INVALID -j ACCEPT | ||
+ | #Allow cups from sub-net | ||
+ | /sbin/iptables -A INPUT -i eth0 -s 192.168.1.0/24 -d 192.168.0.22 -p tcp --dport 631 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | ||
+ | /sbin/iptables -A OUTPUT -o eth0 -s 192.168.0.22 -d 192.168.1.0/24 -p tcp --sport 631 -m state ! --state INVALID -j ACCEPT | ||
#Set up a user chain for ssh outgoing | #Set up a user chain for ssh outgoing | ||
/sbin/iptables -t filter -N OutGoingSSH | /sbin/iptables -t filter -N OutGoingSSH | ||
Ligne 617: | Ligne 691: | ||
/sbin/iptables -t filter -A OUTPUT -o eth0 -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT | /sbin/iptables -t filter -A OUTPUT -o eth0 -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT | ||
/sbin/iptables -t filter -A INPUT -i eth0 -s 192.168.0.0/24 -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT | /sbin/iptables -t filter -A INPUT -i eth0 -s 192.168.0.0/24 -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT | ||
+ | echo "set up firewall-client .........> [OK]" | ||
+ | /sbin/iptables-save > /etc/firewall-client | ||
+ | echo "iptables-save > /etc/firewall-client .........> [OK]" | ||
+ | RETVAL=$? | ||
+ | ;; | ||
+ | 'stop') | ||
+ | # delete any existing rules | ||
+ | /sbin/iptables -t filter -F | ||
+ | /sbin/iptables -t nat -F | ||
+ | /sbin/iptables -t mangle -F | ||
+ | /sbin/iptables -t raw -F | ||
+ | /sbin/iptables -t filter -P INPUT ACCEPT | ||
+ | /sbin/iptables -t filter -P OUTPUT ACCEPT | ||
+ | /sbin/iptables -t filter -P FORWARD ACCEPT | ||
+ | echo "FILTER [ALL RULES .... [FLUSH] ..... POLICY ......> [ACCEPT]" | ||
+ | /sbin/iptables -t nat -P PREROUTING ACCEPT | ||
+ | /sbin/iptables -t nat -P POSTROUTING ACCEPT | ||
+ | /sbin/iptables -t nat -P OUTPUT ACCEPT | ||
+ | /sbin/iptables -t mangle -P PREROUTING ACCEPT | ||
+ | /sbin/iptables -t mangle -P OUTPUT ACCEPT | ||
+ | /sbin/iptables -t mangle -P POSTROUTING ACCEPT | ||
+ | /sbin/iptables -t mangle -P FORWARD ACCEPT | ||
+ | /sbin/iptables -t mangle -P INPUT ACCEPT | ||
+ | /sbin/iptables -t raw -P OUTPUT ACCEPT | ||
+ | /sbin/iptables -t raw -P PREROUTING ACCEPT | ||
+ | echo "ALL TABLES ....[FLUSH] ..... ALL POLICY .......> [ACCEPT]" | ||
RETVAL=$? | RETVAL=$? | ||
;; | ;; | ||
'restart') | 'restart') | ||
- | $0 stop && $0 start | + | /sbin/iptables-restore < /etc/firewall-client |
+ | echo "/etc/firewall-client ........[OK]" | ||
+ | RETVAL=$? | ||
+ | ;; | ||
+ | 'status') | ||
+ | /sbin/iptables -L -n --line-numbers | ||
+ | /sbin/iptables -t nat -L -n --line-numbers | ||
RETVAL=$? | RETVAL=$? | ||
;; | ;; | ||
*) | *) | ||
- | echo "Usage: $0 { start | stop | restart | clean}" | + | echo "Usage: $0 { start | stop | restart | status }" |
RETVAL=1 | RETVAL=1 | ||
;; | ;; | ||
Ligne 631: | Ligne 737: | ||
</code> | </code> | ||
- | ===firewall-client.sh comme script init=== | + | ===Instalation de firewall-client.sh comme script init=== |
- | Après avoir téléchargé firewall-client.sh. | + | * Téléchargé firewall-client.sh. |
+ | |||
+ | * Déplacer le fichier firewall-client.sh dans le répertoire d'init : | ||
<note important> | <note important> | ||
Attention de bien changer $USER par votre nom d'utilisateur !\\ | Attention de bien changer $USER par votre nom d'utilisateur !\\ | ||
Pour pouvoir écrire (i.e. créer un fichier dans un dossier root, il faut lancer la commande en tant que root. Et donc $USER serait l'utilisateur root qui n'a pas de fichier "Téléchargements". | Pour pouvoir écrire (i.e. créer un fichier dans un dossier root, il faut lancer la commande en tant que root. Et donc $USER serait l'utilisateur root qui n'a pas de fichier "Téléchargements". | ||
</note> | </note> | ||
- | * Déplacer dans le répertoire d'init : | ||
<code root>mv /home/$USER/Téléchargements/firewall-client.sh /etc/init.d/</code> | <code root>mv /home/$USER/Téléchargements/firewall-client.sh /etc/init.d/</code> | ||
- | * Ajouter les droits d'exécution au fichier pour en faire un exécutable : | + | * Définir les droits d'exécution et l'appartenance du fichier /etc/init.d/firewall-client.sh |
+ | |||
+ | Ils doivent être : | ||
<code root> | <code root> | ||
- | chmod +x /etc/init.d/firewall-client.sh | + | chmod 0755 /etc/init.d/firewall-client.sh</code> |
- | chmod 755 /etc/init.d/firewall-client.sh | + | <code root>chown root:root /etc/init.d/firewall-client.sh |
</code> | </code> | ||
Ligne 653: | Ligne 762: | ||
<code root>update-rc.d firewall-client.sh defaults</code> | <code root>update-rc.d firewall-client.sh defaults</code> | ||
- | Et si tout c'est bien passé, au prochain redémarrage : | + | * Pour démarrer : |
+ | |||
+ | <code root>update-rc.d firewall-client.sh defaults</code> | ||
+ | |||
+ | ===Et si tout c'est bien passé=== | ||
+ | Au prochain redémarrage, pendant la mise en route du système : | ||
+ | * Le pare-feu se met en place pendant le démarrage du système | ||
+ | <code>set up firewall-client .........> [OK] | ||
+ | iptables-save > /etc/firewall-client .........> [OK]</code> | ||
+ | |||
+ | * On peut le vérifier : | ||
<code root>iptables -L -n --line-numbers</code> | <code root>iptables -L -n --line-numbers</code> | ||
- | tout est là ! 8-) | + | Ou (plus complet) : |
+ | |||
+ | <code root>/etc/init.d/firewall-client.sh status</code> | ||
+ | |||
+ | Tout est là ! 8-) | ||
<note tip> | <note tip> | ||
Ligne 673: | Ligne 796: | ||
Et voilà c'est déjà fini ;-) | Et voilà c'est déjà fini ;-) | ||
- | **Prochain n° sur iptables : "[[atelier:chantier:iptables-un-pare-feu-pour-une-passerelle?&|un pare-feu pour une passerelle Debian]]".** | + | **Prochain n° sur iptables : "[[doc:reseau:iptables-pare-feu-pour-une-passerelle|un pare-feu pour une passerelle Debian]]".** |
=====Récapitulatif, commandes, options, syntaxe ===== | =====Récapitulatif, commandes, options, syntaxe ===== | ||
Ligne 686: | Ligne 809: | ||
| -L -t typetable | lister les règles d'un type de table où typetable est\\ soit ''FILTER''\\ soit ''NAT''\\ soit ''MANGLE'' ... | | | -L -t typetable | lister les règles d'un type de table où typetable est\\ soit ''FILTER''\\ soit ''NAT''\\ soit ''MANGLE'' ... | | ||
|-E <nowiki>[chain]</nowiki> | renommer la chaîne chain | | |-E <nowiki>[chain]</nowiki> | renommer la chaîne chain | | ||
- | | -F <nowiki>[chain]</nowiki> | effacer (flush) les règles de la chaîne chain\\ ATTENTION\\ si on ne précise pas de chaîne, tout est effacé ! | | + | | -F <nowiki>[chain]</nowiki> | effacer (flush) les règles de la chaîne chain | |
| -N chain | créer une nouvelle chaîne chain par l'usager | | | -N chain | créer une nouvelle chaîne chain par l'usager | | ||
| -X chain | effacer la chaîne chain de l'usager | | | -X chain | effacer la chaîne chain de l'usager | | ||
- | | -P chain target | définir la politique par défaut de la chaîne chain\\ où **target** est\\ soit ''ACCEPT''\\ soit ''DROP''\\ soit ''REJETC'' | | + | | -P chain target | définir la politique par défaut de la chaîne chain\\ où **target** est\\ soit ''ACCEPT''\\ soit ''DROP''\\ soit ''REJECT'' | |
| -Z <nowiki>[chain]</nowiki> | remise à zéro des compteurs dans la chaîne chain si elle est indiquée | | | -Z <nowiki>[chain]</nowiki> | remise à zéro des compteurs dans la chaîne chain si elle est indiquée | | ||