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-une-passerelle [07/11/2014 16:49] Hypathie [Le script de la passerelle] |
doc:reseau:iptables-pare-feu-pour-une-passerelle [16/11/2014 09:15] Hypathie [Les règles du pare-feu pas à pas] |
||
---|---|---|---|
Ligne 293: | Ligne 293: | ||
<code root> | <code root> | ||
- | iptables -P FORWARD DROP | ||
iptables -F | iptables -F | ||
iptables -X | iptables -X | ||
Ligne 344: | Ligne 343: | ||
- Interdire par défaut (DROP) la chaîne FORWARD | - Interdire par défaut (DROP) la chaîne FORWARD | ||
- Filter ce qui passe par FORWARD | - Filter ce qui passe par FORWARD | ||
- | - Autoriser (provisoirement) les entrées et sorties entre le <nowiki>LAN</nowiki> et le web. | + | - Par exemple pour autoriser la connexion au web du <nowiki>LAN</nowiki> on autorise tcp |
- | - Autoriser les pings depuis le pare-feu vers l'internet, uniquement si ceux-ci proviennent de connexions déjà établies ou dépendantes d'une connexion en cours. | + | - On autorise ICMP pour les pings |
- | - Autoriser la réponse du ping, que ce soit depuis le réseau interne, ou de la box-machin. | + | - Et bien sûr, ne pas oublier si on a "flushé" la table NAT, la commande avec MASQUERADE |
- | - Et bien sûr, ne pas oublier après avoir flusher la table NAT, la commande avec MASQUERADE | + | |
(//Puisque la politique par défaut de la table FILTER des chaînes INPUT et OUTPUT n'ont pas encore été modifiées, on peut déjà tester ces commandes.//) | (//Puisque la politique par défaut de la table FILTER des chaînes INPUT et OUTPUT n'ont pas encore été modifiées, on peut déjà tester ces commandes.//) | ||
* __Comme ceci__ : | * __Comme ceci__ : | ||
<code root> | <code root> | ||
- | ... | + | iptables -F |
+ | iptables -X | ||
+ | iptables -t nat -F | ||
+ | iptables -t nat -X | ||
+ | iptables -P INPUT ACCEPT | ||
+ | iptables -P FORWARD ACCEPT | ||
+ | iptables -P OUTPUT ACCEPT | ||
+ | |||
+ | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | ||
iptables -P FORWARD DROP | iptables -P FORWARD DROP | ||
- | ... | + | |
- | iptables -t filter -A FORWARD -i eth1 -o eth0 -p tcp -m multiport\ | + | iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -p\ |
- | --dports 80,443,8000 -j ACCEPT | + | tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT |
- | iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0\ | + | |
- | -d 192.168.1.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT | + | iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0 -d 192.168.1.0/24 -p\ |
+ | tcp -m state --state ESTABLISHED,RELATED -j ACCEPT | ||
+ | </code> | ||
+ | |||
+ | * Ce qui donne : | ||
+ | <code root>iptables -L</code> | ||
+ | <code> | ||
+ | Chain INPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | |||
+ | Chain FORWARD (policy DROP) | ||
+ | target prot opt source destination | ||
+ | ACCEPT tcp -- 192.168.1.0/24 anywhere state NEW,RELATED,ESTABLISHED | ||
+ | ACCEPT tcp -- anywhere 192.168.1.0/24 state RELATED,ESTABLISHED | ||
+ | |||
+ | Chain OUTPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | </code> | ||
+ | > La navigation web fonctionne | ||
+ | > Le ping vers google et vers 192.168.0.22 est bloqué car on a autorisé seulement tcp | ||
+ | |||
+ | * On ajoute une autorisation pour icmp : | ||
+ | |||
+ | <code root> | ||
iptables -t filter -A FORWARD -p icmp -j ACCEPT | iptables -t filter -A FORWARD -p icmp -j ACCEPT | ||
- | ... | ||
- | iptables -t filter -A INPUT -p icmp -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT | ||
- | iptables -t filter -A OUTPUT -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT | ||
- | ... | ||
- | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | ||
</code> | </code> | ||
- | <note> | ||
- | Ou sans suivi de connexion :\\ | ||
- | iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT\\ | + | * Ce qui donne : |
- | iptables -A FORWARD -o eth1 -i eth0 -j ACCEPT | + | |
- | </note> | + | <code>iptables -L</code> |
- | * On vérifie si le ping fonctionne de la machine A vers la machine B : | + | <code> |
+ | Chain INPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | |||
+ | Chain FORWARD (policy DROP) | ||
+ | target prot opt source destination | ||
+ | ACCEPT tcp -- 192.168.1.0/24 anywhere state NEW,RELATED,ESTABLISHED | ||
+ | ACCEPT tcp -- anywhere 192.168.1.0/24 state RELATED,ESTABLISHED | ||
+ | ACCEPT icmp -- anywhere anywhere | ||
+ | |||
+ | Chain OUTPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | </code> | ||
+ | |||
+ | > Le web et le ping fonctionne : | ||
+ | |||
+ | * De la machine A vers la machine B : | ||
<code user> | <code user> | ||
ping 192.168.1.2 | ping 192.168.1.2 | ||
Ligne 387: | Ligne 426: | ||
:-D | :-D | ||
- | * Et de la machine B vers la machine A : | + | * De la machine B vers la machine A : |
<code user> | <code user> | ||
ping 192.168.0.22</code> | ping 192.168.0.22</code> | ||
Ligne 401: | Ligne 440: | ||
8-) | 8-) | ||
- | * Pour voir ce qu'on a fait : | + | <note tip> |
- | <code root>iptables -L -t nat && iptables -L</code> | + | |
+ | **__Quelques exlications :__** | ||
+ | |||
+ | * __On autorise toute connexion pour le LAN__ | ||
+ | |||
+ | iptables -A FORWARD -i eth1 -j ACCEPT | ||
+ | iptables -A FORWARD -o eth1 -j ACCEPT | ||
+ | |||
+ | iptables -L | ||
+ | Chain INPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | Chain FORWARD (policy DROP) | ||
+ | target prot opt source destination | ||
+ | ACCEPT all -- anywhere anywhere | ||
+ | ACCEPT all -- anywhere anywhere | ||
+ | Chain OUTPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | |||
+ | > Ce qui entre ''-i'' et ce qui sort ''-o'' | ||
+ | > La navigation internet depuis un ordi du réseau 192.168.1.0/24 est possible | ||
+ | > ping de l'un de ces ordi vers google est ok | ||
+ | |||
+ | * __Sans suivi de connexion__ : | ||
+ | |||
+ | iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT | ||
+ | iptables -A FORWARD -o eth1 -i eth0 -j ACCEPT | ||
+ | |||
+ | > On constate que sans préciser de protocole ni de réseau, cela revient au même que précédemment | ||
+ | |||
+ | iptables -L | ||
+ | Chain INPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | Chain FORWARD (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | ACCEPT all -- anywhere anywhere | ||
+ | ACCEPT all -- anywhere anywhere | ||
+ | Chain OUTPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | |||
+ | > On autorise le passage de eth1 à eth0 et de eth0 à eth1 | ||
+ | |||
+ | * __Avec suivi de connexion__ : | ||
+ | |||
+ | iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT | ||
+ | iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0 -d 192.168.1.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT | ||
+ | |||
+ | > On autorise le passage de tous protocoles avec suivi de connexion, de eth1 à eth0, et inversement, en précisant les réseaux source et destination. | ||
+ | |||
+ | iptables -L | ||
+ | Chain INPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | Chain FORWARD (policy DROP) | ||
+ | target prot opt source destination | ||
+ | ACCEPT all -- 192.168.1.0/24 anywhere state NEW,RELATED,ESTABLISHED | ||
+ | ACCEPT all -- anywhere 192.168.1.0/24 state RELATED,ESTABLISHED | ||
+ | Chain OUTPUT (policy ACCEPT) | ||
+ | target prot opt source destination | ||
+ | |||
+ | > Là encore la navigation est possible pour un ordi du sous-réseau 192.168.1.0/24 | ||
+ | > Et le ping fonctionne vers google et l'ordi 192.168.0.22 sans besoin d'ajouter de règle imcp car on a autorisé TOUS les protocoles | ||
+ | </note> | ||
====Dépendance du NAT et des chaînes FILTER sur l'interface interne (eth1)==== | ====Dépendance du NAT et des chaînes FILTER sur l'interface interne (eth1)==== | ||
Ligne 452: | Ligne 552: | ||
#On garde nos règles concernant le DROP sur FORWARD (FILTER) | #On garde nos règles concernant le DROP sur FORWARD (FILTER) | ||
#mais on oublie pas eth1 ! | #mais on oublie pas eth1 ! | ||
- | iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24\ | + | /sbin/iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -p\ |
- | -d 0.0.0.0/0 -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT | + | tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT |
- | iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0\ | + | /sbin/iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0 -d 192.168.1.0/24 -p\ |
- | -d 192.168.1.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT | + | tcp -m state --state ESTABLISHED,RELATED -j ACCEPT |
- | + | ||
- | iptables -t filter -A FORWARD -p icmp -j ACCEPT | + | |
iptables -t filter -A INPUT -p icmp -i eth0 -m conntrack\ | iptables -t filter -A INPUT -p icmp -i eth0 -m conntrack\ | ||
Ligne 627: | Ligne 725: | ||
iptables -P FORWARD DROP | iptables -P FORWARD DROP | ||
- | iptables -A FORWARD -i eth1 -o eth0 -d 192.168.1.0/24 -s 0.0.0.0/0 -j ACCEPT | + | #On remets "masquerade" car on a flushé: |
+ | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | ||
+ | |||
+ | iptables -A FORWARD -i eth1 -o eth0 -d 192.168.1.0/24 -s 0.0.0.0/0\ | ||
+ | -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT | ||
iptables -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0\ | iptables -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0\ | ||
-d 192.168.1.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT | -d 192.168.1.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT | ||
Ligne 654: | Ligne 757: | ||
--icmp-type echo-reply -j DROP | --icmp-type echo-reply -j DROP | ||
- | #On remets "masquerade" car on a flushé: | ||
- | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | ||
</code> | </code> | ||
====DROP sur INPUT et OUTPUT (chaîne filter) ==== | ====DROP sur INPUT et OUTPUT (chaîne filter) ==== | ||
Ligne 695: | Ligne 796: | ||
# On garde nos règles concernant le DROP sur FORWARD (FILTER) | # On garde nos règles concernant le DROP sur FORWARD (FILTER) | ||
# et on oublie pas eth1 ! | # et on oublie pas eth1 ! | ||
- | iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24\ | + | iptables -t filter -A FORWARD -i eth1 -o eth0 -d 192.168.1.0/24 -s 0.0.0.0/0\ |
- | -d 0.0.0.0/0 -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT | + | -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT |
iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0\ | iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0\ | ||
- | -d 192.168.1.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT | + | -d 192.168.1.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT |
- | + | ||
iptables -t filter -A FORWARD -p icmp -j ACCEPT | iptables -t filter -A FORWARD -p icmp -j ACCEPT | ||
Ligne 968: | Ligne 1069: | ||
/sbin/iptables -A OUTPUT -o eth1 -j ACCEPT | /sbin/iptables -A OUTPUT -o eth1 -j ACCEPT | ||
#permettre le passage entre les deux interfaces eternet de la passerelle | #permettre le passage entre les deux interfaces eternet de la passerelle | ||
- | /sbin/iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT | + | /sbin/iptables -t filter -A FORWARD -i eth1 -o eth0 -s 192.168.1.0/24 -d 0.0.0.0/0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT |
- | /sbin/iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0 -d 192.168.1.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT | + | /sbin/iptables -t filter -A FORWARD -i eth0 -o eth1 -s 0.0.0.0/0 -d 192.168.1.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT |
/sbin/iptables -t filter -A FORWARD -p icmp -j ACCEPT | /sbin/iptables -t filter -A FORWARD -p icmp -j ACCEPT | ||
#accepter le ping entre les réseaux locaux | #accepter le ping entre les réseaux locaux | ||
Ligne 1107: | Ligne 1208: | ||
exit $RETVAL | exit $RETVAL | ||
</code> | </code> | ||
+ | |||
+ | <note tip> | ||
+ | **Pour autoriser la plateforme de jeux STEAM** | ||
+ | |||
+ | <code root> | ||
+ | /sbin/iptables -A INPUT -i eth1 -p udp -m udp --sport 27000 -m\ | ||
+ | state --state NEW,RELATED,ESTABLISHED -j ACCEPT | ||
+ | /sbin/iptables -A INPUT -i eth0 -p udp -m udp --sport 27000 -m\ | ||
+ | state --state RELATED,ESTABLISHED -j ACCEPT | ||
+ | </code> | ||
+ | |||
+ | Merci à robert2a pour cet ajout 8-) | ||
+ | |||
+ | [[http://debian-facile.org/viewtopic.php?pid=102028#p102028|Voir ce fil]] | ||
+ | </note> | ||
* Pour l'installation du script | * Pour l'installation du script |