[Résolu] iptables pour 4 interfaces


#1

Bonjour
J’ai écrit ce script iptables pour un pc avec 4 interfaces. Une vers internet en passerelle et 3 autres déservant 3 lans. Tout fonctionne sauf que le lan ne peu pas accéder à msn messenger malgré une règle iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 1863 -m state --state NEW -j ACCEPT. Comme ca fait 2 semaines que je cherche une solution, j’en ai marre de chercher tout seul. Si quelqu’un à une idée.

#!/bin/bash
###################################################

ARCHITECTURE POUR UN FIREWALL A 4 INTERFACES

lan2=eth2

|

routeur net=eth0 ----- lan3=eth3

|

lan1=eth1

###################################################

#On vide les tables
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X

modprobe ip_tables
modprobe ip_nat_ftp
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc

#Fonction de nat
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

#Ignorer les broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

#Forwarder le réseau
echo 1 > /proc/sys/net/ipv4/ip_forward

#On ferme tout
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#Boucle locale ouverte
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

#On élimine les paquets ayant tous les flags TCP activés ainsi que ceux
#avec aucun flag activé (souvent utilisé par les scans de Nmap)
iptables -A FORWARD -p tcp --tcp-flags ALL ALL -j DROP
iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j DROP

#ICMPs acceptés
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -p icmp --icmp-type source-quench -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

#Augmentation de la qualité du web
iptables -A PREROUTING -t mangle -p tcp --sport www -j TOS --set-tos Minimize-Delay

############################## net ################################################
iptables -A INPUT -i eth0 -m state --state ! INVALID -j ACCEPT
iptables -A OUTPUT -o eth0 -m state --state ! INVALID -j ACCEPT
iptables -A FORWARD -m state --state INVALID -j DROP
#on accepte le net
iptables -A OUTPUT -o eth0 -p tcp --dport http -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport https -m state --state NEW -j ACCEPT
#dns
iptables -A OUTPUT -o eth0 -p udp --dport domain -m state --state NEW -j ACCEPT
#accès au serveur http
iptables -A INPUT -i eth0 -p tcp --dport http -m state --state NEW -j ACCEPT

############################## lan 1 ################################################
#Accès au net pour les connections sures
iptables -A FORWARD -i eth0 -o eth1 -m state --state ! INVALID,NEW -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -m state --state ! INVALID,NEW -j ACCEPT
#Dns
iptables -A FORWARD -i eth1 -o eth0 -p udp --dport domain -m state --state NEW -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport domain -m state --state NEW -j ACCEPT
#Http
iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport http -m state --state NEW -j ACCEPT
#Msn
iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 1863 -m state --state NEW -j ACCEPT
#icmp
iptables -A INPUT -p icmp -j ACCEPT
#ftp
iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 20 -m state --state NEW -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 21 -m state --state NEW -j ACCEPT
############################## lan 2 ################################################
#accès au net pour les connections sures
iptables -A FORWARD -i eth0 -o eth2 -m state --state ! INVALID,NEW -j ACCEPT
iptables -A FORWARD -i eth2 -o eth0 -m state --state ! INVALID,NEW -j ACCEPT
#dns
iptables -A FORWARD -i eth2 -o eth0 -p udp --dport domain -m state --state NEW -j ACCEPT
iptables -A FORWARD -i eth2 -o eth0 -p tcp --dport domain -m state --state NEW -j ACCEPT
#http
iptables -A FORWARD -i eth2 -o eth0 -p tcp --dport http -m state --state NEW -j ACCEPT
#msn
iptables -A FORWARD -i eth2 -o eth0 -p tcp --dport 1863 -m state --state NEW -j ACCEPT
#icmp
iptables -A INPUT -p icmp -j ACCEPT
#ftp
iptables -A FORWARD -i eth2 -o eth0 -p tcp --dport 20 -m state --state NEW -j ACCEPT
iptables -A FORWARD -i eth2 -o eth0 -p tcp --dport 21 -m state --state NEW -j ACCEPT
#aim
iptables -A FORWARD -i eth2 -o eth0 -p tcp --dport 5190 -m state --state NEW -j ACCEPT
#snmp
iptables -A FORWARD -i eth2 -o eth0 -p tcp --dport 161 -m state --state NEW -j ACCEPT
iptables -A FORWARD -i eth2 -o eth0 -p udp --dport 161 -m state --state NEW -j ACCEPT
############################## lan 3 ################################################
#accès au net pour les connections sures
iptables -A FORWARD -i eth0 -o eth3 -m state --state ! INVALID,NEW -j ACCEPT
iptables -A FORWARD -i eth3 -o eth0 -m state --state ! INVALID,NEW -j ACCEPT
#dns
iptables -A FORWARD -i eth3 -o eth0 -p udp --dport domain -m state --state NEW -j ACCEPT
iptables -A FORWARD -i eth3 -o eth0 -p tcp --dport domain -m state --state NEW -j ACCEPT
#http
iptables -A FORWARD -i eth3 -o eth0 -p tcp --dport http -m state --state NEW -j ACCEPT
#msn
iptables -A FORWARD -i eth3 -o eth0 -p tcp --dport 1863 -m state --state NEW -j ACCEPT
#icmp
iptables -A INPUT -p icmp -j ACCEPT
#ftp
iptables -A FORWARD -i eth3 -o eth0 -p tcp --dport 20 -m state --state NEW -j ACCEPT
iptables -A FORWARD -i eth3 -o eth0 -p tcp --dport 21 -m state --state NEW -j ACCEPT[/i]


#2

1/as tu essayé des règles plus larges, du genre:
iptables -A FORWARD -o eth0 -p tcp --dport 1863 -j ACCEPT
avant de te préoccuper de l’état et de l’origine des paquets.
2/il n’y a pas un module noyau spécifique pour faire du masq+msn ?
(je dois dire qu’un find -name “nat” sur mes modules n’a rien donné d’interressant)

sinon, si c’est un MSN 7, il y a peut être nécessité d’ouvrir un autre port en retour (comme le ftp-data).
Essayes de logger les ESTABLISHED,RELATED, pour voir tes retours de connections tcp, peut être.
Je dis ça parceque je suis tombé la dessus en cherchant autour du port 1863 dans google:
infos-du-net.com/forum/10873 … nique-1863


#3

d’ailleurs, tu pourrais rajouter quelques lignes à ton iptables:

# autorisation de toutes les sessions tcp en retour iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
remarques que je n’ai pas mis la règle en OUTPUT parceque je ne vois pas pourquoi je bloquerais ce qui sort. :wink:


#4

sinon, si c’est un MSN 7, il y a peut être nécessité d’ouvrir un autre port en retour (comme le ftp-data).
Cela expliquerait il pourquoi aim passe nikel et pas msn
De plus en surfant je suis tombé sur des sites ou ce problème est exposé, et l’on conseille du multiport
iptables -A FORWARD -i eth1 -o eth0 -p tcp -m multiport --dport 1863,6901,6891,6900 -m state --state NEW -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p udp -m multiport --dport 2001,2120,6801,6901 -m state --state NEW -j ACCEPT
J’ai pas testé je vous tiens au courant


#5

Suite du problème msn
Sur le poste faisant fonction de passerelle, je me connecte sans problème à msn, par contre depuis un des postes des différents lan, impossible. Les paramètres de configuration de msn disent “impossible de joindre la passerelle”.
Mystère car tous les autres ports ouverts “aim” “http” “dns” fonctionnent sans soucis
Pour ce qui est d’un noyau spécifique pour faire du masq+msn, je n’ai rien trouvé.


#6

Ca marche mieux avec le https sur le forward, merci tcpdump


#7

houla ! du https !
une préoccupation de sécurité chez MS ?
Mais c’est contre productif si leurs produits deviennent fiables: comment ils vont vendre la version suivante ?


#8

je suis le premier étonné mais bon, voici la preuve :wink:

20:20:41.863694 IP baym-cs85.msgr.hotmail.com.1863 > x.x.x.x.1375: P 117:283(166) ack 130 win 65406
20:20:41.903254 IP x.x.x.x.1377 > loginnet.passport.com.https: S 3196614072:3196614072(0) win 65535 <mss 1460,nop,nop,sackOK>

Bon allez pour une fois j’en veux pas à Microsoft