Le schéma final adopté est le suivant:
La machine Debian est donc le proxy transparent, elle gère aussi la partie sécurité avec iptables et c’est elle qui fournit les adresses ip via le serveur dhcp que j’ai installé dessus. Concernant la partie dns, j’ai conservé l’idée de départ, à savoir un forward du port 53.
Bilan: même après un redémarrage du serveur Debian, tout fonctionne comme sur des roulettes! du moins la partie surf sur internet. car on en ce moment nous n’avons pas de visiteurs et j’ai prévu d’autres règles iptables que je n’ai pas pu tester pour l’instant.
mon post concerne donc iptables, j’aimerais vous poster mes règles. j’ai procédé de la sorte: des scripts par port quasiment sauf pour internet et d’autres scripts généraux qui appellent les premiers, ça permet de modifier les scripts par port et le tout sera pris en compte.
SCRIPT INTERNET:
#!/bin/bash
Déclarations
lan=192.168.2.0/24
ip_local_modem=192.168.1.150
ip_local_lan=192.168.2.1
point_acces_wifi=192.168.2.11
affiche les commandes exécutées dans le script
set -x
être capable de paramétrer le point d’accès wifi 192.168.2.11 seulement depuis la machine locale (192.168.2.1) via http
iptables -A INPUT -s $point_acces_wifi -d $ip_local_lan -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -s $ip_local_lan -d $point_acces_wifi -p tcp --dport 80 -j ACCEPT
accepter en entrée et en sortie le port 80 (www) sauf ce qui vient du lan
iptables -A INPUT -s ! $lan -d $ip_local_modem -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -s $ip_local_modem -p tcp --dport 80 -j ACCEPT
accepter en entrée et en sortie le port 443 (https) sauf ce qui vient du lan
iptables -A INPUT -s ! $lan -d $ip_local_modem -p tcp --sport 443 -j ACCEPT
iptables -A OUTPUT -s $ip_local_modem -p tcp --dport 443 -j ACCEPT
accepter en entrée et en sortie le port 53 (dns) sauf ce qui vient du lan
iptables -A INPUT -s ! $lan -d $ip_local_modem -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -s $ip_local_modem -p udp --dport 53 -j ACCEPT
SCRIPT PROXY:
#!/bin/bash
lan=192.168.2.0/24
ip_local_modem=192.168.1.150
ip_local_lan=192.168.2.1
affiche les commandes exécutées dans le script
set -x
accepter en entrée et en sortie le port 3128 (proxy) que en provenance du lan
iptables -A INPUT -i eth1 -s $lan -d $ip_local_lan -p tcp --dport 3128 -j ACCEPT
iptables -A OUTPUT -s $ip_local_lan -p tcp --sport 3128 -j ACCEPT
forwarder le port 53 (dns)
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p udp --sport 53 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p udp --sport 53 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p udp --dport 53 -j ACCEPT
forwarder le port 443 (https)
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p tcp --sport 443 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p tcp --sport 443 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p tcp --dport 443 -j ACCEPT
rediriger tout ce qui vient du lan à destination du port 80 vers le port 3128
iptables -t nat -A PREROUTING -i eth1 -s $lan -p tcp --dport 80 -j REDIRECT --to-port 3128
cacher les adresses ip du lan, faire croire que c’est l’adresse 192.168.1.150 du routeur
iptables -t nat -A POSTROUTING -s $lan -o eth0 -j MASQUERADE
SCRIPT LO:
#!/bin/bash
affiche les commandes exécutées dans le script
set -x
Autoriser les paquets pour lo
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
SCRIPT PING:
#!/bin/bash
boucle_locale=127.0.0.1
ip_local_modem=192.168.1.150
ip_local_lan=192.168.2.1
exterieur=192.168.1.0/24
lan=192.168.2.0/24
NOTE: si on veut juste pouvoir pinger la machine locale, la règle suivante suffit.
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
Cette règle permet d’accepter tous les paquets sur l’interface lo.
affiche les commandes exécutées dans le script
set -x
pouvoir envoyer un echo-request et un echo-reply
iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p ICMP --icmp-type echo-reply -j ACCEPT
accepter les echo-request provenant uniquement du réseau 192.168.1.0/24 (y compris de soi-même)
iptables -A INPUT -s $exterieur -p ICMP --icmp-type echo-request -j ACCEPT
accepter les echo-reply provenant uniquement du réseau 192.168.1.0/24 (y compris de soi-même)
iptables -A INPUT -s $exterieur -p ICMP --icmp-type echo-reply -j ACCEPT
accepter les echo-request provenant uniquement du lan (y compris de soi-même)
iptables -A INPUT -s $lan -p ICMP --icmp-type echo-request -j ACCEPT
accepter les echo-reply provenant uniquement du lan (y compris de soi-même)
iptables -A INPUT -s $lan -p ICMP --icmp-type echo-reply -j ACCEPT
pouvoir se pinger sur la boucle locale
iptables -A INPUT -s $boucle_locale -p ICMP --icmp-type echo-request -j ACCEPT
iptables -A INPUT -s $boucle_locale -p ICMP --icmp-type echo-reply -j ACCEPT
que le lan puisse puisse envoyer un echo-request vers le reseau 192.168.1.0/24
iptables -A FORWARD -i eth1 -o eth0 -s $lan -d $exterieur -p ICMP --icmp-type echo-request -j ACCEPT
que le lan puisse puisse recevoir un echo-reply depuis le reseau 192.168.1.0/24
iptables -A FORWARD -i eth0 -o eth1 -s $exterieur -d $lan -p ICMP --icmp-type echo-reply -j ACCEPT
que le reseau 192.168.1.0/24 puisse puisse envoyer un echo-request vers le lan
iptables -A FORWARD -i eth0 -o eth1 -s $exterieur -d $lan -p ICMP --icmp-type echo-request -j ACCEPT
que le reseau 192.168.1.0/24 puisse recevoir un echo-reply depuis le lan
iptables -A FORWARD -i eth0 -o eth1 -s $exterieur -d $lan -p ICMP --icmp-type echo-reply -j ACCEPT
SCRIPT SAMBA:
#!/bin/bash
exterieur=192.168.1.0/24
affiche les commandes exécutées dans le script
set -x
accepter en entrée et en sortie le port 445 (samba pour W2K/XP/2003) que pour le réseau 192.168.1.0/24
iptables -A INPUT -s $exterieur -p tcp --dport 445 -j ACCEPT
iptables -A OUTPUT -d $exterieur -p tcp --sport 445 -j ACCEPT
Et j’ai donc prévu des scripts pour les visiteurs, les voici:
SCRIPT FTP:
#!/bin/bash
lan=192.168.2.0/24
ip_local_modem=192.168.1.150
ip_local_lan=192.168.2.1
affiche les commandes exécutées dans le script
set -x
forwarder le port 21 (ftp)
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p tcp --sport 21 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p tcp --sport 21 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p tcp --dport 21 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p tcp --dport 21 -j ACCEPT
SCRIPT POP3:
#!/bin/bash
lan=192.168.2.0/24
ip_local_modem=192.168.1.150
ip_local_lan=192.168.2.1
affiche les commandes exécutées dans le script
set -x
forwarder le port 110 (pop3) en tcp
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p tcp --sport 110 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p tcp --sport 110 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p tcp --dport 110 -j ACCEPT
forwarder le port 110 (pop3) en udp
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p udp --sport 110 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p udp --sport 110 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p udp --dport 110 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p udp --dport 110 -j ACCEPT
SCRIPT POP3s:
#!/bin/bash
lan=192.168.2.0/24
ip_local_modem=192.168.1.150
ip_local_lan=192.168.2.1
affiche les commandes exécutées dans le script
set -x
forwarder le port 995 (pop3s) en tcp
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p tcp --sport 995 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p tcp --sport 995 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p tcp --dport 995 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p tcp --dport 995 -j ACCEPT
forwarder le port 995 (pop3s) en udp
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p udp --sport 995 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p udp --sport 995 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p udp --dport 995 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p udp --dport 995 -j ACCEPT
SCRIPT SMTP:
#!/bin/bash
lan=192.168.2.0/24
ip_local_modem=192.168.1.150
ip_local_lan=192.168.2.1
affiche les commandes exécutées dans le script
set -x
forwarder le port 25 (smtp) en tcp
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p tcp --sport 25 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p tcp --sport 25 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p tcp --dport 25 -j ACCEPT
SCRIPT VPN:
#!/bin/bash
lan=192.168.2.0/24
ip_local_modem=192.168.1.150
ip_local_lan=192.168.2.1
affiche les commandes exécutées dans le script
set -x
forwarder le port 1701 (l2tp) en tcp
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p tcp --sport 1701 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p tcp --sport 1701 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p tcp --dport 1701 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p tcp --dport 1701 -j ACCEPT
forwarder le port 1701 (l2tp) en udp
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p udp --sport 1701 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p udp --sport 1701 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p udp --dport 1701 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p udp --dport 1701 -j ACCEPT
forwarder le port 1723 (pptp) en tcp
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p tcp --sport 1723 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p tcp --sport 1723 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p tcp --dport 1723 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p tcp --dport 1723 -j ACCEPT
forwarder le port 1723 (pptp) en udp
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p udp --sport 1723 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p udp --sport 1723 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -s $lan -p udp --dport 1723 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -d $lan -p udp --dport 1723 -j ACCEPT
j’ai aussi d’autres scripts que je ne juge pas utile de poster, ces derniers permettant de regrouper des scripts pour les employés ou pour les visiteurs, de tout fermer ou de tout ouvrir, ou bien encore d’enlever une règle précise par numéro de ligne.
J’espère que j’ai bien fait d’avoir posté mes scripts sur le post initialement prévu pour le squid transparent, sinon je réédite tout ça et je crée un nouveau sujet.
Merci de me laisser vos critiques sur mes scripts iptables