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
„Wszystko jest w Internecie” oczywiście (nawet w Internecie).
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
- 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
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ć
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
UPD2: Inny
Źródło: www.habr.com