Linux tippek & trükkök: szerver, nyisd meg

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 knockd, ügyes kezek és 5 perc munka.

"Az interneten mindent megtalálsz" — természetesen (még a Habrán), 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-server

  • beá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 start

  • hozzá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.2

    Minden ü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,33333

Az 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-prohibited

Ez 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 az emberek 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-prohibited

Persze, 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 weboldalon 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 ez itt van. Nyilvánvalóan a Google nem a legjobb barátom.

Linux

Itt minden egyszerű:

dnf install knock -y
knock -d   11111 22222 33333

MacOS

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 33333

iOS

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 egy jó embernek megtaláltuk a működő klienst Windows-ra.
UPD2: még egy jó ember 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

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster