Un jour, fatigué d'avoir à ouvrir les ports et plus de ports pour tout ce que je voulais faire avec le serveur Linux, j'ai à la maison, j'ai décidé de faire quelque chose pour être en mesure de se connecter directement à la machine et avoir tous les services qui s'offrent à moi, sans avoir à créer un par un. La solution était claire, mettre en place un VPN sur le serveur et avoir automatiquement accès à tous les services disponibles. Le principal problème lors de l'établissement réseau virtuel était qu'il devait être simple, rapide à créer et, surtout, n'ont pas besoin de logiciel supplémentaire que pourrait bien utiliser depuis n'importe quel ordinateur à n'importe quel endroit. Par ailleurs, si j'ai bien roulé avoir un système parfait pour fournir un support à distance pour mes sœurs via VNC sans avoir à ouvrir ces ports
.
Par défaut, tous les ordinateurs Windows sont livrés en standard avec un client VPN qui peut contectarse réseaux privés virtuels, mais pas de n'importe quel type, seulement PPTP . Nous aurions pu choisir un autre système basé sur IPsec ou OpenVPN , mais aurions besoin de logiciel supplémentaire ainsi cerfied aux deux extrémités du VPN, qui ne répond pas aux exigences que nous avions imposées. PPTP est un protocole mis au point par Microsoft (d'où vient la norme Windows) et, de ce fait, a tardé à être un client (et même un serveur) qui fonctionne sous Linux. Pas les protocoles VPN les plus sûrs
Mais qu'il s'acquitte de ses fonctions.
L'idée est donc de mettre en place un serveur PPTP sous Linux. Une fois que nous voyons comment se connecter serveur Linux et Windows. Bien que l'idée de cet article est un environnement domestique est pleinement applicable aux petites entreprises qui ont besoin d'accéder à distance à leurs employés sans se compliquer la vie et faire de grandes dépenses des routeurs dédiés ou sur un serveur Windows (comprendre cela comme une machine avec un système Windows Serveur
.
PPTP Server sous Linux
Laissez enrevesar un peu plus notre serveur. Pour plus de polyvalence donnera l'authentification de l'utilisateur s'effectue via un serveur Radius peut ensuite être utilisé pour authentifier tout autre service que vous pouvez penser (ftp, e-mail, hotspot sans fil ...).
Je pense qu'il est trop simple, nous compliquons davantage. Le serveur RADIUS authentifier, de même, contre une base de données MySQL , qui ont un très facile à gérer sans avoir à toucher des fichiers texte pour créer de nouveaux utilisateurs. Le scénario est donc Rayon PPTP + + MySQL.
En tant que logiciel que nous utilisons:
- Linux Server, Centos 5.2 dans mon cas.
- PopTop, serveur PPTP sous Linux.
- PPTP client , client PPTP sous Linux.
- FreeRadius comme serveur Radius.
- Radiusclient comme client RADIUS, qui peut interroger le PopTop serveur Radius.
Pour installer le logiciel, dans mon cas, rien de plus simple. Tout d'abord, installez le PopTop de dépôt yum:
- rpm-Uvh http://poptop.sourceforge.net/yum/stable/fc7/pptp-release-current.noarch.rpm
Et vous pouvez installer tous les logiciels:
- freeradius freeradius-mysql radiusclient pptp pptpd yum - enablerepo = poptop-stable installation freeradius-mysql freeradius PPTP pptpd radiusclient
Je pense que ce serait suffisant et aurait tout ce dont vous avez besoin. Nous supposons, bien sûr, vous avez déjà installé MySQL.
Autrefois, il était plus compliqué que d'installer PopTop et a dû patcher le noyau, mais aujourd'hui, si votre cœur est supérieure à 2.6.15 (sinon, qu'attendez-vous pour mise à jour?), N'ont pas besoin de cette étape. Quoi qu'il en soit, si vous aviez à faire, est complètement sûr, je l'ai fait moi-même pendant une longue période. Sur le site de PopTop avoir les instructions pour cela.
En supposant que vous avez installé tous les logiciels correctement sans aucun problème, et nous venons de définir chacun des étapes qui composent notre serveur VPN.
Configuration PopTop
La première chose à faire est de décider ce que vous allez utiliser dans votre adresse VPN. Dans mon cas, j'ai un indépendant de tout le reste (192.168.3.0), afin que je puisse gérer à sa guise, autoriser ou refuser ce que je peux penser d'une façon simple. Les fichiers de configuration suivants indiqué à bricoler et que j'ai la mienne.
/ Etc / pptpd.conf
- # cat /etc/pptpd.conf [Osus @ server ~] # cat / etc / pptpd.conf
- option / etc / ppp / options.pptpd
- 192.168 localip -5 .3 .1
- remoteip 192.168 .3 .6 -10
Le localip de paramètres ont les IP qui utilisent votre serveur local et chaque fois que vous obtenez une connexion tout en remoteip vous indiquer ce qui donnera clients dynamiquement. Vous aurez à mettre un éventail suffisamment large pour couvrir connexions simultanées possibles que vous pourriez avoir.
/ Etc / ppp / options.pptpd
- # cat /etc/ppp/options.pptpd [Osus @ server ~] # cat / etc / ppp / options.pptpd
- Nom pptpd
- refuser-pap
- refuser, chap
- refuser-mschap
- exigence mschap-v2
- -128 Mppe nécessite-
- proxyarp
- verrouiller
- nobsdcomp
- novj
- novjccomp
- nologfd
- radius.so plug-in
Il est recommandé que consultases pages de manuel pour savoir ce que chaque paramètre fait.
Comme vous pouvez le voir à la fin de tout indiquer le serveur PPTP utilisant le pluggin pour Radius, si nous configurons tout le rayon.
Configuration FreeRadius
/ Etc / raddb / clients.conf
- # cat /etc/raddb/clients.conf [Osus @ server ~] # cat / etc / raddb / clients.conf
- client .0 .1 127.0 {
- secret = TUCLAVESECRETA
- shortname = localhost
- }
Nous indiquons, pour chaque serveur radius nous avons, une clé de connexion et le nom. Les principaux clients pourront utiliser pour interroger le serveur RADIUS. Normalement, dans un environnement comme le nôtre, c'est que le serveur Radius est le même serveur VPN réside.
Le fichier suivant est le plus important parce qu'il raconte demandes FreeRadius de s'authentifier sur un serveur MySQL. Tant mettre uniquement les parties pertinentes:
/ Etc / raddb / radiusd.conf
- mschap {
- authtype = MS-CHAP
- use_mppe = yes
- require_strong = yes
- }
- autoriser {
- prétraitement
- mschap
- suffixe
- EAP
- sql
- }
- authentifier {
- Auth-Type MS-CHAP {
- mschap
- }
- EAP
- }
- preacct {
- prétraitement
- suffixe
- fichiers
- }
- comptabilité {
- détail
- acct_unique
- sql
- }
- {séance
- sql
- }
Dans / etc / raddb / sql.conf devez configurer correctement l'accès à votre base de données MySQL, serveur, utilisateur, mot de passe et base de données que nous verrons un peu plus tard.
Configuration du client RADIUS
/ Etc / radiusclient / serveurs
- # cat /etc/radiusclient/servers [OSUS @ serveur ~] # cat / etc / radiusclient / serveurs
- localhost TUCLAVESECRETA
Lorsque la clé est le même que celui mis dans / etc / raddb / clients.conf localhost et votre adresse si autre serveur qui a le pptpd.
Dans / etc / radiusclient dictionary.microsoft vous avez le fichier. Je me souviens que j'ai eu quelques problèmes avec elle, juste au cas où je laisse celle que j'ai maintenant ne vient pas par défaut.
Dans / etc / radiusclient / radiusclient.conf que vous disposez des paramètres suivants pointant vers l'adresse IP de votre serveur Radius si ce n'est pas le même serveur VPN réside:
- authserver localhost
- AcctServer localhost
Si elles sont différentes à localhost, n'oubliez pas de configurer ici.
Création de la base de données MySQL
Nous sommes arrivés à la dernière étape.
Créer une nouvelle base de données (création rayon de base de données) et un utilisateur avec des droits à elle. Rappelez-vous maintenant configurer le fichier / etc / raddb / sql.conf avec ces données.
Maintenant, créez la structure de la base de données. Avec le paquet freeradius est la structure dont vous avez besoin.
- Rayon mysql </ usr / share / doc / freeradius -1.1 0.3 / examples / mysql.sql
L'étape qui suit toujours l'ignorer quand quelqu'un explique comment configurer FreeRadius avec MySQL et croyez-moi ce n'est pas intuitive.
Comment remplir les tableaux de l'authentification?
Bonne question Manel
.
- radcheck de table: les comptes d'utilisateurs entretenus avec les champs suivants:
- Username: nom.
- Catégories: Mot de passe (littéralement, pas la clé, mais le mot de passe utilisateur).
- op: == (deux signes égal).
- Valeur: clé de l'utilisateur.
- Tableau radreply: contient les paramètres d'initialisation qui relient les clients. Ici, j'ai mis en place l'IP de ce que cela signifie pour certains clients pour des raisons de commodité. J'ai également indiqué que seule permet la connexion simultanée avec le même utilisateur.
- Nom d'utilisateur: nom d'utilisateur que vous configurez (comme présenté dans radcheck de table).
- Attribut: le mot Framed-IP-Adresse ou simultané utilisation, comme vous l'indiquez l'adresse IP attribuée à cet utilisateur ou le nombre maximal de sessions avec le même nom.
- op: = (seul signe égal)
- Valeur: 192.168.3.99 (IP que vous voulez) ou le nombre maximal de connexions simultanées à un même utilisateur.
- Tableau groupe d'utilisateurs, regroupant les utilisateurs en groupes.
- Nom d'utilisateur: nom d'utilisateur
- NomGroupe: nom du groupe.
RadAct tableau contenant le journal d'activité du serveur, sessions initié, durée, etc.
Dernières étapes
N'oubliez pas d'ouvrir dans votre routeur et / ou le port firewall 1723 pour permettre les connexions entrantes car il est utilisé par le protocole PPTP.
Bien que, comme discuté ci-dessous peuvent vérifier les connexions au serveur Radius (et donc le serveur VPN) peut être intéressant d'avoir un mécanisme d'alerte que le client est connecté. Une façon est de voir les interfaces réseau disponibles sur le serveur (ifconfig), il y aura beaucoup pppX comme utilisateurs actifs. Mais il ya une autre méthode qui vous permet de recevoir, par exemple, par courriel, un avis chaque fois qu'un utilisateur se connecte ou se déconnecte.
Chaque fois que vous obtenez interface ppp exécute le script / etc / ppp / ip-up.local avec tous les paramètres relatifs à cette connexion, adresse IP distante, locale, l'interface ... aussi lorsqu'il est déconnecté lancements / etc / ppp / ip -down.local. ne doit adapter ce script à nos besoins. Ces scripts sont tous les paramètres nécessaires pour identifier l'utilisateur. Nous aimerions faire quelque chose, par exemple pour ip-up.local.
- # / Bin / sh
- "$5" == "192.168.3.10" ] if ["$ 5" == "192.168.3.10"]
- puis
- client = "Pepito"
- fi
- echo "La connexion VPN
- Interface: 1 $
- Local VPN: 4 $
- VPN à distance: 5 $
- IP à distance: 6 $
- 1: 1 $
- 2: 2 $
- 3: 3 $
- 4: 4 $
- 5: 5 $
- 6: 6 $
- <a href= "mailto:osus@osusnet.com" >osus@tudominio.com</a> "| Mail-s" Connexion VPN - $ client "<a href= "mailto:osus@osusnet.com"> osus@tudominio.com </ a>
Ainsi, vous recevrez un e-mail à chaque fois qu'un utilisateur saisit un tunnel VPN sur votre serveur et vous souhaitez savoir ce que IP est l'utilisateur et si vous avez donné une adresse IP fixe dans la configuration RADIUS, vous saurez quel utilisateur est, dans ce cas "pepito ".
Avec IP-down.local comme un script seulement au lieu de connexion VPN dans un objet du courriel aurait mettrait Déconnexion VPN. Les paramètres sont exactement les mêmes.
Ces scripts peuvent également les utiliser pour créer / modifier / supprimer des itinéraires en fonction de certains tunnels créés.
Le paquet lui-même sera installé le script de démarrage pptpd nécessaire dans mon cas / etc / init.d / pptpd. Je viens de l'ajouter au niveau d'exécution de démarrage automatique de mon serveur et le service est toujours disponible.
En théorie, tout le vpn est faite contre serveur de routage avoir les uns les autres, ce qui signifie que vous pourriez obtenir d'un client à un autre via le serveur sans tergiverser. Je dis théoriquement parce que c'est la fonction de la proxyarp des paramètres, nous avons configuré plus tôt. Ce routage peut-être pas assez et vous avez besoin des clients VPN peuvent accéder à d'autres sous-réseaux de votre infrastructure. Vous pouvez faire ce que vous voulez, même la mise en place d'un pont , mais pour ces choses mieux que iptables .
Imaginez un scénario où nous avons une partie locale lan notre serveur (adresse 192.168.0.0) et de créer un nouveau réseau pour VPN (adresse 192.168.3.0). Pour activer le routage complet entre les deux réseaux ferait quelque chose comme:
- # / Bin / sh
- >/proc/sys/net/ipv4/ip_forward echo 1> / proc/sys/net/ipv4/ip_forward
- LAN = "192.168.0.0/16"
- VPN2 = "192.168.3.0/24"
- -j ACCEPT iptables-A FORWARD-s $ LAN-d $ VPN2-j ACCEPT
- -m state –state ESTABLISHED,RELATED -j ACCEPT iptables-A FORWARD-s $ VPN2-d $ LAN-m state-État a créé, LIÉS-j ACCEPT
- iptables-t nat-A POSTROUTING-d $ VPN2-j MASQUERADE
Simple. Si nous voulions seulement certains utilisateurs au réseau local accediesen modifierait la variable IP VPN2 le rayon permet à l'utilisateur.
FreeRadius à partir d'un environnement Web, dialup_admin
Bon, c'est vrai, c'est une douleur dans le cul pour gérer FreeRadius et tous ses paramètres, alors quoi de mieux qu'un environnement web simple pour la gestion des utilisateurs et la visualisation de l'entreprise et le système de log. Cet utilitaire est dialup_admin . Je ne vais pas être installé car je pense que cela vient de lire cet article et en plus c'est une simple application web sans trop de difficulté.
Avec cet outil, il sera beaucoup plus facile de créer des utilisateurs et de leurs propriétés et de garder trace de qui est connecté, les périodes de connexion ont, etc.
Établir VPN à partir de Windows
Très simple. De Connexions réseau, vous créez une nouvelle connexion, choisissez Connexion au réseau d'entreprise et qui est fondamentalement juste entrer dans le votre hôte du serveur VPN ou IP et se connecter. Je recommande décochant la case Utiliser la passerelle par défaut pour le réseau distant dans les propriétés de cette nouvelle connexion, réseau, TCP / IP, Avancé, sinon tout le trafic internet normal, vous via le VPN.
Si tout va bien se connecter à votre serveur et avoir accès à elle comme si vous étiez sur votre propre réseau local.
Établir VPN sous Linux
Depuis Linux est un peu plus compliqué parce que, comme d'habitude, pour faire la configuration manuellement. Il est un utilitaire graphique pour créer des connexions d'une manière similaire à Windows, mais plutôt expliquer comment le faire à partir de la console si votre machine dispose pas d'environnement graphique.
- # cat /etc/ppp/options.pptp [Osus @ server ~] # cat / etc / ppp / options.pptp
- verrouiller
- noauth
- refuser-EAP
- refuser, chap
- refuser-mschap
- nobsdcomp
- nodeflate
Nous indiquons maintenant le nom d'utilisateur et mot de passe utilisé pour se connecter. IdentificadorRed est le nom que nous donnons à la connexion, vous pouvez être ce que vous voulez.
- # cat /etc/ppp/chap-secrets [Osus @ server ~] # cat / etc / ppp / chap-secrets
- Clé utilisateur IdentificadorRed *
Maintenant, créez la configuration de la connexion que vous créez avec IdentificadorRed nous avons discuté plus tôt. En TUIP faut mettre le nom d'hôte ou l'adresse IP de votre serveur VPN.
- # cat /etc/ppp/peers/IdentificadorRed [Osus @ server ~] # cat / etc / ppp / peers / IdentificadorRed
- nomdistant IdentificadorRed
- linkname IdentificadorRed
- ipparam IdentificadorRed
- pty "pptp-nolaunchpppd TUIP"
- Nom d'utilisateur
- exigence mppe
- exigence mschap-v2
- refuser-EAP
- refuser-pap
- refuser, chap
- refuser-mschap
- # Demand
- holdoff 5
- persister
- maxfail 0
- ipcp-accept-remote
- ipcp-accept-local
- noauth
- 192.168 .3 .1: 3 .254 192.168
Voici deux options intéressantes:
- persister: recréé automatiquement si le tunnel est coupé pour une raison si c'est toujours actif.
- demande: crée automatiquement le tunnel pour accéder à l'IP du serveur ou d'un autre qui passent par ce tunnel, bien que non requis inactive. Ne doit évidemment pas être ainsi persister autrement est toujours actif.
Enfin, nous créons un script de démarrage simple pour lancer automatiquement ou tout simplement pour ne pas avoir à mémoriser les paramètres.
- # cat /etc/init.d/IdentificadorRed [Osus @ server ~] # cat / etc / init.d / IdentificadorRed
- # / Bin / sh
- in case "$ 1" dans
- commencer)
- echo-n "Démarrage VPN IdentificadorRed"
- Echo
- touch / var / lock / subsys / pptpd
- / Usr / sbin / pppd call IdentificadorRed logfd 1 updetach &
- ;;
- arrêter)
- echo-n "Arrêt VPN IdentificadorRed"
- Echo
- -n 1 /var/run/ppp-IdentificadorRed.pid` kill-TERM `head-n 1 / var / run / ppp-IdentificadorRed.pid`
- ;;
- *)
- echo "Usage: $ 0 {start | stop}"
- exit 1
- esac
- exit 0
Et c'est tout pour aujourd'hui. Il m'a fallu plus longtemps que prévu à écrire cet article parce que j'ai écrit, je sautais de nouveaux souvenirs sur des détails qui devraient être nommés.
Notez que mon expérience avec PPTP remonte il ya cinq ans donc il pourrait avoir changé quelques détails au cours des dernières années. Après ce premier serveur VPN année dernière nous avons déménagé à CentOS5 OS et reconfigurer le serveur VPN pratiquement tous les paramètres laissés comme ils étaient. Je ne pense pas que vous n'avez aucun problème à résoudre certains petits détails qui peuvent survenir.











