Bonjour
Pour montrer le problème de protocole SIP avec les routeurs nats et firewalls, j’ai implementer l’architecture réseau suivante :
- Une machine A dans un LAN privé (192.168.1.0/24), avec une adresse statique 192.168.1.10. sous debian etch 4.
- Un serveur brekeke pour SIP dans le même LAN avec une adresse statique 192.168.1.4, sous Win 7.
- Une machine NF avec 2 interface représentant le NAT et Firewall en utilisant Netfilter 1.3 sous Debian 4. l’interface interne eth1 ayant l’@ 192.168.1.1, l’externe eth0 : 193.168.1.1.
- Une machine B coté public avec une adresse statique 193.168.1.11.
voir le schéma suivant (le serveur ne se figure pas) :
(A)192.168.1.10------------------------------192.168.1.1 (NF) 193.168.1.1 --------------------------193.168.1.11( B )
J’ai spécifié les règles suivantes d’iptables (Netfilter) pour la machine NF (nat firewall) :
[code]----------------------------------------------------------------------------------------------
#!/bin/bash
Ce script met en place la politique de filtrage
----------------------------------------------------------------------
On charge les modules nécessaires
modprobe ip_tables
modprobe iptable-filter
modprobe iptable-nat
Initialisation des règles
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
Politique du pare-feu
--------------------
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
Mise en oeuvre du routage
echo 1 > /proc/sys/net/ipv4/ip_forward
Autorise les paquets du protocole ICMP
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A FORWARD -p icmp -j ACCEPT
Regles du parefeu
-----------------
Autorise toute connexion deja etablie et relative
iptables -A FORWARD -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
Ouverture du port 5060 pour sip
iptables -A FORWARD -p udp --dport 5060 -j ACCEPT
Regles de NAT
----------------------------------------------------
Regles de NAT sortant (partage de la connexion Internet)
Tout ce qui sort, prend l’adresse de eth0 au passage
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -p udp --dport 5060 -j SNAT --to-source 193.168.1.1:10080
-----------------------------------------------------------------------------------------[/code]
Le problème c’est avec ces 2 règles spécifiées dans ce script pour le nat :
et
Le masquerading (masquage) ne fonctionne pas avec SIP, ni l’adresse source ni le port change dans les paquet SIP, ils sortent toujours avec leur addresse/port privé (192.168.1.4/5060), et l’appel se fait avec succès, pourquoi donc le netfilter ne les change pas en sortie de l’interface eth0 de la machine NF.
Voici la figure attachée qui explique ce qui se passe normalement pour les paquets SIP :
1 invite : changement d’adresse/port source par le NAT de 192.168.0.111/5060 à 140.113.131.80/10080 (qui est non fonctionnel pour moi, c’est ça mon problème).
2 ok : blocage de ce paquet du au port 5060 qui n’est pas connu par le NAT et firewall
les paquets RTP : adresse/port (192.168.0.111/9000) adresse non routable et port inconnu.
Noter que la traversée du NAT, upnp, et nat-pmp sont désactivés au niveau de serveur Brekeke. le port utilisé par les clients et le serveur est 5060.
Netfilter version 1.3, x-lite 2, Debian 4 pour les machines A, B et NF, Win 7 Pour le serveur Brekeke.
Y a-t-il des suggestions, S.V.P ? Merci pour votre lecture, efforts, et aide.