#1 Le 28/02/2013, à 23:49
- jotenakis
probleme parefeu et routage https vers eth0, le reste étant vers tun0
Bonjour
je fais suite aux questions posées ici http://forum.ubuntu-fr.org/viewtopic.php?id=1119581&p=2
je n'ai pas de pb de VPN.
en revanche mon parefeu ne fonctionne pas exactement comme je voudrais.
je me connecte à un VPN en openvpn (pas de pb).
je souhaite que tout le flux passe par le VPN (interface tun0), sauf le flux https que je souhaite faire passer par la ligne non protégée eth0.
mon firewall est ainsi :
#!/bin/sh
#
# Script de démarrage qui lance l'interface réseau internet
interfaceWWW="eth0"
interfaceVPN="tun0"
localIP="192.168.0.5"
network="192.168.0.0/24"
# Rappel IPTables .
#
# /----------\ /-------\ /-----------\
# IN--->---< PREROUTING >--->---< FORWARD >--->---< POSTROUTING >--->--OUT
# \----------/ \-------/ \-----------/
# \ /
# \ /
# /-----\ /-------------\ /------\
# < INPUT >--->---< LOCAL PROCESS >--->---< OUTPUT >
# \-----/ \-------------/ \------/
start() {
# Dans cette partie, on met en place le firewall
#vidage des chaines
iptables -F
iptables -X
#destruction des chaines personnelles
#stratégies par défaut
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# tout ouvert sur loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
## On drop les scans XMAS et NULL.
iptables -A INPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
## Dropper silencieusement tous les paquets broadcastés.
iptables -A INPUT -m pkttype --pkt-type broadcast -j DROP
#on accepte tout le reseau local :)
iptables -A INPUT -s $network -j ACCEPT
iptables -A OUTPUT -d $network -j ACCEPT
iptables -A FORWARD -s $network -j ACCEPT
#on autorise toutes les connexions déja etablies
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#on autorise les connexions sortantes vers les ports UDP sur interfaceWWW pour initialiser les connexions VPN openvpn (voir /etc/openvpn/openvpn.conf)
iptables -A OUTPUT -p UDP -m multiport --dports 7001,7002,7003,7004 -m state --state NEW -o $interfaceWWW -j ACCEPT
#on accepte ping sortants
iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#on autorise les connexions sortantes sur le VPN
iptables -A OUTPUT -m state --state NEW -o $interfaceVPN -j ACCEPT
#on ouvre le port 1250 sur la connexion VPN pour accepter torrent que j'ai mis sur 1250 (transmission)
iptables -A INPUT -p TCP --dport 1250 -m state --state NEW -i $interfaceVPN -j ACCEPT
#on autorise les connexions sortantes vers le https sur interface WWW
iptables -A OUTPUT -p TCP --dport 443 -m state --state NEW -o $interfaceWWW -j ACCEPT
#on autorise les connexions sortantes vers le DNS sur interface WWW
iptables -A OUTPUT -p UDP --dport 53 -m state --state NEW -o $interfaceWWW -j ACCEPT
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/$interfaceWWW/rp_filter
ip rule add fwmark 0x1 table connection
#on fait passer les connections HTTPs sur la connection internet standard
iptables -t mangle -A OUTPUT -p TCP --dport 443 -j MARK --set-mark 0x1
iptables -t nat -A POSTROUTING -o $interfaceWWW -p TCP --dport 443 -j SNAT --to $localIP
}
stop() {
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop && start
;;
*)
echo "Usage $0 {start|stop|restart}"
exit 1
esac
exit 0
de plus j'ai crée
cat /etc/network/if-up.d/parefeu
#!/bin/sh
#
set -e
if [ "$IFACE" = eth0 ]; then
/sbin/ip route add 192.168.0.0/24 dev eth0 src 192.168.0.5 table connection
/sbin/ip route add default via 192.168.0.254 table connection
/sbin/ip rule add from 192.168.0.5 table connection
fi
et
cat /etc/network/if-down.d/parefeu
#!/bin/sh
#
set -e
if [ "$IFACE" = eth0 ]; then
/sbin/ip route del 192.168.0.0/24 dev eth0 src 192.168.0.5 table connection
/sbin/ip route del default via 192.168.0.254 table connection
/sbin/ip rule del from 192.168.0.5 table connection
fi
et enfin
cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
1 connection
le bilan :
tout marche sauf le routage du flux https vers eth0.
je m'en rend compte soit en sniffant les trames (avec wireshark, je vois bien que la "poignée de main" lorsque je vais sur un https se passe sur l'interface tun0) soit en regardant mon ip renvoyé par le site https://ipdb.at/
qu'est ce qui ne marche pas ????
Hors ligne
#2 Le 01/03/2013, à 00:55
- jotenakis
Re : probleme parefeu et routage https vers eth0, le reste étant vers tun0
vous allez rire..........
je crois que ça marche now.
j'avais oublié de rendre executable les fichiers /etc/network/if-down.d/parefeu et /etc/network/if-up.d/parefeu
Hors ligne
#3 Le 01/03/2013, à 01:03
- jotenakis
Re : probleme parefeu et routage https vers eth0, le reste étant vers tun0
bon c'est plus compliqué que cela...
en effet au démarrage ça marche. mon vpn se lance. le flux https est bien vers eth0.
en revanche, si je coupe le vpn et le relance => le flux https est maintenant vers tun0 !!!
HELP ?
Hors ligne
#4 Le 01/03/2013, à 01:21
- jotenakis
Re : probleme parefeu et routage https vers eth0, le reste étant vers tun0
au démarrage la table de routage "connection" est
default via 192.168.0.254 dev wlan0
192.168.0.0/24 dev wlan0 scope link src 192.168.0.5
et tout marche.
en revanche dès que je coupe le vpn (avec le networkmanager), la table devient vide et ne se recrée par au redémarrage du vpn
Hors ligne
#5 Le 01/03/2013, à 01:56
- jotenakis
Re : probleme parefeu et routage https vers eth0, le reste étant vers tun0
je converge
dans /etc/network/if-up.d/parefeu et /etc/network/if-down.d/parefeu
il faut remplacer if [ "$IFACE" = eth0 ]; then par if [ "$IFACE" = tun0 ]; then
et ca roule a priori.
Hors ligne
#6 Le 03/03/2013, à 13:38
- kralisec
Re : probleme parefeu et routage https vers eth0, le reste étant vers tun0
Bonjour,
Je suis un peu curieux: comment se fait la différence entre le traffic https et le reste ?
De mémoire il doit y avoir une ligne genre:
iptables -t mangle -A PREROUTING -p tcp --dport 443 -j MARK --set-mark 2
avec une ligne 2 https dans rt_tables ?
en espérant faire avancer le le shmilblick ;-)
(source: http://www.linuxtopia.org/Linux_Firewal … x4368.html je vois que c'est pour le kernel 2.3 à 2.6
je vais peut-être remettre mes infos à jour ... ^^)
a+,
Laurent.
Lorsqu'on s'occupe d'informatique il faut faire comme les canards...
Paraître calme en surface et pédaler comme un forcené par en-dessous
Hors ligne
#7 Le 06/03/2013, à 15:33
- jotenakis
Re : probleme parefeu et routage https vers eth0, le reste étant vers tun0
dans mon exemple http/https sont traités de la même façon (set mark 1). tout le reste passe ailleurs.
Hors ligne
#8 Le 16/03/2013, à 13:11
- kralisec
Re : probleme parefeu et routage https vers eth0, le reste étant vers tun0
Oki, j'avais complètement raté l’ascenseur sur le 1er poste
a+,
Laurent.
Lorsqu'on s'occupe d'informatique il faut faire comme les canards...
Paraître calme en surface et pédaler comme un forcené par en-dessous
Hors ligne