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 [06/11/2014 17:46] Hypathie [Détail pour les protocole TCP et UDP] |
doc:reseau:iptables-pare-feu-pour-une-passerelle [07/11/2014 16:49] Hypathie [Le script de la passerelle] |
||
---|---|---|---|
Ligne 658: | Ligne 658: | ||
</code> | </code> | ||
====DROP sur INPUT et OUTPUT (chaîne filter) ==== | ====DROP sur INPUT et OUTPUT (chaîne filter) ==== | ||
- | Cette fois, il va falloir interdire (DROP) les chaînes INPUT et OUTPUT de la table FILTER pour tous les protocoles dont on a besoin.\\ | + | Cette fois, il va falloir interdire (DROP) les chaînes INPUT et OUTPUT de la table FILTER excepté pour tous les protocoles dont on a besoin.\\ |
- | D'abord pour ICMP qu'on ne laisse plus massivement entrer et sortir (table FILTER à DROP pour INPUT et OUTPUT, en plus de FORWARD).\\ Attention l'ordre des règles pour IMCP sur INPUT, OUTPUT et FORWARD, comptes ici. | + | D'abord pour ICMP qu'on ne laisse plus massivement entrer et sortir (table FILTER à DROP pour INPUT et OUTPUT, en plus de FORWARD).\\ |
+ | <note> | ||
+ | Attention l'ordre des règles pour IMCP sur INPUT, OUTPUT et FORWARD, comptes ici. | ||
+ | </note> | ||
- | On conserve ce qu'on a fait précédemment en ajoutant les commandes du [[atelier:chantier:iptables-pare-feu-pour-un-client#pour-les-fadas-du-scripting-shell|script pour un client du LAN]] mais en tenant compte du fait qu'il y a cette fois deux interfaces réseau. | + | On conserve ce qu'on a fait précédemment en ajoutant simplement les commandes du [[atelier:chantier:iptables-pare-feu-pour-un-client#pour-les-fadas-du-scripting-shell|script pour un client du LAN]] mais en tenant compte du fait qu'il y a cette fois deux interfaces réseau. |
<code root> | <code root> | ||
Ligne 914: | Ligne 917: | ||
</code> | </code> | ||
- | ====Le script de la passerelle ==== | + | =====Le script de la passerelle ===== |
- | Tenons compte de ces rappels, pour ajouter une connexion FTP et SSH loggées, et puisqu'on y est un petit filtrage supplémentaire au niveau des Flags TCP. | + | Tenons compte de ces rappels, pour ajouter à tout ce qu'on a fait jusqu'à présent, une connexion FTP et SSH loggées, et puisqu'on y est un petit filtrage supplémentaire au niveau des Flags TCP. |
+ | |||
+ | On ajoute au besoin les règles pour un serveur d'impression (cups ; port 631) ;\\ | ||
+ | et de même, si l'on veut (commenter/décommenter), les règles NAT pour un proxy transparent pour le sous-réseau 162.168.1.0/24.\\ | ||
+ | Pour plus de détail sur l'installation d'un proxy transparent voir [[utilisateurs:hypathie:tutos:proxy-transparent]]. | ||
<code bash firewall_gateway.sh> | <code bash firewall_gateway.sh> | ||
Ligne 934: | Ligne 942: | ||
# Author: hypathie <hypathie@debian-facile> | # Author: hypathie <hypathie@debian-facile> | ||
# | # | ||
- | ##Set up init.d script | + | ##Set up /etc/init.d/firewall_gateway.sh |
case "$1" in | case "$1" in | ||
'start') | 'start') | ||
- | /sbin/iptables-restore < /etc/config_parefeu | ||
- | RETVAL=$? | ||
- | ;; | ||
- | 'stop') | ||
- | /sbin/iptables-save > /etc/config_parefeu | ||
- | RETVAL=$? | ||
- | ;; | ||
- | 'clean') | ||
- | |||
/sbin/iptables -F | /sbin/iptables -F | ||
/sbin/iptables -X | /sbin/iptables -X | ||
- | /sbin/iptables -t nat -F | ||
- | /sbin/iptables -t nat -X | ||
- | /sbin/iptables -P INPUT ACCEPT | ||
- | /sbin/iptables -P FORWARD ACCEPT | ||
- | /sbin/iptables -P OUTPUT ACCEPT | ||
/sbin/iptables -P INPUT DROP | /sbin/iptables -P INPUT DROP | ||
/sbin/iptables -P OUTPUT DROP | /sbin/iptables -P OUTPUT DROP | ||
Ligne 961: | Ligne 955: | ||
/sbin/iptables -t nat -P OUTPUT ACCEPT | /sbin/iptables -t nat -P OUTPUT ACCEPT | ||
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | ||
+ | ##commenter / décommenter et adapter les quatre lignes suivantes pour ne pas mettre en place / mettre en place | ||
+ | ##un proxy transparent (squid) | ||
+ | /sbin/iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.0.1:3129 | ||
+ | /sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3129 | ||
+ | /sbin/iptables -t mangle -A PREROUTING -p tcp --dport 3128 -j DROP | ||
+ | /sbin/iptables -t mangle -A PREROUTING -p tcp --dport 3129 -j DROP | ||
+ | #accepter l'interface lo | ||
/sbin/iptables -A INPUT -i lo -j ACCEPT | /sbin/iptables -A INPUT -i lo -j ACCEPT | ||
/sbin/iptables -A OUTPUT -o lo -j ACCEPT | /sbin/iptables -A OUTPUT -o lo -j ACCEPT | ||
+ | #accepter le sous-réseau | ||
/sbin/iptables -A INPUT -i eth1 -j ACCEPT | /sbin/iptables -A INPUT -i eth1 -j ACCEPT | ||
/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 | ||
/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 -p tcp -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 -p tcp -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 | ||
/sbin/iptables -t filter -A INPUT -p icmp -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | /sbin/iptables -t filter -A INPUT -p icmp -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | ||
/sbin/iptables -t filter -A OUTPUT -p icmp -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | /sbin/iptables -t filter -A OUTPUT -p icmp -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | ||
/sbin/iptables -t filter -A INPUT -p icmp -i eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | /sbin/iptables -t filter -A INPUT -p icmp -i eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | ||
/sbin/iptables -t filter -A OUTPUT -p icmp -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | /sbin/iptables -t filter -A OUTPUT -p icmp -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | ||
- | /sbin/iptables -t filter -A OUTPUT -o eth0 -p udp -m udp --dport 53 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | ||
- | /sbin/iptables -t filter -A INPUT -i eth0 -p udp -m udp --sport 53 -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
- | /sbin/iptables -t filter -A OUTPUT -o eth1 -p udp -m udp --dport 53 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | ||
- | /sbin/iptables -t filter -A INPUT -i eth1 -p udp -m udp --sport 53 -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
- | /sbin/iptables -t filter -A OUTPUT -o eth0 -p tcp -m multiport --dports 80,443,8000 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | ||
- | /sbin/iptables -t filter -A INPUT -i eth0 -p tcp -m multiport --sports 80,443,8000 -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
- | /sbin/iptables -A OUTPUT -o eth1 -p tcp -m multiport --dports 80,443,8000 -j ACCEPT | ||
- | /sbin/iptables -A INPUT -i eth1 -p tcp -m multiport --sports 80,443,8000 -j ACCEPT | ||
- | #Si le serveur cups est branché sur un ordinateur du réseau 192.168.0.0/24, par exemple sur 192.168.0.22 | ||
- | #décommenter les deux lignes suivantes : | ||
- | /sbin/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 | ||
- | /sbin/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 | ||
- | |||
/sbin/iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT | /sbin/iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT | ||
/sbin/iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT | /sbin/iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT | ||
Ligne 1020: | Ligne 1011: | ||
/sbin/iptables -A syn_flood -j LOG --log-prefix '[SYN_FLOOD] : ' | /sbin/iptables -A syn_flood -j LOG --log-prefix '[SYN_FLOOD] : ' | ||
/sbin/iptables -A syn_flood -j DROP | /sbin/iptables -A syn_flood -j DROP | ||
+ | #autoriser la connexion avec les serveurs DNS | ||
+ | /sbin/iptables -t filter -A OUTPUT -o eth0 -p udp -m udp --dport 53 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | ||
+ | /sbin/iptables -t filter -A INPUT -i eth0 -p udp -m udp --sport 53 -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
+ | /sbin/iptables -t filter -A OUTPUT -o eth1 -p udp -m udp --dport 53 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | ||
+ | /sbin/iptables -t filter -A INPUT -i eth1 -p udp -m udp --sport 53 -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
+ | #autoriser la navigation web | ||
+ | /sbin/iptables -t filter -A OUTPUT -o eth0 -p tcp -m multiport --dports 80,443,8000 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT | ||
+ | /sbin/iptables -t filter -A INPUT -i eth0 -p tcp -m multiport --sports 80,443,8000 -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
+ | /sbin/iptables -A OUTPUT -o eth1 -p tcp -m multiport --dports 80,443,8000 -j ACCEPT | ||
+ | /sbin/iptables -A INPUT -i eth1 -p tcp -m multiport --sports 80,443,8000 -j ACCEPT | ||
+ | #Si le serveur cups est branché sur un ordinateur du réseau 192.168.0.0/24, par exemple sur 192.168.0.22 | ||
+ | # laisser décommenter les deux lignes suivantes : | ||
+ | /sbin/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 | ||
+ | /sbin/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 | ||
+ | #créer une chaîne utilisateur pour les connexion ssh, les loguer et les accepter | ||
/sbin/iptables -t filter -N InComingSSH | /sbin/iptables -t filter -N InComingSSH | ||
/sbin/iptables -I INPUT -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j InComingSSH | /sbin/iptables -I INPUT -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j InComingSSH | ||
Ligne 1027: | Ligne 1033: | ||
/sbin/iptables -t filter -A OUTPUT -o eth1 -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT | /sbin/iptables -t filter -A OUTPUT -o eth1 -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT | ||
/sbin/iptables -t filter -A INPUT -i eth1 -s 192.168.0.0/24 -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT | /sbin/iptables -t filter -A INPUT -i eth1 -s 192.168.0.0/24 -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT | ||
+ | #créer une chaîne utilisateur pour les connexions ftp, et les accepter | ||
/sbin/iptables -N ftp_in_accept | /sbin/iptables -N ftp_in_accept | ||
/sbin/iptables -I INPUT -i eth0 -p tcp --sport 21 -m state --state ESTABLISHED,RELATED -j ftp_in_accept | /sbin/iptables -I INPUT -i eth0 -p tcp --sport 21 -m state --state ESTABLISHED,RELATED -j ftp_in_accept | ||
Ligne 1035: | Ligne 1042: | ||
/sbin/iptables -A INPUT -i eth1 -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT | /sbin/iptables -A INPUT -i eth1 -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT | ||
/sbin/iptables -I INPUT -i eth1 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT | /sbin/iptables -I INPUT -i eth1 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT | ||
+ | echo "set up firewall_gateway.sh .........> [OK]" | ||
+ | /sbin/iptables-save > /etc/firewall_gateway.sh | ||
+ | echo "iptables-save > /etc/firewall_gateway.sh .........> [OK]" | ||
+ | RETVAL=$? | ||
+ | ;; | ||
+ | 'stop') | ||
+ | # Supprime toutes les règles de la tables FILTER et pose la police ACCEPT pour toutes les chaînes | ||
+ | /sbin/iptables -t filter -F | ||
+ | /sbin/iptables -t filter -X | ||
+ | /sbin/iptables -t filter -P INPUT ACCEPT | ||
+ | /sbin/iptables -t filter -P OUTPUT ACCEPT | ||
+ | /sbin/iptables -t filter -P FORWARD ACCEPT | ||
+ | echo "FILTER [ALL firewall_gateway.sh's rules .... [FLUSH] ..... POLICY ......> [ACCEPT]" | ||
+ | echo "NAT ...POSTROUTING ... MASQUERADE .... [STILL SET UP]" | ||
RETVAL=$? | RETVAL=$? | ||
;; | ;; | ||
'restart') | 'restart') | ||
- | $0 stop && $0 start | + | #ré-installe le pare-feu complet, y compris NAT (masquerade), DNAT (port 631) |
+ | /sbin/iptables-restore < /etc/firewall_gateway.sh | ||
+ | echo "/etc/firewall-client ........> [OK]" | ||
+ | echo "NAT (masquerade) ........> [OK]" | ||
+ | echo "DNAT (port 631) ........> [OK]" | ||
+ | RETVAL=$? | ||
+ | ;; | ||
+ | 'status') | ||
+ | /sbin/iptables -L -n --line-numbers | ||
+ | /sbin/iptables -t nat -L -n --line-numbers | ||
+ | RETVAL=$? | ||
+ | ;; | ||
+ | 'flush') | ||
+ | #supprime toutes les règles de toutes les tables ; accepte tout | ||
+ | /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]" | ||
+ | echo "WARNING ........ ALL POLICY ......> [ACCEPT]" | ||
+ | RETVAL=$? | ||
+ | ;; | ||
+ | 'deletnat') | ||
+ | /sbin/iptables -t nat -F | ||
+ | /sbin/iptables -t nat -X | ||
+ | /sbin/iptables -t mangle -F | ||
+ | /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 | ||
+ | |||
+ | echo "NAT/MANGLE [ALL RULES .... [FLUSH] ..... POLICY ......> [ACCEPT]" | ||
+ | echo "INFO ......> [NAT/DNAT is OFF]" | ||
+ | echo "INFO ......> [FILTER STILL SET UP]" | ||
RETVAL=$? | RETVAL=$? | ||
;; | ;; | ||
*) | *) | ||
- | echo "Usage: $0 { start | stop | restart | clean}" | + | echo "Usage: $0 { start | stop | restart | status | flush | deletnat }" |
RETVAL=1 | RETVAL=1 | ||
;; | ;; | ||
Ligne 1051: | Ligne 1109: | ||
* Pour l'installation du script | * Pour l'installation du script | ||
- | Suivre la même méthode que pour [[atelier:chantier:iptables-pare-feu-pour-un-client#firewall-clientsh-comme-script-init|firewall-client comme script init]].\\ | + | Suivre la même méthode que pour [[atelier:chantier:iptables-pare-feu-pour-un-client?&#pour-les-fadas-du-scripting-shell|firewall-client comme script init]].\\ |
* Ou si l'on préfère utiliser les commandes iptables-save et iptables-restore | * Ou si l'on préfère utiliser les commandes iptables-save et iptables-restore | ||
Ligne 1107: | Ligne 1165: | ||
On laisse le terminal (de la passerelle) en état d'attente, et on passe sur le terminal du client B. | On laisse le terminal (de la passerelle) en état d'attente, et on passe sur le terminal du client B. | ||
- | * Côté client DHCP (ordinateur B) : | + | * Côté **client** DHCP (ordinateur B) on annule le bail DHCP : |
- | + | ||
- | -On commence par annuler le bail DHCP.\\ Comme ceci : | + | |
<code root> | <code root> | ||
Ligne 1116: | Ligne 1172: | ||
- | -Il n'y a plus d'IP : | + | >Il n'y a plus d'IP : |
<code root>eth0 Link encap:Ethernet HWaddr 00:1e:0b:67:9b:b7 | <code root>eth0 Link encap:Ethernet HWaddr 00:1e:0b:67:9b:b7 | ||
adr inet6: xxxxxxxxxxxx Scope:Lien</code> | adr inet6: xxxxxxxxxxxx Scope:Lien</code> | ||
- | - On lance une requête DHCP | + | * On lance une requête DHCP |
<code root> | <code root> | ||
dhclient eth0 | dhclient eth0 | ||
</code> | </code> | ||
- | Observez ce que nous dit "tcpdump" (dans le terminal de la passerelle) au lancemant de la commande\\ ''dhclient eth0'' sur l'ordinateur B (client DHCP) : | + | * Côté serveur DHCP : |
+ | Observez ce que nous dit "tcpdump" : | ||
<code> | <code> | ||
Ligne 1145: | Ligne 1203: | ||
</code> | </code> | ||
- | - Et en plus l'IP de l'ordinateur B a bien changé ! | + | * Et l'IP de l'ordinateur client DHCP a bien changé ! |
<code>INET_IP=`ifconfig $INET_IFACE | grep inet | \ | <code>INET_IP=`ifconfig $INET_IFACE | grep inet | \ |