Trucs et astuces Linux: serveur, ouvert

Ceux qui ont besoin de se fournir, bien-aimés, un accès à leurs serveurs de n'importe où dans le monde via SSH / RDP / autrement - un petit RTFM / spur.


Nous devons nous passer de VPN et d'autres cloches et sifflets, à partir de n'importe quel appareil à portée de main.


Et pour que le serveur n'exerce pas trop.


Tout ce dont vous avez besoin est de frapper , les bras tendus et 5 minutes de travail.


"Tout est sur Internet", bien sûr (même sur Habré ), mais quand il s'agit d'une implémentation spécifique, ça commence ...


Nous allons nous exercer sur l'exemple de Fedora / CentOS, mais cela n'a pas d'importance.


L'éperon conviendra à la fois aux débutants et au bison de cette entreprise, il y aura donc des commentaires, mais plus courts.


1. Serveur


  • mettre knock-server:
    yum/dnf install knock-server


  • le configurer (par exemple sur ssh) - /etc/knockd.conf:


     [options] UseSyslog interface = enp1s0f0 [SSHopen] sequence = 33333,22222,11111 seq_timeout = 5 tcpflags = syn start_command = iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT cmd_timeout = 3600 stop_command = iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT [SSHclose] sequence = 11111,22222,33333 seq_timeout = 5 tcpflags = syn command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT 

    La partie "ouverture" est réglée pour se fermer automatiquement après 1 heure. On ne sait jamais ...


  • / etc / sysconfig / iptables:


     ... -A INPUT -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22222 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 33333 -j ACCEPT ... 

  • avant:


     service iptables restart service knockd start 

  • vous pouvez ajouter RDP à la rotation virtuelle de Windows Server à l'intérieur (/etc/knockd.conf; nommez l'interface à votre goût):


     [RDPopen] sequence = 44444,33333,22222 seq_timeout = 5 tcpflags = syn start_command = iptables -t nat -A PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2 cmd_timeout = 3600 stop_command = iptables -t nat -D PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2 [RDPclose] sequence = 22222,33333,44444 seq_timeout = 5 tcpflags = syn command = iptables -t nat -D PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2 

    Tous nos coups de pied du client sont surveillés sur le serveur par la commande iptables -S .



2. Guide de râteau


knockd.conf:


Tout est dans l'homme aussi (mais c'est inexact), mais knockd est un camarade plutôt avare de messages, vous devez donc être très prudent.


  • version
    Dans les référentiels Fedora / CentOS, le résultat extrême actuel est de 0,63. Qui veut UDP - recherchez 0,70 paquets.
  • interface
    Dans la configuration par défaut de Fedora / CentOS, cette ligne est manquante . Ajoutez à la main, sinon cela ne fonctionnera pas.
  • délai
    Ici pour choisir de goûter. Il est nécessaire que le client ait suffisamment de temps pour tous les coups de pied - et le bot-scanner des ports s'arrêtera (et 146% le scanneront).
  • démarrage / arrêt / commande.
    Si la commande est une - alors commande, si deux - alors start_command + stop_command.
    Si vous faites une erreur, knockd restera silencieux, mais cela ne fonctionnera pas.
  • proto
    Théoriquement, vous pouvez utiliser UDP. En pratique, j'ai mélangé tcp et udp, et un client de la plage de Bali n'a pu ouvrir une porte que pour la cinquième fois. Pour TCP a volé si nécessaire, et UDP n'est pas un fait. Mais c'est encore une question de goût.
  • séquence
    Le rake implicite est que les séquences ne doivent pas se chevaucher ... comment le dire ...

Par exemple, ceci:


 open: 11111,22222,33333 close: 22222,11111,33333 

Le coup franc de 11111 attendra le prochain coup de pied le 22222. Cependant, ce coup de pied (22222) commencera à fonctionner de près et tout se cassera. Cela dépend également du retard du client. De telles choses ©.


iptables


Si dans / etc / sysconfig / iptables c'est ceci:


 *nat :PREROUTING ACCEPT [0:0] 

ça ne nous dérange pas, alors voilà:


 *filter :INPUT ACCEPT [0:0] ... -A INPUT -j REJECT --reject-with icmp-host-prohibited 

Taki interfère.


Puisque knockd ajoute des règles à la fin de la chaîne INPUT, nous sommes rejetés.


Et désactiver ce rejet, c'est ouvrir la voiture à tous les vents.


Afin de ne pas entrer dans iptables, où mettre quelque chose avant (comme les gens le suggèrent), nous allons le rendre plus facile:


  • par défaut dans CentOS / Fedora la première règle ("ce qui n'est pas interdit - autorisé") est remplacée par l'inverse,
  • et supprimez la dernière règle.

Le résultat devrait être:


 *filter :INPUT DROP [0:0] ... #-A INPUT -j REJECT --reject-with icmp-host-prohibited 

Vous pouvez, bien sûr, faire REJECT au lieu de DROP, mais avec DROP, les bots auront plus de plaisir.


3. Client


Dans cet endroit le plus intéressant (de mon point de vue), car vous devez travailler non seulement depuis n'importe quelle plage, mais aussi depuis n'importe quel appareil.


En principe, un certain nombre de clients sont répertoriés sur le site Web du projet, mais il s'agit de la même série «tout est sur Internet». Par conséquent, je vais lister ce qui fonctionne ici et maintenant à portée de main.


Lorsque vous choisissez un client, vous devez vous assurer qu'il prend en charge l'option de délai entre les paquets. Oui, la plage et la lutte pour la plage et 100 mégabits ne garantissent jamais que les paquets arrivent dans le bon ordre au bon moment depuis cet endroit.


Et oui - lors de la configuration du client, le délai doit être sélectionné indépendamment. Beaucoup de temps mort - les bots attaqueront, un peu - le client ne sera pas à temps. Il y a beaucoup de retard - le client ne sera pas à l'heure ou il y aura un conflit d'idiots (voir "râteau"), un peu - les paquets se perdront à nouveau sur Internet.


Avec timeout = 5s, le délai d'option pleinement fonctionnel = 100..500ms


Windows


Peu importe à quel point cela semble ridicule, mais google un client knock distinct pour cette plate-forme est assez banal. Telle que CLI prend en charge le délai, TCP - et sans arcs.


En option, vous pouvez l'essayer ici . Apparemment, mon Google n'est pas un gâteau.


Linux


Ici, tout est simple:


 dnf install knock -y knock -d <delay> <dst_ip> 11111 22222 33333 

MacOS


Le moyen le plus simple est de mettre le port depuis l'homebrew:
brew install knock
et dessine pour toi chemises de corps Commandants du formulaire:


 #!bin/sh knock -d <delay> <dst_ip> 11111 22222 33333 

iOS


L'option de travail est KnockOnD (gratuit, dans le magasin).


Android


"Frappez sur les ports". Pas de publicité, mais juste de travail. Et les développeurs sont assez réactifs.


Démarque PS sur Habr, bien sûr, que Dieu le bénisse un jour ...


UPD1 : grâce à une bonne personne, un client fonctionnel pour Windows a été trouvé.
UPD2 : une autre bonne personne a rappelé que mettre de nouvelles règles à la fin d'iptables n'est pas toujours utile. Mais - cela dépend.

Source: https://habr.com/ru/post/fr470001/


All Articles