Consigli e trucchi per Linux: server, apriti

Chi ha bisogno di accedere ai propri server da qualsiasi parte del mondo via SSH/RDP/altro — un piccolo RTFM/aiuto.

Dobbiamo evitare VPN e altre complicazioni, da qualsiasi dispositivo a portata di mano.

E in modo che non sia troppo complicato con il server.

Tutto ciò che serve è — knockd, mani abili e 5 minuti di lavoro.

«Su internet c'è tutto», certo (anche su Habr), ma quando si arriva alla realizzazione concreta — qui comincia...

Ci eserciteremo con Fedora/CentOS, ma non è importante.

L'aiuto è adatto sia ai principianti che ai veterani, quindi ci saranno commenti, ma più brevi.

1. Server

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

  • configuriamolo (ad esempio su 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

    La parte «aperta» è configurata per chiudersi automaticamente dopo 1 ora. Non si sa mai…

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

  • avanti:

    service iptables restart
    service knockd start

  • puoi aggiungere RDP su un Windows Server virtuale (/etc/knockd.conf; sostituisci il nome dell'interfaccia come preferisci):

    [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

    Teniamo traccia di tutti i ping dal cliente sul server con il comando iptables -S.

2. Guida agli errori

knockd.conf:

Ci sono anche informazioni nella documentazione (ma non è preciso), tuttavia knockd è piuttosto avaro nelle comunicazioni, quindi è necessario prestare molta attenzione.

  • versione
    Nelle repository di Fedora/CentOS, l'ultima versione di knockd è 0.63. Se cerchi UDP, cerca i pacchetti 0.70.
  • interfaccia
    Nella configurazione predefinita di Fedora/CentOS, questa riga è assente. Aggiungere manualmente, altrimenti non funzionerà.
  • timeout
    Qui puoi scegliere secondo il tuo gusto. È importante che il cliente abbia tempo per tutti gli accessi — e il bot di scansione delle porte si sia bloccato (e scansioneranno il 146%).
  • start/stop/comando.
    Se c'è un solo comando — allora comando, se ce ne sono due — allora start_command+stop_command.
    Se sbagli, knockd non dirà nulla, ma non funzionerà.
  • proto
    Teoricamente è possibile usare UDP. Nella pratica, avevo mescolato tcp e udp, e il cliente dalla spiaggia di Bali è riuscito ad aprire il cancello solo al quinto tentativo. Perché TCP è arrivato quando doveva, ma UDP — non è garantito. Ma questo è soggettivo, di nuovo.
  • sequence
    I rischi impliciti sono che le sequenze non devono sovrapporsi... come spiegarlo...

Ad esempio, così:

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

Per il comando 11111 open aspettare il prossimo accesso su 22222. Tuttavia, con questo (22222) accesso inizierà a funzionare close e tutto si guasterà. Questo dipende anche dal delay del cliente. È così ©.

iptables

Se in /etc/sysconfig/iptables abbiamo questo:

*nat
:PREROUTING ACCEPT [0:0]

non ci dà fastidio, allora abbiamo questo:

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

In effetti dà fastidio.

Poiché knockd aggiunge regole alla fine della catena INPUT, otterremo un rifiuto.

Disattivare questo rifiuto significa aprire la macchina a tutti i venti.

Per evitare complicazioni con iptables riguardo a cosa inserire e dove (come alcuni suggeriscono), rendiamolo più semplice: la regola di default

  • in CentOS/Fedora la prima regola ("ciò che non è vietato è consentito") la sostituiamo con l'opposto, e rimuoviamo l'ultima regola.
  • In definitiva, dovrebbe risultare:

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

Naturalmente, al posto di DROP si può impostare REJECT, ma con DROP i bot si troveranno meglio.

3. Client

Qui arriva la parte più interessante (dal mio punto di vista), poiché si deve lavorare non solo da qualsiasi spiaggia, ma anche da qualsiasi dispositivo.

In linea di massima, diversi client sono elencati nel

progetto, ma fanno parte della stessa categoria di "c'è tutto su internet". Pertanto, elencherò ciò che qui e ora funziona a mia disposizione. sito Quando si sceglie un client, è necessario assicurarsi che supporti l'opzione di delay tra i pacchetti. Sì, una spiaggia è diversa dall'altra e 100 megabit non garantiscono che i pacchetti arrivino nell'ordine e nel tempo richiesti da quel posto.

E sì—nella configurazione del client, il delay deve essere scelto in modo personalizzato. Troppo timeout — i bot attaccheranno; troppo poco — il client non ce la farà. Troppo delay — il client non ce la farà o ci saranno conflitti (vedi "problemi"), troppo poco — i pacchetti si smarriranno in internet.

И да — при настройке клиента delay надо подбирать самостоятельно. Много timeout — боты нападут, мало — клиент не успеет. Много delay — клиент не успеет или будет конфликт простуков (см. «грабли»), мало — пакеты перезаблудятся в интернетах.

Con timeout=5s è davvero una valida opzione delay=100..500ms

Windows

Per quanto possa suonare strano, trovare un knock client decente per questa piattaforma è piuttosto complicato. Uno che supporti CLI, delay, TCP e senza fronzoli.

Come opzione, si può provare questo. Evidentemente Google non è molto utile.

Linux

Qui è tutto semplice:

dnf install knock -y
knock -d   11111 22222 33333

MacOS

È più facile installare il pacchetto da homebrew:
brew install knock
e crearti i comandi batch necessari:

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

iOS

Una opzione funzionante è KnockOnD (gratuito, dal negozio).

Android

«Knock on Ports». Non è pubblicità, semplicemente funziona. E gli sviluppatori sono abbastanza reattivi.

P.S. il markdown su Habr, beh, gli auguro davvero buona fortuna un giorno...

UPD1: grazie a una buona persona è stato trovato un client funzionante per Windows.
UPD2: un'altra buona persona ha ricordato che aggiungere nuove regole alla fine di iptables non è sempre utile. Ma — dipende.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster