[RÉSOLU] SSH derrière un VPN

Tags: #<Tag:0x00007f50b05834e8> #<Tag:0x00007f50b0583150> #<Tag:0x00007f50b0582110>

Bonjour,

Après avoir remué le net entier à la recherche d’une réponse à mon problème et malgrès de nombreux forum qui en parle, le sujet part à la dérive, je me tourne vers vous.

Premièrement, je possède une machine debian virtuel sur un serveur, avec un VPN fonctionnel (A savoir que ma machine debian sert de porte d’entrée (routeur) pour accéder à mon serveur donc si je fais de mauvaise règle iptables celle ci se bloque et je dois me connecté manuellement au serveur pour reboot et reprendre la main sur ma machine, je sais pas si c’est clair ^^’). Le tunnel est monté correctement et j’arrive à me connecté dessus. Pour le moment je n’ai aucun problème.
Deuxièmement, je souhaites créer des règles iptables afin de restreindre certain accès à mon serveur VPN. Il faut savoir que je ne suis pas une pro en ce qui concerne iptables, je me lance tout juste depuis 1 semaine mais je pense avoir compris les bases (enfin pas totalement vue que je me retrouve sur ce forum pour avoir de l’aide ^^).

Avant d’afficher mes règles iptables, je vais vous expliquer ce que je souhaites faire.

Je souhaites, une fois connecté à mon VPN accéder à ma machine pour me connecter en ssh et avoir accès aux ressources internes. Le plus dur pour moi ( je pense) c’est de créer la règle iptables qui va dire “La machine A est connecté au serveur VPN via son certificat, maintenant elle a accès au SSH pour avoir la mains sur les machines derrière” sinon “La machine A essaie de se connecter en SSH mais refusé car non connecté au VPN”. Pour se faire, j’ai refusé toutes les connections entrantes (INPUT et FORWARD en mode DROP) et j’ai accepté uniquement les sortantes (OUTPUT).
(Je tiens à préciser par avance que je ne sais pas si les règles iptables ont un ordre particulier ^^)

iptables -A FORWARD -s 10.52.0.0/24 -j ACCEPT

iptables -t nat -A POSTROUTING -s 10.52.0.0/24 -j SNAT --to-source 172.16.11.1

iptables -A INPUT -p tcp --dport 943 -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -i tun0 -j ACCEPT
iptables -A OUTPUT -i tun0 -j ACCEPT

iptables -A INPUT -i eth3 -p tcp --dport 22 DROP

iptables -P OUTPUT ACCEPT

iptables -A FORWARS -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -p icmp -j ACCEPT

iptables -L -v

iptables-save -c > /etc/iptables-save

Voilà pour mon fichier, j’en ai fait un script, j’ai juste affiché mes règles iptables.

J’espère avoir une réponse sous peu, en attendant je continue les recherches et si jamais je trouve la solutions je répondrais à mon poste pour afficher la solution en détaille ^^.

Merci d’avance

Bonjour,

Je pars du principe que les machines connectées en VPN sont dans le réseau 10.52.0.0/24. Il suffit alors d’autoriser le SSH que pour ce réseau :

iptables -A INPUT -s 10.52.0.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -s 10.52.0.0/24 -p tcp --sport 22 -j ACCEPT

Si cela ne fonctionne pas, je te conseille de patienter, que quelqu’un d’un peu plus calé que moi passe dans le coin.

Re-bonjour,

Merci de ta réponse rapide.
L’adresse 10.52.0.0/24 est celle de mon pôle d’adresse VPN.
Je vais essayer de suite !

Si, si, c’est très clair, je suis passé par là aussi (à devoir bypasser l’init du serveur via GRUB pour avoir un shell admin, parce que plus de SSH possible, et le compte root était verrouillé, heureusement qu’il était pas à pétaouchnok :sweat_smile: )
Pour éviter ce genre de désagrément suite à des règles iptables un peu foireuses, je fais ça (les règles iptables sont écrites dans un script iptables-up):

iptables-save > old-iptables
./iptables-up && sleep 300 && echo "restauration des anciennes règles iptables" && iptables-restore < old-iptables

ça laisse 5 minutes pour tester qu’on a toujours l’accès SSH (en ouvrant une nouvelle connexion SSH) et pour tester les nouvelles règles

Personnellement j’essaye les règles sans les mettre dans un fichier, ça me permet de récupérer un accès, au pire, en redémarrant. Après je les rejoue une à une en les récupérant avec la commande history | grep iptables et m’arrête avant la dernière.

Enfin, chacun sa méthode, du moment que ça fonctionne :wink:

C’est ce que je viens de faire ^^ mettre les règles dans un script qui est exécutable en backup. Je prends note de ta réponse ! Merci du conseil

J’ai mis en stand by mes règles iptables et je pense que pour résoudre mon problème je dois me focaliser sur fail2ban. Je viens de lire qu’on l utilisé pour le SSH, si je trouve je vous tiens au courant, merci encore pour vos réponses :smiley:

J’ai essayé de plus belle tes règles iptables mais elles n’ont pas l’air de fonctionner :frowning: j’accède au SSH même sans VPN hors je veux pouvoir y accéder uniquement par VPN :confused:

Je n’ai donné que les règles pour autoriser, donc c’est relativement logique. Il en faut au moins une autre pour bloquer :

iptables -A INPUT -s IP_PUBLIQUE -p tcp --dport 22 -j DROP

Il y a une autre possibilité qu’iptables, c’est le fichier /etc/ssh/sshd_config avec le paramètre ListenAddress. Par défaut il écoute toute les IP, mais tu peux directement lui mettre une IP du LAN. Attention par contre, si tu n’as pas d’accès “physique” à la machine, une erreur pourrait t’empêcher de l’administrer.

C’est seulement une suggestion, mais la commande iptables-apply est conçue pour cela.


AnonymousCoward

2 J'aime

J’ai du mal à comprendre la logique. Si, pour une raison quelconque vous avez besoin d’accéder (par SSH) à la machine pour réparer une configuration VPN défaillante comment allez vous procéder ?
Je vous conseille d’installer tmux et keychain pour vous simplifier la vie.

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

« On ne perd pas son temps en aiguisant ses outils. »
Proverbe français

« Moi, lorsque je n’ai rien à dire, je veux qu’on le sache. » (R. Devos)

Pour expliquer simplement, j’ai installer un VPN sur une machine. Derrière cette machine se trouve d’autres machines internes.
Sans le VPN je me connecte sur les machines internes par SSH. Depuis l’installation de mon VPN, je souhaites me connecter en SSH uniquement lorsque je suis connecté au réseau VPN. Je souhaites donc désactivé la connexion en SSH seul.

machine A------>Via le tunnel VPN------->accès SSH autorisé ------->machine B

machine A----->Sans tunnel VPN-----xAcces SSH refusé xxxxx machine B

Merciiiii beaucoup pour toutes vos réponse mais j’ai compris où était mon problème. C’est normal que je puisse me connecter en SSH sans VPN à mon serveur car je suis dans le même réseau ^^’ il a donc fallu que j’ aille sur la Box pour configurer les règles de NAT et pouvoir accéder à mon serveur uniquement via le VPN depuis l’extérieur :smiley: