Linux-Tipps und Tricks: Server, öffnen

Für diejenigen, die sich selbst und ihren Lieben von überall auf der Welt über SSH/RDP/andere, ein kleines RTFM/Spur, Zugriff auf ihre Server ermöglichen müssen.

Wir müssen auf VPN und anderen Schnickschnack verzichten, von jedem Gerät aus.

Und damit Sie nicht zu viel mit dem Server trainieren müssen.

Alles, was Sie dafür brauchen, ist geklopft, gestreckte Arme und 5 Minuten Arbeit.

„Alles ist im Internet“, natürlich (sogar auf Habré), aber wenn es um eine bestimmte Implementierung geht, beginnt es hier ...

Wir üben am Beispiel von Fedora/CentOS, aber das spielt keine Rolle.

Der Sporn ist sowohl für Anfänger als auch für Experten in dieser Angelegenheit geeignet, daher wird es Kommentare geben, diese werden jedoch kürzer sein.

1. Server

  • Knock-Server installieren:
    yum/dnf install knock-server

  • Konfigurieren Sie es (zum Beispiel auf 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

    Der „Öffnungs“-Teil ist so eingestellt, dass er sich nach 1 Stunde automatisch schließt. Man weiß nie...

  • /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
    ...

  • nach vorne:

    service iptables restart
    service knockd start

  • Sie können RDP zum darin rotierenden virtuellen Windows-Server hinzufügen (/etc/knockd.conf; ersetzen Sie den Schnittstellennamen nach Ihrem Geschmack):

    [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

    Mit dem Befehl verfolgen wir alle unsere Kicks vom Client auf dem Server iptables -S.

2. Anleitung zu Rechen

knockd.conf:

Das Mana enthält auch alles (das ist aber ungenau), aber Knockd ist ein Freund, der mit Nachrichten ziemlich geizig ist, also muss man sehr vorsichtig sein.

  • Version
    In den Fedora/CentOS-Repositories beträgt der aktuellste Knockd für heute 0.63. Wer UDP möchte, sucht nach 0.70-Paketen.
  • Schnittstelle
    In der Standardkonfiguration von Fedora/CentOS ist diese Zeile kein. Mit den Händen hinzufügen, sonst klappt es nicht.
  • Timeout
    Hier können Sie ganz nach Ihrem Geschmack wählen. Es ist notwendig, dass der Client genügend Zeit für alle Kicks hat – und der Port-Scanner-Bot wird zusammenbrechen (und 146 % scannen).
  • Start/Stopp/Befehl.
    Wenn es einen Befehl gibt, dann command, wenn es zwei gibt, dann start_command+stop_command.
    Wenn Sie einen Fehler machen, bleibt knockd stumm, funktioniert aber nicht.
  • deshalb
    Theoretisch kann UDP verwendet werden. In der Praxis habe ich TCP und UDP gemischt, und der Kunde vom Strand auf Bali konnte das Tor erst zum fünften Mal öffnen. Weil TCP bei Bedarf ankam, UDP jedoch keine Tatsache ist. Aber das ist wiederum Geschmackssache.
  • Reihenfolge
    Der implizite Rake besteht darin, dass sich die Sequenzen nicht überschneiden sollten ... wie soll ich das sagen ...

Zum Beispiel:

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

Von Kick 11111 XNUMXh geöffnet wartet auf den nächsten Kick bei 22222. Nach diesem Kick (22222) beginnt es jedoch zu funktionieren schließen und alles wird kaputt gehen. Dies hängt auch von der Verspätung des Kunden ab. Solche Dinge ©.

iptables

Wenn in /etc/sysconfig/iptables dies ist:

*nat
:PREROUTING ACCEPT [0:0]

Es stört uns nicht wirklich, also hier ist es:

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

Es stört.

Da knockd am Ende der INPUT-Kette Regeln hinzufügt, erhalten wir eine Ablehnung.

Und diese Ablehnung auszuschalten bedeutet, das Auto allen Winden zu öffnen.

Um nicht in iptables verloren zu gehen, was vor was eingefügt werden soll (so Menschen vorschlagen), machen wir es einfacher:

  • Standard auf CentOS/Fedora erste die Regel („Was nicht verboten ist, ist erlaubt“) wird durch das Gegenteil ersetzt,
  • und wir entfernen die letzte Regel.

Das Ergebnis sollte sein:

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

Sie können natürlich auch REJECT anstelle von DROP ausführen, aber mit DROP macht das Leben für Bots mehr Spaß.

3. Kunde

Dieser Ort ist (aus meiner Sicht) der interessanteste, da man nicht nur von jedem Strand, sondern auch von jedem Gerät aus arbeiten muss.

Grundsätzlich sind eine Reihe von Kunden auf gelistet Webseite Projekt, aber das ist aus der gleichen Serie „Alles ist im Internet“. Deshalb werde ich auflisten, was hier und jetzt funktioniert.

Bei der Auswahl eines Clients müssen Sie sicherstellen, dass dieser die Verzögerungsoption zwischen Paketen unterstützt. Ja, es gibt Unterschiede zwischen den Stränden und 100 Megabit garantieren nie, dass Pakete von einem bestimmten Ort in der richtigen Reihenfolge zur richtigen Zeit ankommen.

Und ja, beim Einrichten eines Clients müssen Sie die Verzögerung selbst auswählen. Zu viel Timeout – Bots werden angreifen, zu wenig – der Client hat keine Zeit. Zu viel Verzögerung – der Client schafft es nicht rechtzeitig oder es kommt zu einem Idiotenkonflikt (siehe „Rechen“), zu wenig – die Pakete gehen im Internet verloren.

Mit Timeout=5s, Verzögerung=100..500ms ist eine völlig funktionierende Option

Windows

So lustig es auch klingen mag, es ist keineswegs trivial, einen Clear-Klopf-Client für diese Plattform zu googeln. So dass die CLI Verzögerung, TCP unterstützt – und das ohne Bögen.

Als eine Option können Sie es versuchen das ist. Anscheinend ist mein Google kein Zuckerschlecken.

Linux

Hier ist es ganz einfach:

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

MacOS

Am einfachsten ist es, den Port von Homebrew aus zu installieren:
brew install knock
und zeichnen Sie die notwendigen Batchdateien für Befehle wie:

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

iOS

Eine funktionierende Option ist KnockOnD (kostenlos im Store).

Android

„An die Häfen klopfen“ Keine Werbung, aber es funktioniert einfach. Und die Entwickler reagieren sehr schnell.

PS-Abschlag für Habré, natürlich, Gott segne ihn eines Tages ...

UPD1.: Dank an zu einem guten Menschen gefunden arbeitender Kunde unter Windows.
UPD2.: noch eins Horosy Mann hat mich daran erinnert, dass es nicht immer sinnvoll ist, neue Regeln am Ende von iptables einzufügen. Aber – es kommt darauf an.

Source: habr.com

Kommentar hinzufügen