Linux tippek és trükkök: szerver, nyissa meg

Azoknak, akiknek biztosítaniuk kell maguknak, szeretteiknek a hozzáférést a szervereikhez a világ bármely pontjáról SSH/RDP/egyéb, egy kis RTFM/spur segítségével.

A VPN-t és más csengőket és sípokat nélkülöznünk kell minden kéznél lévő eszközről.

És hogy ne kelljen túl sokat tornáznia a szerverrel.

Ehhez csak annyi kell kopogtatott, egyenes karok és 5 perc munka.

„Minden megtalálható az interneten” természetesen (még a tovább is Habré), de ha egy konkrét megvalósításról van szó, akkor itt kezdődik...

Gyakoroljuk a Fedora/CentOS használatát példaként, de ez nem számít.

A sarkantyú kezdőknek és jártasoknak is megfelelő ebben a témában, szóval lesznek kommentek, de azok rövidebbek lesznek.

1. Szerver

  • knock-szerver telepítése:
    yum/dnf install knock-server

  • állítsa be (például ssh-n) - /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 1 óra elteltével automatikusan záródik. Sose tudhatod...

  • /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áadhat RDP-t a benne pörgő virtuális Windows Serverhez (/etc/knockd.conf; cserélje ki a felület nevét ízlésének megfelelően):

    [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

    A paranccsal nyomon követjük a klienstől érkező összes rúgásunkat a szerveren iptables -S.

2. Útmutató a gereblyékhez

knockd.conf:

A mana is tartalmaz mindent (de ez pontatlan), de knockd egy barát, aki elég fukar az üzenetekkel, ezért nagyon kell vigyázni.

  • változat
    A Fedora/CentOS tárolókban a mai legfrissebb kopogtatás 0.63. Aki UDP-t akar, keressen 0.70-es csomagokat.
  • felület
    Az alapértelmezett Fedora/CentOS konfigurációban ez a sor nincs. Add hozzá kézzel, különben nem fog működni.
  • timeout
    Itt ízlése szerint választhat. Szükséges, hogy a kliensnek legyen elég ideje minden rúgásra - és a portszkenner bot elromlik (és 146% -a szkennel).
  • start/stop/parancs.
    Ha egy parancs van, akkor parancs, ha kettő, akkor start_command+stop_command.
    Ha hibázik, a knockd néma marad, de nem működik.
  • ezért
    Elméletileg az UDP használható. Gyakorlatilag kevertem a tcp-t és az udp-t, és a bali strandról érkező kliens csak ötödik alkalommal tudta kinyitni a kaput. Mert a TCP szükség esetén érkezett, de az UDP nem tény. De ez megint ízlés dolga.
  • sorozat
    Az implicit rake az, hogy a sorozatok nem metszhetik egymást... hogy is mondjam...

Például ezt:

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

11111-es rúgással nyitva 22222-nél várja a következő rúgást. Azonban ez a (22222) rúgás után elkezd működni közel és minden összetörik. Ez függ az ügyfél késésétől is. Ilyen dolgok ©.

iptables

Ha az /etc/sysconfig/iptables fájlban ez a következő:

*nat
:PREROUTING ACCEPT [0:0]

Ez minket nem igazán zavar, szóval itt van:

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

Ez zavar.

Mivel a knockd szabályokat ad az INPUT lánc végére, elutasítást kapunk.

Ennek az elutasításnak a kikapcsolása pedig azt jelenti, hogy az autót minden szélnek kinyitjuk.

Hogy ne vesszen el az iptables-ban, hogy mit kell beszúrni mi elé (például így emberek javasoljuk) tegyük egyszerűbbé:

  • alapértelmezett a CentOS/Fedora rendszeren első a szabály („ami nem tilos, az megengedett”) helyébe az ellenkezője lép,
  • és eltávolítjuk az utolsó szabályt.

Az eredmény a következő legyen:

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

Természetesen megteheti a REJECT funkciót a DROP helyett, de a DROP funkcióval az élet szórakoztatóbb lesz a robotok számára.

3. Ügyfél

Ez a hely a legérdekesebb (az én szemszögemből), mivel nemcsak bármely strandról, hanem bármilyen eszközről is kell dolgoznia.

Elvileg számos ügyfél szerepel a listán Online projekt, de ez ugyanabból a sorozatból származik, „minden az interneten van”. Ezért felsorolom, hogy mi működik a kezem ügyében itt és most.

A kliens kiválasztásakor meg kell győződnie arról, hogy támogatja-e a csomagok közötti késleltetési lehetőséget. Igen, vannak különbségek a strandok között, és a 100 megabites soha nem garantálja, hogy a csomagok a megfelelő sorrendben, a megfelelő időben érkeznek egy adott helyről.

És igen, az ügyfél beállításakor magának kell kiválasztania a késleltetést. Túl sok időtúllépés – a robotok támadnak, túl kevés – az ügyfélnek nem lesz ideje. Túl sok késés – a kliens nem ér oda időben, vagy idióták konfliktusa lesz (lásd „rake”), túl kevés – a csomagok elvesznek az interneten.

Timeout=5s esetén a késleltetés=100..500ms teljesen működőképes opció

Windows

Bármilyen viccesen is hangzik, a Google számára nem triviális, hogy egy egyértelmű kopogtatóprogram ehhez a platformhoz. Olyan, hogy a CLI támogatja a késleltetést, a TCP-t - és meghajlás nélkül.

Opcióként megpróbálhatja ez. Úgy tűnik, az én Google-m nem egy torta.

Linux

Itt minden egyszerű:

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

MacOS

A legegyszerűbb módja a port telepítése a homebrew-ból:
brew install knock
és rajzolja meg a szükséges kötegfájlokat az olyan parancsokhoz, mint:

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

iOS

Működő opció a KnockOnD (ingyenes, a boltból).

Android

"Knock on Ports" Nem reklám, de működik. És a fejlesztők nagyon érzékenyek.

PS leárazás Habrén, persze, Isten áldja meg egyszer...

UPD1: köszönet egy jó embernek megtalált dolgozó ügyfél Windows alatt.
UPD2: Másik jó ember emlékeztetett arra, hogy az új szabályokat az iptables végére tenni nem mindig hasznos. De - attól függ.

Forrás: will.com

Hozzászólás