Aki szeretné biztosítani, hogy saját szervereihez SSH/RDP/egyéb módon bármely pontból hozzáférjen, annak egy rövid RTFM/tanácsadó szükséges.
VPN és egyéb furfangok nélkül, bármely eszközről elérhető.
És így a szerverrel nem túl sokat kell vesződnünk.
Mindezhez szükséges, hogy , ügyes kezek és 5 perc munka.
"Az interneten mindent megtalálsz" — természetesen (még a ), de amikor a konkrét végrehajtásra kerül a sor — akkor kezdődnek a gondok...
Fedora/CentOS példáján fogunk edzeni, de ez nem lényeges.
A tanácsadó alkalmas lesz kezdőknek és a szakértőknek is, ezért lesznek kommentek, de rövidek.
1. Szerver
telepítjük a knock-servert:
yum/dnf install knock-serverbeállítjuk (például SSH-ra) — /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"A nyitó" rész automatikus lejáratra van állítva 1 óra múlva. Ki tudja, hogy mi történhet...
/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 ...előre:
service iptables restart service knockd starthozzáadhatunk RDP-t egy virtuális Windows Serverhez ( /etc/knockd.conf; az interfész nevét ízlés szerint állítsuk be):
[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.2Minden ügyfél pofonunkat nyomon követjük a szerverre a következő parancs segítségével:
iptables -S.
2. Útmutató a csapdákhoz
knockd.conf:
A kézikönyvekben is mindent megtalálható (de ez nem biztos), azonban a knockd — elég fukara az üzenetekkel, ezért nagyon figyelmesnek kell lenned.
- verzió
Fedora/CentOS tárolóiban a legfrissebb knockd 0.63-ra van készülve. Aki UDP-t akar — keresse a 0.70-es csomagokat. - interface
Fedora/CentOS alapértelmezett konfigurációjában ez a sor nincs. Kézzel hozzáadni, különben nem fog működni. - időkorlát
Itt lehet ízlés szerint kiválasztani. Úgy kell beállítani, hogy az ügyfélnek elegendő ideje legyen az összes pofonra — és a portszkennelő bot elakadjon (mert 146%-ot fog skenelni). - start/stop/command.
Ha a csapat egy, akkor command, ha kettő, akkor start_command+stop_command.
Ha hibázol, a knockd hallgatni fog, de nem fog működni. - proto
Elméletileg használható az UDP. A gyakorlatban összekevertem a tcp-t és az udp-t, és a kliens a balinéz strandon csak ötödik próbálkozásra tudta kinyitni a kaput. Mivel a TCP időben megérkezett, az UDP pedig nem biztos. De ez ízlés kérdése is. - sequence
Az implicit csapdák abban rejlenek, hogy a szekvenciáknak nem szabad átfedniük… hogy is mondjam…
Például egy ilyet:
open: 11111,22222,33333
close: 22222,11111,33333Az 11111-es rúgásra open a következő rúgásra 22222-t vár. Azonban erre a (22222) rúgásra elkezd működni close és minden tönkremegy. Ez a kliens késleltetésétől is függ. Ilyen a helyzet ©.
iptables
Ha a /etc/sysconfig/iptables-ben ez áll:
*nat
:PREROUTING ACCEPT [0:0]akkor ez nem nagyon zavar minket, de ez:
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibitedEz már zavar.
Mivel a knockd a INPUT lánc végére adja hozzá a szabályokat, elutasítást fogunk kapni.
Az elutasítás kikapcsolása pedig kinyitja a gépet minden szélnek.
Hogy ne bonyolódjunk bele az iptables konfigurálásába (mint ahogy javasolják) egyszerűbbet csinálunk:
- default a CentOS/Fedora első szabályát („ami nincs megtiltva, az meg van engedve”) megfordítjuk,
- és az utolsó szabályt eltávolítjuk.
Végül a következőnek kell kinéznie:
*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibitedPersze, a DROP helyett lehet REJECT is, de a DROP-al a botoknak könnyebb lesz.
3. Kliens
Ez a rész a legérdekesebb (szerintem), mivel nemcsak bármelyik strandról kell működnie, hanem bármelyik eszközről is.
Alapvetően néhány kliens fel van sorolva a projekten, de ez ugyanabba a kategóriába tartozik, hogy „az interneten mindent meg lehet találni”. Ezért felsorolom azt, ami most éppen a kezeim között van.
A kliens kiválasztásakor ügyelni kell arra, hogy támogassa a csomagok közötti késleltetés opciót. Igen, strand a strandnak nem egyenlő, és a 100 megabit sem garantálja, hogy a csomagok a megfelelő sorrendben érkeznek meg a megfelelő időben ebből a helyről.
És igen — a kliens beállításánál a késleltetést magunknak kell beállítani. Túl sok timeout — a botok támadni fognak, túl kevés — a kliens nem tud lépést tartani. Túl sok késleltetés — a kliens nem tud lépést tartani, vagy ütközés lesz a kérések között (lásd az „csapdákat”), túl kevés — a csomagok elszakadhatnak az interneten.
5s timeout mellett teljesen működőképes megoldás a delay=100..500ms.
Windows
Bár furcsán hangzik, de viszonylag nehéz egy értelmes knock-klienst találni ehhez a platformhoz. Olyat, ami CLI, támogatja a késleltetést, TCP-t és nincs túldíszítve.
Egy lehetőség, hogy kipróbáld . Nyilvánvalóan a Google nem a legjobb barátom.
Linux
Itt minden egyszerű:
dnf install knock -y
knock -d 11111 22222 33333MacOS
A legegyszerűbb, ha a homebrew-ból telepíted a portot:
brew install knock
és készítesz magadnak a szükséges parancsfájlokkal rendelkező bat fájlokat, mint például:
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333iOS
Működő változat — KnockOnD (ingyenes, az áruházból).
Android
„Knock on Ports”. Nem reklám, csak működik. A fejlesztők is elég lelkesek.
P.S. A markdown a Habr-on, természetesen, legyen neki egyszer jó egészsége...
UPD1: hála megtaláltuk Windows-ra.
UPD2: még egy emlékeztetett, hogy nem mindig hasznos új szabályokat tenni az iptables végére. De — ez attól függ.
Forrás: habr.com
