IPTABLES et interfaces virtuelles [RESOLU]

Bonjour à tous, voila je possède un Serveur sous Debian !!!

Dessus il y a une carte réseau eth0 qui est connecté a mon réseau local.

J’ai crée une interface virtuelle eth0:1.

Dans je gére toutes mes règles iptables qui se lance automatiquement lors du redémarrage du Serveur.

Jusqu’ici tout fonctionne.

Mais je voudrais insérer des règles Iptables spécifique a mon interfaces eth0:1 car la syntaxe “eth0:1” n’est pas accepter.

Ma question est :

Comment utiliser mon interface virtuelle dans iptables ?

J’ai vue sur google qu’il été possible de mettre les adresse IP au lieu de “eth0” ou “eth0:1” mais je ne trouve pas la syntaxe.

Votre aide me serais d’un grand secours car un fois ce petit problème résolu, je pourrait utiliser ce serveur comme firewall, routeur NAT pour tout mon réseau local avec 1 seul carte réseau.

Cordialement

Je ne sais pas pour d’autres noyaux/OS, mais pour Linux, eth0:1 n’est pas une interface virtuelle ; c’est un “alias IP”, une simple étiquette (label) associée à une adresse supplémentaire attribuée à eth0.

Pour s’en convaincre, il suffit d’exécuter la commande suivante (installer le paquetage iproute si nécessaire) :

Pour le noyau, iptables, le routage et nombre d’outils réseau, eth0:1 ça n’existe pas. La seule interface qui existe, c’est eth0. Quand la machine envoie ou reçoit un paquet, c’est par eth0.

Qu’entends-tu exactement par “règles spécifiques à mon interface eth0:1” ?

Et bien je voudrais utiliser mon Serveur comme passerelle internet/firewall. N’ayant qu’une seulle carte réseau sur celui-ci je voulais ajouter une adresse IP virtuelle pour réussir a mettre en place ma passerelle.

Tout d’abord, une mise au point. Peu importe le nombre de cartes réseau, ce qui compte ce sont les interfaces réseau. Une carte ethernet à deux ports, c’est deux interfaces. Une carte ethernet et une connexion PPP ou VPN, c’est deux interfaces. Une carte ethernet et deux VLAN dessus, c’est trois interfaces.

Donc, la machine a une seule interface réseau, eth0 ?
Dans ce cas tu peux oublier l’utilisation comme firewall, évidemment. Comme passerelle (pour quoi ?) ça reste éventuellement faisable, même si ce n’est pas très orthodoxe.
Comment se fait la connexion à internet ?

La machine possède effectivement 1 seule interfaces réseau qui est eth0.
La connexion à internet ce fait via ma Freebox paramétrée en Routeur.

Je viens d’avoir une idée toute bête, je me casse la tête depuis une semaine la dessus !!!

Voila en gros mon réseau :

                               |--> Serveur DEBIAN
                  |--> switch  |--> 4 PC
Routeur Freebox V5|            |--> Imprimante réseau
                  |            |
                  |--> freebox HD en CPL [/code]


Si je remet ma freebox en modem classique (sans routeur) que je la relie a mon Serveur Debian en USB puis que je relie le Serveur au switch via l'interface Ethernet mon problème devrait être résolu car plus besoins d'IP virtuelle. Ce qui me donnerai :

                           
[code]Routeur Freebox V5|--> Serveur DEBIAN|--> switch |--> 4 PC
                  |                              |--> Imprimante réseau
                  |--> freebox HD en CPL

Dans ce cas j’utilise mon Serveur Débian pour faire office de Firewall, Passerelle, Routeur NAT.

Qu’en pensez vous ?

Sachant que je ne peu pas rajouter de carte réseau dans mon Serveur Debian.

Une connexion USB avec la Freebox, c’est une interface réseau. Après, on peut discuter de la fiabilité de faire du réseau avec de l’USB…

Mais pourquoi vouloir utiliser le serveur comme passerelle alors que la Freebox en mode routeur le fait déjà ?

Edit : parler d’IP virtuelle dans ce contexte est impropre.

Je veut l’utiliser comme passerelle car le freebox propose une fonction Routeur minimaliste et ne possède pas de firewall. Je veut donc la remplaçer par mon Serveur Débian qui lui jouera la rôle de Routeur et Firewall pour sécuriser mon Réseau local. De plus j’envisage d’y installer SQUID dans quelques temps.

Voilà pourquoi je me renseigne déjà pour réussir a placer le Serveur Débian entre ma Freebox et mon réseau Local.

BOn j’ai réussi a faire comme je voulais, a savoir Freebox en USB sans le mode routeur sur le Serveur Debian, donc je me retrouve avec une interface “eth 2” avec une adresse publique :slightly_smiling:

Maintenant je voudrais vous montrer mon Itables juste pour avoir vos avis quand a la maniére donc je l’ai consitué et surtout avoir vos avis / critiques en ce qui conçerne la sécuritée pour que je puisse corriger les faillle si il y en a :slightly_smiling:

Cordialement.

[code]#!/bin/sh
case “$1” in
start|"")

echo - AAAAAAAAA INITIALISATION FIREWALL AAAAAAAAA

#eth1 --> LAN
#eth2 --> WAN

############################# REGLES GENERALES ###################

Supprime les chaines de la table filter (INPUT, FORWARD et OUTPUT)

iptables -F

Supprime les chaines personnelles de la table filter

iptables -X

Supprime les chaines de la table nat (PREROUTING, OUTPUT et POSTROUTING)

iptables -t nat -F

Supprime les chainess personnelles de la table nat

iptables -t nat -X

REGLE GENREALES

iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -P INPUT DROP

########################### REGLES LOCAL SUR PROCESSUS LOCAL #############

AUTORISER LE LOOPBACK

iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

NE PAS CASSER CONNEXIONS ETABLIES PAR PROCESSUS LOCAUX OU CLIENT WAN-LAN VERS PASSERELLE

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

TEAMSPEAK - DEPUIS WAN-LAN VERS PASSERELLE

iptables -t filter -A INPUT -p UDP --dport 8767 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 14534 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 51234 -j ACCEPT

SSH DE PASSERELLE VERS WAN et SSH DEPUIS WAN-LAN VERS PASSERELLE

iptables -t filter -A INPUT -p TCP --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -o eth2 -p TCP --dport 22 -j ACCEPT

FTP DEPUIS PASSERELLE VERS WAN

#iptables -t filter -A OUTPUT -o eth2 -p TCP --dport 21 -j ACCEPT

HTTP DEPUIS PASSERELLE VERS WAN pour APT-GET

iptables -t filter -A OUTPUT -o eth2 -p TCP --dport 80 -j ACCEPT

PING DE PASSERELLE vers WAN-LAN

iptables -t filter -A OUTPUT -p ICMP -j ACCEPT

DNS DE PASSERELLE VERS WAN

iptables -t filter -A OUTPUT -o eth2 -p TCP --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -o eth2 -p UDP --dport 53 -j ACCEPT

REQUETES RESEAU DU LAN VERS PASSERELLE

iptables -t filter -A INPUT -i eth1 -p TCP --dport 135 -j ACCEPT
iptables -t filter -A INPUT -i eth1 -p UDP --dport 137 -j ACCEPT
iptables -t filter -A INPUT -i eth1 -p UDP --dport 138 -j ACCEPT
iptables -t filter -A INPUT -i eth1 -p TCP --dport 445 -j ACCEPT

DHCP FIN DE BAIL RENOUVELLEMENT IP CARTE ETH2 AVEC ROUTEUR

iptables -t filter -A OUTPUT -o eth2 -p UDP --dport 67 -j ACCEPT
iptables -t filter -A INPUT -i eth2 -p UDP --dport 67 -j ACCEPT

#################### FICHIERS DE LOGS ####################

FICHIER DE LOG

iptables -t filter -A INPUT -j LOG --log-prefix=" BLOQUE IPTABLES INPUT “
iptables -t filter -A OUTPUT -j LOG --log-prefix=” BLOQUE ITABLES OUTPUT "

Ne pas afficher les logs dans la console

Le premier chiffre correspond au niveau des logs afficher

Je ne connais pas l’utilitee des 3 autres chiffres, donc je n’y touche pas

0 -> Aucun log

7 -> Valeur par deut

8 -> Tous les logs (Debug)

echo “0 4 1 7” > /proc/sys/kernel/printk

On active la translation d’adresse

echo 1 > /proc/sys/net/ipv4/ip_forward

################################# REGLES FORWARDING PASSERELLE ###################

MSN DEPUIS LAN VERS WAN

iptables -t filter -A FORWARD -i eth1 -o eth2 -p TCP --dport 1863 -j ACCEPT

HTTP ET HTTPS DEPUIS LAN VERS WAN

iptables -t filter -A FORWARD -i eth1 -o eth2 -p TCP --dport 80 -j ACCEPT
iptables -t filter -A FORWARD -i eth1 -o eth2 -p TCP --dport 443 -j ACCEPT

DNS DEPUIS LAN VERS WAN

iptables -t filter -A FORWARD -i eth1 -o eth2 -p TCP --dport 53 -j ACCEPT
iptables -t filter -A FORWARD -i eth1 -o eth2 -p UDP --dport 53 -j ACCEPT

WOW DEPUIS LAN VERS WAN

iptables -t filter -A FORWARD -i eth1 -o eth2 -p TCP --dport 3724 -j ACCEPT
iptables -t filter -A FORWARD -i eth1 -o eth2 -p TCP --dport 6881:6999 -j ACCEPT

NEWS DEPUIS VERS WAN

iptables -t filter -A FORWARD -i eth1 -o eth2 -p TCP --dport 119 -j ACCEPT

ACCEPT les connexions deja etabliss ou en relation avec

des connexions etablies sont acceptes venant du WAN vers le LAN

iptables -A FORWARD -i eth2 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

################################# REGLES NAT-ROUTAGE ######################

Translation d’adresses pour tout ce qui traverse la passerelle en sortant par eth2

#Ce qui permet de cacher les adresse du LAN et de ne voire que l’IP du Serveur
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE

ROUTAGES DES REQUETES SUR LES PORT TCP 75XX et UDP 75XX vers 192.168.XX.XX

iptables -t nat -A PREROUTING -p tcp --dport 75XX -i eth2 -j DNAT --to-destination 192.168.XX.XX:75XX
iptables -t nat -A PREROUTING -p udp --dport 75XX -i eth2 -j DNAT --to-destination 192.168.XX.XX:75XX

echo - AAAAAAAAAA FIN INITIALISATION FIREWALL AAAAAAAAA
;;
esac
[/code]

Je me pose aussi une autre question : Lorsque je configure mes postes clients, je leur donne ue IP Static comme je n’ai pas installé de Serveur DHCP sur ma Debian, mais pour les DNS je met ceux de mon FAI, que dois-je installer sur mon Serveur Debian pour pouvoir simplement mettre ma passerelle comme Serveur DNS ? BIND9 ?

Merci encore pour votre aide :slightly_smiling:

Globalement, c’est pas mal. Il aurait été possible d’utiliser des chaînes utilisateur pour factoriser les critères communs à plusieurs règles, mais ce sera pour une prochaine fois.
Quelques observations néanmoins.

# REQUETES RESEAU DU LAN VERS PASSERELLE iptables -t filter -A INPUT -i eth1 -p TCP --dport 135 -j ACCEPT iptables -t filter -A INPUT -i eth1 -p UDP --dport 137 -j ACCEPT iptables -t filter -A INPUT -i eth1 -p UDP --dport 138 -j ACCEPT iptables -t filter -A INPUT -i eth1 -p TCP --dport 445 -j ACCEPT
Il me semble que NetBIOS/SMB utilise aussi le port TCP 139.

# DHCP FIN DE BAIL RENOUVELLEMENT IP CARTE ETH2 AVEC ROUTEUR iptables -t filter -A OUTPUT -o eth2 -p UDP --dport 67 -j ACCEPT iptables -t filter -A INPUT -i eth2 -p UDP --dport 67 -j ACCEPT
Dans les paquets DHCP émis par le serveur le port 67 est le port source, le port destination étant 68.

# On active la translation d'adresse echo 1 > /proc/sys/net/ipv4/ip_forward
Ce paramètre n’a rien à voir avec la translation d’adresse. Il commande le “forwarding”, c’est-à-dire la fonction routeur qui fait que des paquets peuvent être retransmis d’une interface à l’autre à travers la chaîne FORWARD.

[code]# ACCEPT les connexions deja etabliss ou en relation avec

des connexions etablies sont acceptes venant du WAN vers le LAN

iptables -A FORWARD -i eth2 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT[/code]
En toute rigueur, il faudrait une règle similaire dans l’autre sens, comme dans INPUT et OUTPUT.

# ROUTAGES DES REQUETES SUR LES PORT TCP 75XX et UDP 75XX vers 192.168.XX.XX iptables -t nat -A PREROUTING -p tcp --dport 75XX -i eth2 -j DNAT --to-destination 192.168.XX.XX:75XX iptables -t nat -A PREROUTING -p udp --dport 75XX -i eth2 -j DNAT --to-destination 192.168.XX.XX:75XX
Ce n’est pas du routage mais de la redirection de port avec translation d’adresse.
D’autre part, il faut aussi des règles dans FORWARD pour autoriser les connexions ainsi redirigées, par exemple :

Pour le serveur DNS, tu peux te contenter de dnsmasq qui relaie les requêtes vers les serveurs déclarés dans /etc/resolv.conf. En plus il peut faire serveur DHCP. Si tu veux un cache DNS indépendant de ceux du FAI, BIND9 est un bon choix et sa configuration par défaut fait exactement ça.

Je te remerci pour toues ces précisions, en ce qui concerne les régles pour je récupére mon adresse IP via le DHCP de mon FAI j’ai modifier comme cela :

iptables -t filter -A OUTPUT -o eth2 -p UDP --dport 68 -j ACCEPT iptables -t filter -A INPUT -i eth2 -p UDP --dport 67 -j ACCEPT

D’aprés ce que j’ai compris, le client envoie une demande aux DHCP sur le réseau via le port UDP 68, puis le Serveur DHCP lui répond via le port UDP 67.

Maintenant je vais essayer d’installer dnsmasq sur mon Serveur pour l’utiliser comme serveur DNS sur mon réseau local et comme cache DNS (apparemment il le fait) car ça configuration me semble nettement plus simple que BIND9.

Pour DHCP, c’est l’inverse. Le client envoie des paquets avec le port source 68 et le port destination 67, alors que le serveur envoie des paquets avec le port source 67 et le port destination 68. Il faut permuter les chaînes ou les ports dans tes règles. Ceci dit, j’ai cru comprendre que certains logiciels DHCP pouvaient envoyer et recevoir les paquets directement sur l’interface un peu comme les logiciels de capture de paquets, court-circuitant iptables. Donc il se peut que DHCP fonctionne même avec de mauvaises règles.

Pour BIND, certes il peut apparaître complexe mais sauf erreur la configuration par défaut fait ce dont tu as besoin et seulement cela, c’est-à-dire un cache récursif indépendant des serveurs DNS du FAI. A bien regarder le fichier de configuration de dnsmasq a un paquet d’options aussi, mais sauf erreur là encore la configuration par défaut suffit pour en faire un relais DNS qui dépend des serveurs DNS du FAI.

Je viens de faire l’inversion des port pour le DHCP :slightly_smiling:

Et je viens aussi de mettre en place mon Serveur - Cache DNS avec dnsmasq , ça fonctionne niquel apparemment !!

Voici le fichier de configuration de celui-ci :

[code]# Ne transmet pas les requetes ne contenant pas un nom de domaine complet
domain-needed

Ajoute automatiquement le domain definit dans la configuration aux noms de machines presents dans /etc/hosts

expand-hosts

Ne pas transmettre les adresses du reseau prive

bogus-priv

DnsMasq en ecoute uniquement sur l’interface locale eth1 (LAN)

interface=eth1

Taille du cache DNS

cache-size=256

ajouter les commentaires dans le journal (/var/log/daemon.log)

log-queries

[/code]

Je me pause la question sur la taille du cache !!! Et comment voire le contenu de celui-ci !!!

Désolé, je ne me suis jamais préoccupé de la taille du cache ni de son contenu quand j’utilisais dnsmasq, ni avec BIND que j’utilise maintenant d’ailleurs. Je laisse les valeurs par défaut.

Ok ça marche ^^ merci pour ton aide, la je suis partis pour tanté de mettre en place un petit Serveur SQUID sur la Debian et voir ce que ça donne :slightly_smiling:

C’est bon j’ai réussi a mettre en place mon Serveur Squid sur ma Debian, je peus voire les stats via Webmin et SARG (module + Paquet) :slightly_smiling: Je commence a avoir une belle passerelle :slightly_smiling: