Aller au contenu

S


ERaw

Messages recommandés

Bonjour,

Suite à pas mal de posts traitants de conenction VPN a partir d'un Syno, j'ai remarqué que presque personne ne se soucie de l'aspect sécurité.

Lorsque le NAS passe par un tunnel VPN en vue d'être anonyme sur internet, le fait d'avoir une IP publique vous expose complètement. La sécurité apportée par un routeur/box/... est innefficace car le NAS est connecté et visible directement sur internet, un peu comme si le cable réseau du syno était publique.

Le DSM (4.1 dans mon cas) propose une interface pour configurer le firewall mais celle çi ne reprends pas l'interface virtuelle créée lors de l'établissement du tunnel VPN. Il n'est donc pas possible d'appliquer des règles pour bloquer les ports ouverts sur votre NAS et son interface VPN.

Lorsque vous avez une connection VPN fonctionnelle (PPTP ou openVPN) il est possible d'appliquer manuellement des règles pour filtrer les connections vers votre NAS. Le problème est que ces règles disparaissent lorsque le VPN est déconnecté ou qu'il est reconnecté automatiquement après une interruption.

Pour éviter de devoir scruter manuellement la présence des filtres, j'ai fais un script qui vérifiera toutes les minutes si le VPN est connecté et si oui, si les filtres sont présent. Si les filtres ne sont pas présent, il jouera les commandes nécessaires pour créer les filtres.

Cron (planificateur de tâches Unix/Linux) se chargera d'exécuter le script à intervalles réguliers.

Pour suivre ce tuto vous devez avoir au minimum les connaissances de base linux. Toute la marche à suivre est à exécuter en tant que root. Je tiens quand même à vous avertir que si vous ne comprenez rien à ce qui est dit, il est risqué d'aller plus loin.

le script doit être accessible dans l'arborescence de votre syno (par exemple dans /usr/local/scripts/ ) et exécutable (chmod +x lenomduscript.sh )

Le script est le suivant:

EDIT du 21/01/2013: La ligne iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT doit être ajoutée sinon (entre autre) l'update DDNS ne pourra se faire (cette ligne autorise les packets qui font partie d'une session déjà ouverte, dans ce cas par le client DDNS qui dois connaître son IP publique).

#!/bin/ash
####################################################################
#   This script coverts the lack of security when machine is fully #
#   exposed on its public IP address once connected to a VPN.      #
#   It is designed to work on Synology NAS running DSM 4.1 but     #
#   general linux rules apply, it should be usefull for other      #
#   purpose.                                                       #
#   e-raw [@] e-raw.be                                             #
####################################################################


#   Local settings definition                 #
#
#iptables binary path
iptables="/sbin/iptables"
#VPN interface
#Should be tun0 for openVPN instance and ppp0 for PPTP
interface="tun0"
#
#   Test if VPN is up and iptables rules have been defined yet    #
#
if [ -n "$(ifconfig | grep "$interface")" ] && [ -z "$($iptables -L -v | grep "$interface")" ]; then
    #Incoming connections ACCEPT on the VPN interface             #
   
    $iptables -A INPUT -i $interface -p tcp --destination-port  22  -j ACCEPT
    #[...]
    $iptables -A INPUT -i $interface -p tcp --destination-port 5001 -j ACCEPT
    ##EDIT: Mandatory to allow DDNS client to resolve it own public address:
    $iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    
    #if none of the rules were matched DROP                       #
    $iptables -A INPUT -i $interface -p tcp -j DROP
    $iptables -A INPUT -i $interface -p udp -j DROP
    $iptables -A INPUT -i $interface -p icmp -j DROP
fi
exit 0; 

Deux choses sont à adapter a vos besoins:

  1. Le type de VPN
    L'interface virtuelle créée lors de la connection est tun0 dans le cas d'openVPN et ppp0 dans le cas du PPTP
  2. Les ports à ouvrir
    Ceux çi doivent être l'équivalent de ce que vous avez routé sur votre box pour pouvoir y avoir accès de l'extérieur. faites attentions au protocole (udp/tcp) ainsi qu'au port (en rouge)

Une fois le script modifié et exécutable, connectez-vous au VPN. Vous pourrez vérifier que il n'y a aucun filtre avec la commande iptables -L -v

Lancez le script manuellement une première fois et rejouez la commande iptables -L -v

Les filtres sont désormai appliqués et visibles.

Pour rendre le tout automatique, il faut utiliser crontab. Dans mon cas, le script est exécuté toute les minutes. Il y aura donc maximum une minute ou le NAS sera exposé lors de chque reboot/reconnection.

Sur le syno, les entrées du cron se trouvent dans le crontab dans /etc/crontab:

DiskStation> cat /etc/crontab
#minute hour    mday    month   wday    who     command
32      18      *       *       2,5     root    /usr/syno/bin/synopkg chkupgradepkg
0       4       *       *       1       root    /var/packages/AntiVirus/target/bin/synoavscan --all
*       *       *       *       *       root    /usr/local/scripts/vpn_iptables.sh

Chaque ligne représente une tache planifiée. On remarque ici que vpn_iptables.sh (le script en question) est exécuté toute les minutes. Les autres lignes ne doivent pas être touchées!

Ajoutez à l'aide de vi par exemple la ligne en rouge correspondant à votre script. Redémarrez crond avec les commandes :

/usr/syno/etc.defaults/rc.d/S04crond.sh stop
/usr/syno/etc.defaults/rc.d/S04crond.sh start

Pour vérifier que votre script fonctionne bien, vous pouvez vider les règles de filtres avec la commande iptables -F ce qui aura le même effet qu'une nouvelle (re)connection.

Après maximum une minute (suivant l'intervalle que vous avez configuré dans cron) les filtres devraient réapparaitre, à vérifier avec iptables -L -v

J'espère que ça en aidera quelques uns!

Modifié par ERaw
Lien vers le commentaire
Partager sur d’autres sites

Merci ERaw,

Pour ma part, j'ai changé la ligne :

if [ -n "$(ifconfig | grep "$interface")" ] && [ -z "$($iptables -L -v | grep "DROP")" ]; then

par

if [ -n "$(ifconfig | grep "$interface")" ] && [ -z "$($iptables -L -v | grep "$interface" | grep "DROP")" ]; then

En effet, dans mon cas, j'ai des règles (DROP) configurées dans le Firewall pour l'interface br0. Le grep ajouté permet de ne se concentrer que sur l'interface tun0.

Lien vers le commentaire
Partager sur d’autres sites

Merci ERaw,

Pour ma part, j'ai changé la ligne :

if [ -n "$(ifconfig | grep "$interface")" ] && [ -z "$($iptables -L -v | grep "DROP")" ]; then

par

if [ -n "$(ifconfig | grep "$interface")" ] && [ -z "$($iptables -L -v | grep "$interface" | grep "DROP")" ]; then

En effet, dans mon cas, j'ai des règles (DROP) configurées dans le Firewall pour l'interface br0. Le grep ajouté permet de ne se concentrer que sur l'interface tun0.

Je vais modifier le script en fonction de ta remarque, c'est effectivement plus efficace. On pourrait même supprimer le grep "DROP" vu que c'est tout ou rien.

Merci pour la remarque!

Lien vers le commentaire
Partager sur d’autres sites

sympa le script c'est vraie que depuis que j'ai mit mon vpn j'ai des alerte de braquage .

le must ce serais de faire un paquet spk avec une interface pour rajouter les port dont les personne ont besoin .

Ca devrait normalement être disponible dans l'interface du DSM->Firewall avec les interface physique eth et le PPPoE mais ce n'est pas encore disponible. Je suppose que ça viendra avec le temps et le nombre d'utilisateurs qui configurent un VPN client sur leur Syno. En attendant on peut un peu bidouiller :D

Lien vers le commentaire
Partager sur d’autres sites

Vous pouvez faire beaucoup plus simple en utilisant le script /etc/ppp/ip-up.
Ce dernier est appelé automatiquement à l'établissement d'une connexion ppp (Point-to-Point Protocol).

J'utilise le client VPN PPTP du NAS pour me connecter à plusieurs LAN distants.

Dans mon cas, je voulais créer automatiquement les règles de routage pour me connecter à chacun des sous-réseaux distants, ce qui donne dans /etc/ppp/ip-up :

case ${IPREMOTE} in
10.0.0.0)
        route add -net 192.168.0.0/26 dev ${IFNAME}
        route add -net 192.168.0.64/26 dev ${IFNAME}
        route add -net 192.168.0.128/26 dev ${IFNAME}
        route add -net 192.168.0.192/26 dev ${IFNAME}
        ;;
esac

Le paramètre IFNAME est le nom de l'interface (pppx).

Le paramètre IPREMOTE est l'adresse privée du point distant correspondant à l'adresse P-t-P dans ifconfig :

ppp0      Link encap:Point-to-Point Protocol
          inet addr:10.1.0.1  P-t-P:10.0.0.0  Mask:255.255.255.255

Ainsi, lorsqu'une interface ppp est montée, on peut exécuter des commandes en fonction de l'adresse IP de l'hôte distant.

Dans le cas d'un VPN anonyme, il suffit d'ajouter l'adresse IP de l'hôte distant (IPREMOTE) et d'y placer le règles iptables associées.

Lien vers le commentaire
Partager sur d’autres sites

Vous pouvez faire beaucoup plus simple en utilisant le script /etc/ppp/ip-up.

Ce dernier est appelé automatiquement à l'établissement d'une connexion ppp (Point-to-Point Protocol).

Est-ce que ce script est également joué lors de l'instanciation d'une interface TUN/TAP?

Lien vers le commentaire
Partager sur d’autres sites

Je ne sais pas. :mellow:

Après quelques googlages et lectures, il semple que ce script est lancé uniquement pour un VPN PPTP, pas openvpn... je n'ai pas trouvé d'affirmation explicite, c'est plutôt une déduction. Si un spécialiste passe par la? <_<

A vouloir surfer de façon anonyme au travers d'un VPN vous expose bien sur ...c'est le revers de la médaille et j'espère que tous ceux qui font ca ne le découvrent pas seulement maintenant :huh:

Patrick

A mon avis, les utilisateurs lambda sont loin de se douter de ce à quoi ils s'exposent... j'espère me tromper!

Modifié par ERaw
Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

Bonjour,

je fais parti des utilisateurs lambda et j'ai l'intention de me connecter a un VPN depuis mon NAS pour anonymiser ma connexion.

Je considère avoir eu un coup de bol de tomber sur ce sujet car on lit partout que la connexion VPN est sécurisante. J’étais loin de me douter des risques encourus et j'ai toujours du mal a les comprendre...

Quelques questions concernant ce tutoriel:

  • Les risques décrits ici sont-ils également valables pour un PC quelconque? Si non, qu'est-ce qui différencie le NAS du PC et qui le rend plus vulnérable?
  • Je ne connais rien a Linux, comment appliquer ce script dans ce cas? est-il possible de détailler plus le tuto pour les débutants?

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

Bonjour à tous,

J'ai essayé d'executer le script proposé ci-dessus sur mon Syno (commande : "./ SecuriserNasVPN.sh") mais j'ai le message d'erreur suivant : "-ash: ./: Permission denied".

Pour info, je suis connecté en tant que root et les droits sur le script sont les suivants : -rwxrwxrwx 1 admin users 1578 Apr 13 08:06 SecuriserNasVPN.sh

Merci par avance

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

je fais parti des utilisateurs lambda et j'ai l'intention de me connecter a un VPN depuis mon NAS pour anonymiser ma connexion.

Je considère avoir eu un coup de bol de tomber sur ce sujet car on lit partout que la connexion VPN est sécurisante. J’étais loin de me douter des risques encourus et j'ai toujours du mal a les comprendre...

Quelques questions concernant ce tutoriel:

  • Les risques décrits ici sont-ils également valables pour un PC quelconque? Si non, qu'est-ce qui différencie le NAS du PC et qui le rend plus vulnérable?
  • Je ne connais rien a Linux, comment appliquer ce script dans ce cas? est-il possible de détailler plus le tuto pour les débutants?

Merci d'avance

Bonjour Argenos,

J'arrive une guerre en retard... on ne sait jamais, peut-être que tu repasseras.

Oui les mêmes dangers s'appliquent à un PC connecté sur un VPN. Et pour te donner une idée du risque, si tu as un dossier partagé sur le PC connecté au VPN, il suffit que quelqu'un de tape "TonIpVPN" pour voir ce que tu partage (si le compte guest est activé, il n'a même pas besoin de mot de passe!)

Pour ce qui est d'adapter le tuto aux non-initiés... ça prendrait des dizaines de page si on veut vraiment couvrir tous les cas. L'idéal serait de comprendre les principes fondamentaux de linux/unix. Les lignes de commande ça fait peut-être peur mais ça ne fait pas mal et c'est très puissant. Pour commencer je te conseille de consulter ces sujets:

  • Comprendre le fonctionnement du SSH/Telnet
  • Comprendre le système de fichier Unix/Linux (si tu viens du monde Mac ça sera encore plus facile) pour pouvoir retrouver tes jeunes. Dans la même partie, les droits d'acces/execution sur les fichiers.
  • Connaitre les fonctions de base de vi (editeur en ligne de commande) ça sauve la vie (au sens strict du terme :lol: )
  • Pour ce cas précis de tutoriel, il faut comprendre les principes de base de routage au layer 3 (routage IP) et donc tout ce qui s'y rapporte, ainsi que le NAT et le port forwarding.

Si tu rames au début, te tracasse pas, c'est normal, on est tous passés par la!

Courage! <_<

Modifié par E-Raw
Lien vers le commentaire
Partager sur d’autres sites

Bon j'ai finalement trouvé la source de mon erreur

1- La commande est "ash nomDuScript.sh"

2- Ayant éditer mon script via Windows, j'avais des ^M à chaque fin de ligne du script. Un edit via vi a régler le problème

Christophe

Bonjour Christophe,

Pour ce qui est de l'édition sous Windows d'un fichier Linux/Unix je te conseille Notepad++ qui est open source et gratuit. Il permet de passer d'un format à l'autre et inversément. De plus pour une utilisation avancée, il permet d'ouvrir directement les fichiers sur ton Syno (ou tout autre machine qui supporte FTP,SFTP,...) par l'intermédiare d'une des fonctions avancées.

Ca évite bien des déboires!

Bien à toi

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Bonjour Argenos,

J'arrive une guerre en retard... on ne sait jamais, peut-être que tu repasseras.

Oui les mêmes dangers s'appliquent à un PC connecté sur un VPN. Et pour te donner une idée du risque, si tu as un dossier partagé sur le PC connecté au VPN, il suffit que quelqu'un de tape "TonIpVPN" pour voir ce que tu partage (si le compte guest est activé, il n'a même pas besoin de mot de passe!)

Pour ce qui est d'adapter le tuto aux non-initiés... ça prendrait des dizaines de page si on veut vraiment couvrir tous les cas. L'idéal serait de comprendre les principes fondamentaux de linux/unix. Les lignes de commande ça fait peut-être peur mais ça ne fait pas mal et c'est très puissant. Pour commencer je te conseille de consulter ces sujets:

  • Comprendre le fonctionnement du SSH/Telnet
  • Comprendre le système de fichier Unix/Linux (si tu viens du monde Mac ça sera encore plus facile) pour pouvoir retrouver tes jeunes. Dans la même partie, les droits d'acces/execution sur les fichiers.
  • Connaitre les fonctions de base de vi (editeur en ligne de commande) ça sauve la vie (au sens strict du terme :lol: )
  • Pour ce cas précis de tutoriel, il faut comprendre les principes de base de routage au layer 3 (routage IP) et donc tout ce qui s'y rapporte, ainsi que le NAT et le port forwarding.

Si tu rames au début, te tracasse pas, c'est normal, on est tous passés par la!

Courage! <_<

Salut E-Raw,

Comme tu vois il n'est jamais trop tard et je continuais d'attendre une reponse. Mais en fait je m'attendais un peu au fait que c'etait difficilement simplifiable et qu'il faudrait a un moment ou a un autre que je mette les mains dans le cambouis.

C'est donc ce que j'ai fait, j'ai lu cet excellent cours sur linux sur le site du zero

http://www.siteduzero.com/informatique/tutoriels/reprenez-le-controle-a-l-aide-de-linux

Ca m'a vraiment donne les bases pour comprendre ton script et savoir de quoi on parlait (a peu pres). Je le recommande a tous ceux qui comme moi, ne pigent rien a tout ca!

J'ai donc reussi a appliquer ce script.

  • Par contre je constate chez moi que les regles concernant l'interface tun0 dans iptables ne semblent pas disparaitre a chaque deconnection du VPN. Par deconnection du VPN, est-ce que tu veux dire redemarrage du NAS?
  • autre question, je constate dans ifconfig que le volume de donnees echangees sur l'inface tun0 l'est aussi sur le eth0. Est-ce que c'est normal?
  • autre question, j'execute la commande iptables -L -v et je constate dans les 2 premieres colonnes (pkts, bytes devant target) que j'ai des nombres importants aux 3 lignes target = DROP de ton script. Qu'est-ce que ca represente?
  • Derniere question, j'ai vu dans le fil parler de tentatives d'intrusions sur le NAS. Comment surveiller ca, que le serveur n'a pas ete attaque?

Merci encore

a+

Argenos

Modifié par argenos
Lien vers le commentaire
Partager sur d’autres sites

Bonjour Argenos,

Content que tu aies sauté le pas!

Pour ce qui est des points dont tu parles:

  • Par contre je constate chez moi que les regles concernant l'interface tun0 dans iptables ne semblent pas disparaitre a chaque deconnection du VPN. Par deconnection du VPN, est-ce que tu veux dire redemarrage du NAS?
  • autre question, je constate dans ifconfig que le volume de donnees echangees sur l'inface tun0 l'est aussi sur le eth0. Est-ce que c'est normal?
  • autre question, j'execute la commande iptables -L -v et je constate dans les 2 premieres colonnes (pkts, bytes devant target) que j'ai des nombres importants aux 3 lignes target = DROP de ton script. Qu'est-ce que ca represente?
  • Derniere question, j'ai vu dans le fil parler de tentatives d'intrusions sur le NAS. Comment surveiller ca, que le serveur n'a pas ete attaque?
  • Normalement lorsque le VPN se déconnecte, l'instance tun0 disparait et donc iptable fait le ménage puisque l'interface n'existe plus. Quand je parle de déconnexion, c'est betement quand tu le coupe manuellement ou quand il se déconnecte ou bout d'un temps.
  • C'est parfaitement normal d'avoir le volume de l'interface tun0 dans eth0. En fait tun0 n'est rien d'autre qu'une interface virtuelle, elle crée un tunnel tout aussi virtuel a travers eth0 dans ton cas. Ce qui veut dire que le traffic passe physiquement par eth0. Tu verras également que si tu te connecte en local sur ton syno et que tu echange de gros volumes de données, le compteur grimpera sur eth0 mais pas sur tun0 puisque ca ne passera pas par le tunnel.
  • Ca reprensente les packets/bytes qui sont rejetés. Sont rejetés: tout les packets qui ne correspondent a aucune des règles définie en dessous.
    Par exemple, si le port 22 n'est pas ouvert (ACCEPT)et que quelqu'un essaye de se connecter sur le port 22, le compteur DROP grimpera et la personne fera un timeout.
  • La plupart des "attaques" (on devrait plutot appeller ça des tentatives) sont faites au hasard sur des ports standards, pour ma part le SSH est le plus visé.
    Pour logguer ces tentatives il suffit d'activer le blocage auto: Panneau de configuration ->Blocage auto dans la partie Services réseaux.
    Je te conseille 5 tentatives sur 5 minutes et l'expiration a un jour. Tu verras les logs de ces bloquages dans Journeaux système.

Il faut toujours garder a l'esprit que moins il y a de breches, plus la personne qui essaye de rentrer mettra de temps. Ensuite toujours privilégié les authentification cryptées (SSH, SSL/HTTPS,...) plutot que des authentification en clair. le Syno ne doit JAMAIS être exposé sur internet en HTTP simple! Pour être certain, aller voir dans le Panneau de configuration -> Paramètres de DSM -> onglet Service HTTP. HTTPS doit être activé ainsi que la redirection automatique.

Il y a encore bien d'autres sujets a aborder sur la sécurité mais c'est déjà pas mal... ;)

Bon amusement!

Lien vers le commentaire
Partager sur d’autres sites

Cette option permet de définir la connexion VPN comme passerelle par défaut du NAS.

Si elle est désactivée, la passerelle par défaut sera le routeur du réseau local et le trafic internet ne passera plus par le VPN.

Pour avoir quelque chose de propre, le passage par iptables est obligatoire.

edit:

Pour faire simple, ça revient à placer le NAS dans une DMZ sans possibilité de contrôler le trafic entrant avec le pare feu du NAS (le pire du pire).

Modifié par PiwiLAbruti
Lien vers le commentaire
Partager sur d’autres sites

Cette option permet de définir la connexion VPN comme passerelle par défaut du NAS.

Si elle est désactivée, la passerelle par défaut sera le routeur du réseau local et le trafic internet ne passera plus par le VPN.

Pour avoir quelque chose de propre, le passage par iptables est obligatoire.

C''est le traffic *entrant* qui pose problème

Merci pour les infos c'est plus clair.

@+

Lien vers le commentaire
Partager sur d’autres sites

Pour être plus précis et explicite, cette option n'est "pas utile" pour le type d'utilisation que l'on en fait (anonymiser sa connexion et/ou utiliser des services géographiquement bridés type netflix etc....).

Par contre cette option est bien utile dans le cas ou le Syno client VPN se connecte sur un un réseau d'entreprise par exemple. Ca équivaut a connecter le Syno dans le LAN de l'entreprise par l'intermédiaire d'un VPN.

Avec cette configuration, le syno vit sa vie sur votre LAN mais devient aussi accesible depuis le reseau de l'entreprise, sans que tout le traffic de votre Syno ne passe par le LAN de l'entreprise.

Dans notre cas par contre, c'est comme si internet était l'entreprise et qu'on était à poil sans aucune protection. Il y a aussi une chose a noter qui n'est pas négligeable, c'est qu'en général votre fournisseur d'accès internet ferme certains ports pour limiter les risques pris par les utilisateurs non-avertis. Les port 23,25,80,135,137,138,139,443,445 et les proxy 1080, 1555, 2001, 2280, 2281, 2282, 2283, 2284, 2285, 3128, 8080, 8081, 9000. Quand vous vous connectez sur un VPN, plus aucun port n'est fermé! Donc si vous ne vous protégez pas, quelqu'un peut tout bonement taper votreippubiquevpn et acceder a vos partages windows (CIFS) de votre Syno. Puis vu que c'est plus facile d'activer le compte invité pour ne pas devoir taper de mot de passe de temps en temps, il aura accès a tout sans rien devoir pirater :D (et ce n'est pas de la fiction, il suffit de faire un scan sur un range d'ip appartenant à un provider de VPN et vous verrez, c'est édifiant! à noter quand même que le scan d'une machine qui ne vous appartient pas est illégal!)

... et il y a encore bien d'autres choses a prendre en compte, mais ça ne s'arrete jamais vu que la technologie évolue.

Pensez sécurité! :ph34r:

Modifié par E-Raw
Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.