Linux nasveti & triki: strežnik, odpri se

Tistim, ki želijo dostopati do svojih strežnikov od kjerkoli po svetu prek SSH/RDP/drugo – mala RTFM/spominska karta.

Potrebujemo, da se obrnemo brez VPN in drugih zapletov, z kateregakoli napravo pri roki.

In tako, da se s strežnikom ne bi preveč trudili.

Vse, kar potrebujete, je - knockd, spretne roke in 5 minut dela.

„Na internetu je vse“, seveda (tudi na Habrju), a ko pride do konkretne izvedbe – tukaj se začne …

Bomo vadili na primerku Fedora/CentOS, a to ni pomembno.

Spomin se prileže tako novincem kot veteranom, zato bodo komentarski pripisi, a bolj kratki.

1. Strežnik

  • namestite knock-server:
    yum/dnf install knock-server

  • ga nastavite (na primer 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

    „Odprta“ del nastavitve je nastavljena na samodejno zapiranje po 1 uri. Nikoli ne veš…

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

  • naprej:

    service iptables restart
    service knockd start

  • lahko dodate RDP na virtualni Windows Server ( /etc/knockd.conf; vstavite ime vmesnika po želji):

    [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

    Vse naše ukaze od stranke spremljamo na strežniku z ukazom iptables -S.

2. Vodnik po težavah

knockd.conf:

V dokumentaciji je tudi vse (a to ni nujno), vendar je knockd precej skop z sporočili, zato morate biti zelo pozorni.

  • različica
    V repozitorijih Fedora/CentOS je zadnji knockd danes – 0.63. Ki želi UDP – naj išče pakete 0.70.
  • vmesnik
    V privzeti konfiguraciji Fedora/CentOS ta vrstica nije dostupno. Dodajte ročno, sicer ne bo delovalo.
  • časovni izostanek
    Tukaj prilagodite po okusu. Pomembno je, da ima klient dovolj časa za vse ukaze – in da se bot-skener portov ustavi (in skeniral bo 146%).
  • start/stop/command.
    Če ekipa deluje sama – uporabite command, če delujeta dve – then start_command+stop_command.
    Če naredite napako – knockd bo tiho, a ne bo deloval.
  • proto
    Teoretično je mogoče uporabiti UDP. V praksi sem zamešal tcp in udp, stranka na plaži v Bali pa je lahko odprla vrata šele petič. Ker so TCP paketi prispeli, UDP pa je vprašanje. A to je stvar okusa, ponovno.
  • zaporedje
    Implicitni pasti so, da se zaporedja ne smejo prekrivati… kako bi to povedal…

Na primer, takole:

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

Po piku 11111 open bo čakal naslednji pik na 22222. Vendar pri tem (22222) piku se bo začelo delovati zapri in vse se bo pokvarilo. To je odvisno tudi od zakasnitve stranke. Taka so dejstva ©.

iptables

Če je v /etc/sysconfig/iptables tole:

*nat
:PREROUTING ACCEPT [0:0]

nas prav posebno ne ovira, potem pa tole:

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

Pa ovira.

Ker knockd dodaja pravila na konec INPUT verige, bomo dobili zavrnitev.

In onemogočiti to zavrnitev – to pomeni odpreti napravo vsem vetrovom.

Da se ne bi zapletali v iptables, kam vse kaj postaviti (kot predlagajo ljudje ), bomo preprostejši:

  • privzeto v CentOS/Fedora prvo pravilo (»kar ni prepovedano, je dovoljeno«) zamenjamo s nasprotnim,
  • zadnje pravilo pa odstranimo.

Na koncu bi moralo izgledati:

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

Seveda lahko namesto DROP uporabite REJECT, a s DROP bodo botom lažje.

3. Stranka

Na tem mestu je najbolj zanimivo (z mojega vidika), ker je treba delati ne samo z vsake plaže, ampak tudi z vsake naprave.

Načeloma je nekaj strank naštetih na website projektu, vendar to spada v isto kategorijo kot »na internetu je vse«. Zato naštevam to, kar trenutno deluje pri meni.

Pri izbiri stranke je treba poskrbeti, da podpira možnost zakasnitve med paketi. Da, plaža plaži ni enaka in 100 megabitov ne zagotavlja, da bodo paketi prispeli v pravilnem vrstnem redu ob pravem času z določenega mesta.

In ja – pri nastavitev stranke je treba zakasnitev prilagoditi samostojno. Prevelika zakasnitev – boti napadejo, premajhna – stranka ne bo zmogla. Prevelika zakasnitev – stranka ne bo zmogla ali bo prišlo do spora (glej »pasti«), premajhna – paketi se lahko izgubijo v internetih.

Pri timeout=5s je povsem delujoča možnost delay=100..500ms

Windows

Kar se morda zdi smešno, toda najti delujoč knock-klijent za to platformo je precej zapleteno. Tak, da podpira CLI, zakasnitev, TCP – in brez okraskov.

Kot možnost lahko poskusite tole pač. Očitno moj Google ni preveč dober.

Linux

Tukaj je vse preprosto:

dnf install knock -y
knock -d   11111 22222 33333

MacOS

Najlažje je namestiti paket iz homebrew:
brew install knock
in si narisati potrebne skripte, kot so:

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

iOS

Delujoča možnost — KnockOnD (brezplačno, iz trgovine).

Android

„Knock on Ports“. Ni oglas, ampak pač deluje. In razvijalci so dovolj odzivni.

P.S. markdown na Habru, no, naj mu bo zdravje do konca…

UPD1: zahvaljujoč dobremu človeku je bil najden delujoč klient za Windows.
UPD2: še en dobro človek me je spomnil, da ni vedno koristno dodajati novih pravil na konec iptables. Ampak — odvisno.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster