====== FAI VPN ====== *https://vpntunnel.se/ *https://www.anonine.com/ *http://www.hidemynet.com/ *http://www.itshidden.com *http://www.korben.info/configurer-le-vpn-ipredator-sur-linux-ubuntu.html | Fournisseur | VPN | M-A-J | Ports | Qualité | Commentaire | | ItsHidden.com | pptp | 08/2010 | tous ouverts | OK | correct. (+30 ms sur les pings) | | ipredator.se | pptp | 12/2009 | tous ouverts | Bof | trop lent ! (+120 ms sur les pings!) | | blackvpn.com | pptp/OpenVPN | 08/2010 | fermés! | OK | les ports P2P fermés = LowID (pas de redirection) je n'ai pas insisté | | vpntunnel.se | OpenVPN | 08/2010 | tous ouverts | OK | ping un peu lent (+120 ms). A l'usage: c'est bien. | ===== Client OpenVPN ===== OpenVPN est mieux, dans le sens où : *la MTU est standard: 1500 (pas de règle iptables avec MSS...) *le protocole est mieux fait (alors que "pptp" est un truc batard) *le service/daemon peut être configuré pour maintenir la connexion 24h/24 *plus simple a configurer, sous Linux. ==== Généralité ==== # aptitude update # aptitude install openvpn On peut s'inspirer de la conf dans le fichier "client.conf" : # dpkg -S openvpn | grep client.conf openvpn: /usr/share/doc/openvpn/examples/sample-config-files/client.conf On prépare des répertoires. Pour les clés: # cd /etc/openvpn # mkdir keys # chmod og-rx keys Pour les confs: # mkdir conf On mettra les conf dans **''/etc/openvpn/conf''** . Et lorsqu'on voudra les activer (a chaque redemarrage) il faudra creer des liens vers ces confs dans **''/etc/openvpn''** . Exemple: # cd /etc/openvpn # ln -s /etc/openvpn/conf/client-vpntunnel-se.conf . (Il faut que le fichier de conf soit terminé par ".conf") Et pour finir: # /etc/init.d/openvpn restart et un coup d'oeil dans les logs. ==== vpntunnel.se ==== Pour 5 euros pas mois... On créé d'abord un compte... (on obtient les codes d'accès en passant). On se prepare a recevoir des fichiers sensibles, et donc: # cd /etc/openvpn/keys # mkdir vpntunnel.se On se connecte sur son compte, et on recupère le fichier "ca.crt" Qu'on place dans **''/etc/openvpn/keys/vpntunnel.se''** Dans le même répertoire, on créé aussi un fichier texte contenant son "username" et "password" comme cela (2 lignes): username password On nomme ce fichier **''user-pass.txt''** A partir de l'aide (du fournisseur de VPN), on compose une configuration comme cela: client float dev tap proto udp remote-random remote melissa.vpntunnel.se 1194 remote melissa.vpntunnel.se 10010 remote melissa.vpntunnel.se 10020 resolv-retry infinite nobind persist-key persist-tun ca keys/vpntunnel.se/ca.crt ns-cert-type server cipher BF-CBC #Blowfish comp-lzo verb 3 auth-user-pass keys/vpntunnel.se/user-pass.txt le "remote-random" c'est parce qu'il y a plusieurs serveurs VPN en "remote" Et voila. Un petit bémol: il detourne ma gateway par defaut. Je préfère faire cela moi-même. Astuce pour creer des routes: Ajouter dans la conf: # TJ # ------------------------ # Execution de script script-security 2 up /etc/openvpn/scripts/up-vpn-itshidden-route down /etc/openvpn/scripts/down-vpn-itshidden-route # ------------------------ Monter les routes a partir des scripts sus-nommé... Par exemple: #!/bin/sh ip rule add fwmark 0x000f0001 table 200 ip route add default dev $1 table 200 ip route flush cache Où "$1" est le nom du tunnel ("tap0") ... ( **''man ip''** pour le reste) ====== Client PPTP ====== Connexion à un serveur VPN via PPTP, par exemple avec http://www.itshidden.com ===== Preambule ===== Il faut d'abord créer un compte sur "itshidden" ... ou bien connaitre un autre serveur VPN/PPTP. ===== Préparer client ===== # aptitude install pptp-linux ''# modprobe ppp-compress-1'' Au préalable, il peut etre necessaire d'installer "binutils" ainsi: # aptitude update && aptitude install binutils (parce ce que sinon, "pptpsetup" fait un test qui ne marche pas ) Creer un fichier "peer" comme ca: # pptpsetup --create itshidden --server vpn.itshidden.com --username --password --encrypt Adapter selon vos besoins:\\ **''itshidden''** est le nom du serveur/fichier peer.\\ **''--encrypt''** parce que ce serveur exige un cryptage. Aprés cette commande, un fichier existe: # cat /etc/ppp/peers/itshidden # written by pptpsetup pty "pptp vpn.itshidden.com --nolaunchpppd" lock noauth nobsdcomp nodeflate name remotename itshidden ipparam itshidden require-mppe-128 Et d'autres fichiers aussi (au moins pour le ) ===== En prod ===== ==== peer ==== La conf est plutot: pty "pptp vpn-pay.itshidden.com --nolaunchpppd --localbind " lock noauth nobsdcomp nodeflate name remotename itshidden ipparam itshidden require-mppe-128 ##defaultroute ##replacedefaultroute ##usepeerdns #debug noipv6 persist # et aussi ---- mtu 1492 # mtu 1400 <= it's a myth # ---------- | :!: Voir la section suivante a propos de la MTU | | :!: ItsHidden.com : Sans **"mtu 1492"** (inférieure ou égale) , certains sites sont inaccessible, free.fr par exemple. | | :!: Ipredator.se : Sans **"mtu 1404"** (inférieure ou égale) , certains sites sont inaccessible, free.fr par exemple. | La MTU, plus c'est grand, mieux c'est. \\ Mais quand c'est trop grand ça marche pas, et quand c'est trop petit ça marche plus. Où :\\ * est le login * est l'adresse ip de l'interface de sortie utilisé (ouai, j'ai 17 interfaces réseaux ;) ) | :!: Et le vpn n'est pas la route par defaut. | | :!: Les routages sont effectués avec "iptables" et "ip rule"... | ==== MTU ==== === 99% === La MTU pose plusieurs problème ... On en élimine une bonne partie en appliquant 2 choses simultannements: * une MTU "raisonable" ... genre: 1492 (pour ItsHidden.com) ou 1404 (pour Ipredator.se) . * une règle IPTABLES qui va bien. Voici la règle "iptables" nécessaire: # iptables -t mangle -A POSTROUTING -o -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu Où **''''** est l'interface du vpn. Le plus souvent: **''ppp0''** === 1% === Toutefois, il subsiste de mysterieux messages dans les logs: kernel: [xxxx.xxxxx] mppe_compress[0]: osize too small! (have: 1404 need: 1408) D'aprés mes recherches, dans le brouillard des archives : *Soit c'est un problème de MTU, mais je cherche encore quoi ! *Soit c'est un bug inhérent au protocole PPTP (d'aprés ce que j'ai lu, il y aurait un algo qui veut toujours compresser les données, et parfois, il se retrouve avec plus de données qu'au départ.) *Soit c'est simplement un bug. http://bugs.contribs.org/show_bug.cgi?id=5633 ===== Connexion client ===== ==== pon ==== | :!: On peut faire plus propre en s'attardant sur la config de "ppp" | # pon itshidden Ok ? Verifions: # plog -f Jul 27 14:34:10 nin2 pppd[7256]: pppd 2.4.4 started by root, uid 0 Jul 27 14:34:10 nin2 pppd[7256]: Using interface ppp0 Jul 27 14:34:10 nin2 pppd[7256]: Connect: ppp0 <--> /dev/pts/3 Jul 27 14:34:14 nin2 pppd[7256]: Warning - secret file /etc/ppp/chap-secrets has world and/or group access Jul 27 14:34:14 nin2 pppd[7256]: Warning - secret file /etc/ppp/chap-secrets has world and/or group access Jul 27 14:34:14 nin2 pppd[7256]: CHAP authentication succeeded Jul 27 14:34:14 nin2 pppd[7256]: MPPE 128-bit stateless compression enabled Jul 27 14:34:14 nin2 pppd[7256]: Cannot determine ethernet address for proxy ARP Jul 27 14:34:14 nin2 pppd[7256]: local IP address 192.168.2.14 Jul 27 14:34:14 nin2 pppd[7256]: remote IP address 192.168.2.1 Et: # ifconfig ppp0 ppp0 Link encap:Protocole Point-à-Point inet adr:192.168.2.14 P-t-P:192.168.2.1 Masque:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1496 Metric:1 RX packets:113 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:3 RX bytes:31795 (31.0 KiB) TX bytes:66 (66.0 B) ==== route ==== Indispensable si l'on fait ça comme un goret: Effacer la route par defaut actuelle: # route del default Mettre la nouvelle: # route add default gw 192.168.2.1 Adapter la "gateway" selon "ifconfig" et "plog". Mais comme les DNS ne peuvent plus me repondre... # route add gw # route add gw Et voila. ===== Deconnexion client ===== ==== deroute ==== Si on est un goret, on fait: # route del gw # route del gw # route del default # route add default gw ==== poff ==== # poff itshidden Et voila. $ plog -f Jul 27 14:47:21 nin2 pppd[7256]: Terminating on signal 15 Jul 27 14:47:21 nin2 pppd[7256]: Modem hangup Jul 27 14:47:21 nin2 pppd[7256]: Connect time 13.2 minutes. Jul 27 14:47:21 nin2 pppd[7256]: Sent 58038 bytes, received 433407 bytes. Jul 27 14:47:21 nin2 pppd[7256]: MPPE disabled Jul 27 14:47:21 nin2 pppd[7256]: Connection terminated. Jul 27 14:47:21 nin2 pppd[7256]: Exit. Mais y a des relicats... # route del 94.75.220.x # route del 94.75.220.y bizarre... ===== Tips ===== ==== default "pon" ==== Par defaut, si on tape "pon" sans precision, c'est le "peer" nommé "provider" qui est connecté. Donc: # cd /etc/ppp/peers # mv provider old-provider # ln -s /etc/ppp/peers/itshidden ./provider ==== crontab et reboot ==== Pour que la connexion "pon" soit automatique au reboot, faire un truc comme ca: # crontab -e Et puis avoir une ligne comme ça: @reboot su -c "/usr/bin/pon" Sans le "su" , ca ne fonctionne pas du tout (pppd retourne des erreurs). Je n'ai pas d'explication. Idem pour d'autres scriptes qui pourraient s'executer à partir de "crontab" et nécessiter "pon/poff/pppd" .... ==== interfaces ==== Possible de mettre en oeuvre "ppp/pptp" via le classique fichier **''/etc/network/interfaces''** ! D'abord, ajouter "updetach" dans le fichier "peers" et puis editer le fichier "interfaces" afin d'avoir, par exemple: auto vpn iface vpn inet ppp provider itshidden Et enfin: # ifup vpn et plus tard: # ifdown vpn Mais l'interface "vpn" n'existe nulle part dans "ifconfig" ou "ip link/addr" ... c'est le traditionnel **''ppp0''** qui reste la véritable interface. Bien étrange, et peut être pas si interessant que cela... ====== Serveur ====== Liens: *http://www.antiseches.net/post/Creer-un-reseau-VPN-en-pptp-avec-un-serveur-Linux-Debian-Lenny *http://www.members.optushome.com.au/~wskwok/poptop_ads_howto_1.htm ===== Serveur PPTP et Windows Active Directory ===== Serveur PPTP et active directory. ==== environnement ==== *DomU *amd 64 bit *Debian Lenny En dehors du systeme "Lenny", les packages autour de "pptp", "samba", "winbind", etc... seront piochés dans "lenny-backports" . Le domaine: THIERRY-JAOUEN.FR et c'est là qu'est l'os. le ".FR" créé une confusion entre domaine public et privé. ==== reseau ==== * Ip local: (elle est NATé via un firewall) Pas d'ipv6, donc : # echo "blacklist ipv6" >> /etc/modprobe.d/blacklist Mais , associé au domaine "Windows" qui est "thierry-jaouen.fr" Donc, dans **''/etc/resolv.conf''** : domain thierry-jaouen.fr search thierry-jaouen.fr thierry-jaouen.localhost nameserver 192.168.6.44 nameserver 8.8.8.8 nameserver 8.8.4.4 | :!: le 1er DNS doit être le Windows "Active Directory" | Dans **''/etc/hostname''** : vpn-server.thierry-jaouen.fr Dans **''/etc/hosts''** : 127.0.0.1 localhost 127.0.1.1 vpn-server.thierry-jaouen.fr vpn-server ==== Windows ==== Le "Active Directory" Windows doit avoir son DNS configuré pour faire un "reverse" correct de l'ip du serveur vpn. Windows Server > Demarrer > Outils d'Administration > DNS > Zone Recherche Inverse > 192.168.6.x > Nouveau pointeur PTR > 192.168.6.44 = vpn-server.thierry-jaouen.fr ==== backports ==== Dans **''/etc/apt/sources.list''** : ... ... # backports deb http://backports.debian.org/debian-backports lenny-backports main contrib non-free Dans **''/etc/apt/preferences''** : Package: * Pin: release a=lenny-backports Pin-Priority: 200 ==== ferm ==== Firewall ! Autoriser le forward et interdire la reponse arp pour n'importe quel interface: Donc, dans **''/etc/sysctl.conf''** : ... ... net.ipv4.conf.all.arp_ignore=1 net.ipv4.ip_forward=1 Et puis: # sysctl -p Preparer quelques modules (avant d'installer ferm): Donc, dans **''/etc/modules''** : ip_tables ip_conntrack_ftp ip_nat_ftp ip_conntrack_irc ##ip_nat_pptp ##ip_conntrack_pptp Et faire (le reste pouvant attendre) : # modprobe ip_tables Installer **''ferm''** : # aptitude -t lenny-backports install ferm Mettre les règles, dans **''/etc/ferm/ferm.conf''** : # ------------------------------------ # Regles iptables avec Ferm # ------------------------------------ # LAN thierry jaouen @def $LAN_IF = "eth0"; # VPN @def $VPN_IF = ppp+; # --------------------- chain ( INPUT OUTPUT FORWARD ) policy DROP; # --------------------- # Local # --------------------- chain INPUT if lo ACCEPT; chain OUTPUT of lo ACCEPT; # --------------------- # LAN # --------------------- chain INPUT if $LAN_IF ACCEPT; chain OUTPUT of $LAN_IF ACCEPT; # --------------------- # VPN # --------------------- chain INPUT if $VPN_IF ACCEPT; chain OUTPUT of $VPN_IF ACCEPT; # modifier "mtu" a la volée, sinon, certains sites dont "www.free.fr" sont inaccessible # vpn => lan => internet table mangle chain FORWARD if $VPN_IF of $LAN_IF proto tcp tcp-flags ( SYN RST ) SYN TCPMSS clamp-mss-to-pmtu; chain FORWARD if $VPN_IF of $LAN_IF mod state state ( NEW ESTABLISHED RELATED ) ACCEPT; chain FORWARD if $LAN_IF of $VPN_IF mod state state ( NEW ESTABLISHED RELATED ) ACCEPT; # --------------------- # EOF Mais pourquoi tout cela ? D'abord, pour pouvoir ultérieurement appliqués des restrictions: ce n'est pas le cas ici. Ensuite, pour qu'un site comme "www.free.fr" soit accéssible ! Et oui, avec "free" (et surement quelques centaines de milliers d'autres sites), il y a un problème de MTU. Ce problème disparait avec la règle "MSS" ci-dessus. Appliquer **''ferm''** : # ferm ferm.conf ==== pptpd ==== *SANS* active directory pour commencer. aptitude -t lenny-backports install pptpd Dans **''/etc/pptpd.conf''** : ... ... localip 192.168.23.254 remoteip 192.168.23.64-191 connections 10 listen 192.168.6.43 Dans **''/etc/ppp/pptpd-options''** : name pptpd refuse-pap refuse-chap refuse-mschap require-mschap-v2 require-mppe-128 ms-dns 192.168.6.44 ms-dns 8.8.8.8 noproxyarp defaultroute lock nobsdcomp novj novjccomp nologfd auth nopersist A noter: * "noproxyarp" et "defaultroute" qui sont a l'opposé de la conf par defaut. * "novj", "novjccomp", "nologfd", "auth" et "nopersist" qui sont ajoutés. | :!: En pratique "(no)proxyarp" "(no)defaultroute" ne fait rien que je puisse etudier!!! je sais, c'est bizarre. A vous de voir! | # /etc/init.d/pptpd restart ==== kerberos ==== # aptitude -t lenny-backports install krb5-config krb5-user Serveurs Kerberos pour votre domaine : pdc1.thierry-jaouen.fr pdc2.thierry-jaouen.fr Serveur administratif: pdc1.thierry-jaouen.fr adapter le fichier **''/etc/krb5.conf''** : ... ... [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log ... ... [libdefaults] default_realm = THIERRY-JAOUEN.FR dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h forwardable = yes ... ... [realms] THIERRY-JAOUEN.FR = { kdc = pdc1.thierry-jaouen.fr kdc = pdc2.thierry-jaouen.fr admin_server = pdc1.thierry-jaouen.fr default_domain = thierry-jaouen.fr } ... ... [domain_realm] ... ... .thierry-jaouen.fr = THIERRY-JAOUEN.FR thierry-jaouen.fr = THIERRY-JAOUEN.FR ... ... Et puis: # kinit administrateur@THIERRY-JAOUEN.FR Password for administrateur@THIERRY-JAOUEN.FR: Verifier que ca fonctionne avec: # klist ==== winbind et samba ==== ... nul besoin d'installer samba ! # aptitude -t lenny-backports install winbind Domaine: (on s'en fout) THIERRY-JAOUEN Wins DHCP: NON Modifier **''/etc/samba/smb.conf''** : [global] workgroup = THIERRY-JAOUEN realm = THIERRY-JAOUEN.FR server string = %h server interfaces = 192.168.6.43, lo bind interfaces only = Yes security = ADS password server = 192.168.6.44 log file = /var/log/samba/%m.log max log size = 50 load printers = No printcap name = /dev/null local master = No domain master = No dns proxy = No # TJ ----------- # 2010/11/10 wins support = no #wins server = 192.168.6.44 # -------------- panic action = /usr/share/samba/panic-action %d idmap uid = 30000-40000 idmap gid = 30000-40000 template shell = /bin/bash winbind separator = + winbind enum users = Yes winbind enum groups = Yes printing = bsd print command = lpr -r -P'%p' %s lpq command = lpq -P'%p' lprm command = lprm -P'%p' %j [homes] comment = Home Directories valid users = %S create mask = 0700 directory mask = 0700 browseable = No [printers] comment = All Printers path = /var/spool/samba create mask = 0700 printable = Yes browseable = No [print$] comment = Printer Drivers path = /var/lib/samba/printers Je crois qu'en dehors de la section "global" , le reste ne sert a rien. # net rpc join -S pdc1.thierry-jaouen.fr -U administrateur Enter administrateur's password: Joined domain THIERRY-JAOUEN. # /etc/init.d/winbind restart # wbinfo -t checking the trust secret for domain THIERRY-JAOUEN via RPC calls succeeded Ok. Ainsi que: # wbinfo -u ... retourne la liste des comptes presents. # wbinfo -g ... retourne la liste des groupes... Nous voila pret a associer le serveur "pptpd" et l'"Active Directory" Windows. ==== pptpd et Active Directory ==== Il suffit d'ajouter dans **''/etc/ppp/pptpd-options''** : plugin winbind.so ntlm_auth-helper "/usr/bin/ntlm_auth --helper-protocol=ntlm-server-1" Pour autoriser que des utilisateurs appartenant au groupe "Group-VPN" : ntlm_auth-helper "/usr/bin/ntlm_auth --helper-protocol=ntlm-server-1 --require-membership-of=THIERRY-JAOUEN+Group-VPN" ... et puis: # /etc/init.d/pptpd restart ====== ItsHidden ====== Lien: http://www.itshidden.com ===== limites ===== Starting Nmap 4.62 ( http://nmap.org ) at 2009-12-03 01:02 CET Interesting ports on xxxxxx: Not shown: 1712 filtered ports PORT STATE SERVICE 6881/tcp closed bittorrent-tracker Oups... pas de bittorrent :-\