VPN

jeudi 28 octobre 2010Par : CyrIng

[A] VPN crypté

.

1- installer les paquets : démon PPP, pilote PPTP, IP Routing et Netfilter


# sudo pacman -S ppp pptpclient iproute2 iptables

2- autoriser l’accès au VPN


# sudo nano /etc/ppp/chap-secrets

# client        server    secret         IP addresses
[LoginName]     PPTP      [Password]     *

3- configurer la liaison point à point


# sudo nano /etc/ppp/peers/VyprVPN

pty "pptp eu1.vpn.giganews.com --nolaunchpppd"
name [LoginName]
remotename PPTP
ipparam eu1.vpn.giganews.com # à fournir en sixème paramètre des scripts ip-up et ip-down
file /etc/ppp/options.pptp
mru 1450
mtu 1450
require-mppe-128
lcp-echo-failure 2     ## voir man pppd
#lcp-echo-interval 60  ## voir man pppd
persist
unit 0                 ## utiliser ppp0 comme nom d'interface
#usepeerdns            ## ne pas modifier /etc/resolv.conf avec les DNS de VyprVPN
nodefaultroute         ## ne pas changer la route par défaut dans la table main

4- définir une route au travers du VPN


# sudo nano /etc/iproute2/rt_tables

#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep
180     vpn

5- rediriger l’ensemble des flux via cette nouvelle route, à l’exception de certains


# sudo nano /etc/ppp/ip-up.d/10-route2vpn.sh

#!/bin/sh
#
# 2010 Cyring
#

if [ "$IFNAME" = "ppp0" ]; then
        VPNIP=`/usr/bin/gethostip -d ${6}`
        VPNRT=`/usr/sbin/ip route show table main | /bin/grep ${VPNIP}`

        /usr/sbin/ip route add ${VPNRT} table vpn
        /usr/sbin/ip rule add fwmark 0x80 table vpn
        /usr/sbin/ip route add to default dev ${IFNAME} table vpn
fi

# EOF

# sudo nano /etc/ppp/ip-up.d/20-filter2vpn.sh

#!/bin/sh
#
# 2010 Cyring
#

. /etc/ppp/vpn-common.sh

if [ "$IFNAME" = "ppp0" ]; then
        /usr/sbin/iptables -t mangle -A OUTPUT
        -p tcp -m multiport ! --dports $TCPLIST
        -j MARK --set-mark 0x80

        /usr/sbin/iptables -t mangle -A OUTPUT
        -p udp -m multiport ! --dports $UDPLIST
        -j MARK --set-mark 0x80

        /usr/sbin/iptables -t nat -A POSTROUTING
        -p tcp -o ${IFNAME}
        -j SNAT --to-source ${IPLOCAL}

        /usr/sbin/iptables -t nat -A POSTROUTING
        -p udp -o ${IFNAME}
        -j SNAT --to-source ${IPLOCAL}
fi

# EOF

# sudo nano /etc/ppp/ip-down.d/10-filter2vpn.sh

#!/bin/sh
#
# 2010 Cyring
#

. /etc/ppp/vpn-common.sh

if [ "$IFNAME" = "ppp0" ]; then
        /usr/sbin/iptables -t nat -D POSTROUTING
        -p tcp -o ${IFNAME}
        -j SNAT --to-source ${IPLOCAL}

        /usr/sbin/iptables -t nat -D POSTROUTING
        -p udp -o ${IFNAME}
        -j SNAT --to-source ${IPLOCAL}

        /usr/sbin/iptables -t mangle -D OUTPUT
        -p tcp -m multiport ! --dports $TCPLIST
        -j MARK --set-mark 0x80

        /usr/sbin/iptables -t mangle -D OUTPUT
        -p udp -m multiport ! --dports $UDPLIST
        -j MARK --set-mark 0x80
fi

# EOF

# sudo nano /etc/ppp/ip-down.d/20-route2vpn.sh

#!/bin/sh
#
# 2010 Cyring
#

if [ "$IFNAME" = "ppp0" ]; then
        VPNIP=`/usr/bin/gethostip -d ${6}`
        VPNRT=`/usr/sbin/ip route show table main | /bin/grep ${VPNIP}`

        /usr/sbin/ip route del ${VPNRT} table vpn
        /usr/sbin/ip route del to default dev ${IFNAME} table vpn
        /usr/sbin/ip rule del fwmark 0x80 table vpn
fi

# EOF

# sudo nano /etc/ppp/vpn-common.sh

#!/bin/sh
#
# 2010 Cyring
#

FTP_DATA=20
FTP=21
SSH=22
SMTP=25
DNS=53
POP2=109
POP3=110
NNTP=119
NTP=123
IMAP=143
IMAP3=220
SMTPS=465
NNTPS=563
GANDI=587
IPP=631
IMAPS=993
POP3S=995
PPTP=1723

TCPLIST=
$FTP_DATA","
$FTP","
$SSH","
$SMTP","
$POP2","
$POP3","
$NNTP","
$IMAP","
$IMAP3","
$SMTPS","
$NNTPS","
$GANDI","
$IPP","
$IMAPS","
$POP3S

UDPLIST=
$SSH","
$NTP","
$IMAP","
$IMAP3","
$NNTPS","
$IPP

# EOF

# sudo chmod +x /etc/ppp/ip-up.d/10-route2vpn.sh
# sudo chmod +x /etc/ppp/ip-up.d/20-filter2vpn.sh
# sudo chmod +x /etc/ppp/ip-down.d/10-filter2vpn.sh
# sudo chmod +x /etc/ppp/ip-down.d/20-route2vpn.sh
# sudo chmod +x /etc/ppp/vpn-common.sh

6- automatiser le démarrage et l’arrêt du VPN


# sudo ln -s /etc/ppp/peers/VyprVPN /etc/ppp/peers/provider

# sudo nano /etc/rc.conf

DAEMONS=( @iptables @ppp )

.

[B] Tunnel SSL

.

1- installer le paquetage du démon Stunnel


# sudo pacman -S stunnel pan

2- définir un tunnel Newsgroup chiffré sur un proxy local


# sudo nano /etc/stunnel/stunnel.conf

[nntp]
accept = 127.0.0.1:119
connect = news-europe.giganews.com:563

3- automatiser le démarrage et l’arrêt du démon


# sudo nano /etc/rc.conf

DAEMONS=( @stunnel )

4- ajouter un serveur local au sein du lecteur Usenet


# nano ~/.pan2/servers.xml

.

<?xml version="1.0" encoding="utf-8" ?>
<server-properties>
  <server id="1">
    <host>127.0.0.1</host>
    <port>119</port>
    <username>[LoginName]</username>
    <password>[Password]</password>
    <expire-articles-n-days-old>93</expire-articles-n-days-old>
    <connection-limit>49</connection-limit>
    <newsrc>/home/[UserName]/.pan2/newsrc-1</newsrc>
    <rank>1</rank>
  </server>
</server-properties>

.

[C] Cache DNS

.

1- installer le paquetage de Bind


# sudo pacman -S bind

2- paramétrer le démon named avec des IP de DNS


# sudo nano /etc/named.conf

options {
        directory "/var/named";
        pid-file "/var/run/named/named.pid";
        dump-file "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named.stats";
        allow-query { localhost; };
        allow-query-cache { localhost; };
        listen-on port 53 { 127.0.0.1; };
        listen-on-v6 port 53 { ::1; };
        forward only;
        forwarders {
                        8.8.8.8;        // Google DNS
                        8.8.4.4;        // Google DNS
                        208.67.222.222; // OpenDNS
                        208.67.220.220; // OpenDNS
        };
};

logging {
        channel "syslog" {
                syslog daemon;
                severity info;
        };

        category default { syslog; };
};

3- définir un serveur DNS local


# sudo nano /etc/resolv.conf

nameserver 127.0.0.1

4- automatiser le démarrage et l’arrêt du démon


# sudo nano /etc/rc.conf

DAEMONS=( @named )