Wskazówki i porady dotyczące Linuksa: serwer, otwórz się

Dla tych, którzy chcą zapewnić sobie i swoim bliskim dostęp do swoich serwerów z dowolnego miejsca na świecie poprzez SSH/RDP/inne, mały RTFM/spur.

Musimy obejść się bez VPN i innych bajerów, z dowolnego dostępnego urządzenia.

Abyś nie musiał za dużo ćwiczyć z serwerem.

Wszystko, czego potrzebujesz do tego to zapukał, proste ramiona i 5 minut pracy.

„Wszystko jest w Internecie” oczywiście (nawet w Internecie). Habré), ale jeśli chodzi o konkretną realizację, to od tego się zaczyna…

Będziemy ćwiczyć na przykładzie Fedory/CentOS, ale to nie ma znaczenia.

Ostroga jest odpowiednia zarówno dla początkujących, jak i ekspertów w tej kwestii, więc komentarze będą, ale będą krótsze.

1. Serwer

  • zainstaluj serwer knock-server:
    yum/dnf install knock-server

  • skonfiguruj go (na przykład na 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

    Część „otwierająca” jest ustawiona na automatyczne zamykanie po 1 godzinie. Nigdy nie wiesz...

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

  • do przodu:

    service iptables restart
    service knockd start

  • możesz dodać RDP do wirtualnego serwera Windows, który się w nim znajduje (/etc/knockd.conf; zamień nazwę interfejsu według własnego gustu):

    [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

    Śledzimy wszystkie nasze kopnięcia od klienta na serwerze za pomocą polecenia iptables -S.

2. Przewodnik po grabiach

knockd.conf:

Mana również zawiera wszystko (ale jest to niedokładne), ale knockd to przyjaciel, który jest dość skąpy w przekazywaniu wiadomości, więc musisz być bardzo ostrożny.

  • wersja
    W repozytoriach Fedory/CentOS najnowszy test na dzisiaj to 0.63. Kto chce UDP - szukaj pakietów 0.70.
  • Interfejs
    W domyślnej konfiguracji Fedory/CentOS ta linia Nie. Dodaj rękami, inaczej to nie zadziała.
  • Timeout
    Tutaj możesz wybrać według własnego gustu. Konieczne jest, aby klient miał wystarczająco dużo czasu na wszystkie kopnięcia - a bot skanera portów ulegnie awarii (i 146% przeskanuje).
  • start/stop/polecenie.
    Jeśli jest jedno polecenie, to polecenie, jeśli są dwa, to polecenie_start+komenda_stop.
    Jeśli popełnisz błąd, pukanie pozostanie ciche, ale nie zadziała.
  • proto
    Teoretycznie można zastosować UDP. W praktyce pomieszałem tcp z udp i klientowi z plaży na Bali udało się otworzyć bramę dopiero za piątym razem. Ponieważ protokół TCP pojawił się, gdy był potrzebny, ale UDP nie jest faktem. Ale to znowu kwestia gustu.
  • sekwencja
    Ukryte prowizje są takie, że sekwencje nie powinny się przecinać… jak to ująć…

Na przykład to:

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

Kopnięciem 11111 koncepcja poczeka na następne kopnięcie o 22222. Jednak po tym (22222) kopnięciu zacznie działać zamknięte i wszystko się złamie. Zależy to również od opóźnienia klienta. Takie rzeczy ©.

iptables

Jeśli w /etc/sysconfig/iptables jest to:

*nat
:PREROUTING ACCEPT [0:0]

Nam to specjalnie nie przeszkadza, więc oto:

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

To przeszkadza.

Ponieważ knockd dodaje reguły na końcu łańcucha INPUT, otrzymamy odrzucenie.

A wyłączenie tego odrzutu oznacza otwarcie samochodu na wszystkie wiatry.

Żeby nie zgubić się w iptables co wstawić przed czym (np ludzie sugeruj), uprośćmy to:

  • domyślny na CentOS/Fedorze pierwszy zasada („co nie jest zabronione, jest dozwolone”) zostanie zastąpiona zasadą odwrotną,
  • i usuwamy ostatnią regułę.

Wynik powinien być:

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

Możesz oczywiście zrobić REJECT zamiast DROP, ale dzięki DROP życie będzie przyjemniejsze dla botów.

3. Klient

To miejsce jest najciekawsze (z mojego punktu widzenia), ponieważ trzeba pracować nie tylko z dowolnej plaży, ale także z dowolnego urządzenia.

Zasadniczo na liście znajduje się wielu klientów witryna internetowa projekt, ale to z tej samej serii „wszystko jest w Internecie”. Dlatego będę wymieniać to, co sprawdza się na wyciągnięcie ręki tu i teraz.

Wybierając klienta, musisz upewnić się, że obsługuje on opcję opóźnienia między pakietami. Tak, istnieją różnice między plażami, a 100 megabitów nigdy nie gwarantuje, że pakiety dotrą z danej lokalizacji we właściwej kolejności i we właściwym czasie.

I tak, konfigurując klienta, musisz sam wybrać opóźnienie. Za duży timeout – boty zaatakują, za mały – klient nie będzie miał czasu. Za duże opóźnienie - klient nie zdąży na czas lub będzie konflikt idiotów (patrz „grabie”), za małe - pakiety zaginą w Internecie.

Przy timeout=5s, opóźnienie=100..500ms jest całkowicie działającą opcją

Windows

Bez względu na to, jak zabawnie to brzmi, Google nie jest trywialnym klientem dla tej platformy. Taki, że CLI obsługuje opóźnienie, TCP - i bez łuków.

Jako opcję możesz spróbować to jest. Widocznie mój Google to nie tort.

Linux

Tutaj jest to proste:

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

MacOS

Najłatwiej jest zainstalować port z homebrew:
brew install knock
i narysuj niezbędne pliki wsadowe dla poleceń takich jak:

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

iOS

Działającą opcją jest KnockOnD (bezpłatny, ze sklepu).

Android

„Zapukaj do portów” Nie reklama, ale po prostu działa. A programiści są dość responsywni.

PS Przecena na Habré, oczywiście, niech Bóg go kiedyś błogosławi...

UPD1: dzięki do dobrego człowieka znaleziony pracujący klient pod Windowsem.
UPD2: Inny dobry człowiek przypomniało mi, że umieszczanie nowych reguł na końcu iptables nie zawsze jest przydatne. Ale – to zależy.

Źródło: www.habr.com

Dodaj komentarz