Linux suggerimenti & trucchi: server, apriti

A chi deve garantirsi l'accesso ai propri server da qualsiasi luogo nel mondo tramite SSH/RDP/altro — una piccola RTFM/spiegazione.

Dobbiamo fare a meno di VPN e altri fronzoli, con qualsiasi dispositivo a portata di mano.

E così, senza dover troppo esercitare sul server.

Tutto ciò di cui abbiamo bisogno è — knockd, mani abilissime e 5 minuti di lavoro.

«C'è tutto su Internet», certo (anche su Habr), ma quando si tratta di attuare concretamente — qui inizia...

Ci eserciteremo con l'esempio di Fedora/CentOS, ma non è importante.

Questa guida si adatta sia ai principianti che ai veterani del settore, quindi ci saranno commenti, ma più brevi.

1. Server

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

  • configurarlo (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 «di apertura» è impostata 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 in esecuzione ( /etc/knockd.conf; sostituisci il nome dell'interfaccia a piacere):

    [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

    Tutti i nostri pacchetti dai client vengono monitorati sul server con il comando iptables -S.

2. Guida alle trappole

knockd.conf:

Anche nella documentazione c'è tutto (ma non è certo), tuttavia knockd è piuttosto avaro di messaggi, quindi bisogna prestare molta attenzione.

  • versione
    Nei repository Fedora/CentOS l'ultima versione di knockd disponibile è 0.63. Chi cerca UDP — cercate i pacchetti 0.70.
  • interfaccia
    Nella configurazione predefinita di Fedora/CentOS, questa riga è assente. Aggiungerla manualmente, altrimenti non funzionerà.
  • timeout
    Qui puoi scegliere in base ai tuoi gusti. È necessario che il cliente abbia abbastanza tempo per tutti i pings — e il bot scanner delle porte si è rotto (e scannerizzeranno il 146%).
  • start/stop/command.
    Se il comando è uno — allora command, se sono due — allora start_command+stop_command.
    Se commetti un errore — knockd rimarrà in silenzio, ma non funzionerà.
  • proto
    Teoricamente si può usare UDP. Nella pratica, io ho mescolato tcp e udp, e un cliente sulla spiaggia di Bali è riuscito ad aprire il cancello solo al quinto tentativo. Poiché TCP arrivava quando doveva, ma UDP — non è garantito. Ma questa è una questione di gusti, di nuovo.
  • sequence
    Ci sono insidie implicite nel fatto che le sequenze non devono sovrapporsi... come dire...

Ad esempio, questo:

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

Per il ping 11111 open aspetterà il prossimo ping su 22222. Tuttavia, con questo ping (22222) inizierà a funzionare close e tutto si romperà. Dipende anche dal delay del cliente. Queste sono le cose ©.

iptables

Se in /etc/sysconfig/iptables c'è questo:

*nat
:PREROUTING ACCEPT [0:0]

questo non ci dà particolarmente fastidio, ma questo:

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

Sì, crea 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 non complicarci con iptables su cosa mettere prima (come fanno le persone suggeriscono) faremo più semplice:

  • di default in CentOS/Fedora la prima regola (“ciò che non è vietato è consentito”) la sostituiamo con l'opposto,
  • e l'ultima regola la eliminiamo.

Il risultato dovrebbe essere:

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

Certo, si può fare REJECT al posto di DROP, ma con DROP i bot vivranno meglio.

3. Cliente

Qui le cose diventano davvero interessanti (dal mio punto di vista), poiché bisogna lavorare non solo da qualsiasi spiaggia, ma anche da qualsiasi dispositivo.

In linea di principio, alcuni clienti sono elencati sul sito del progetto, ma questo è della stessa serie di «internet ha tutto». Quindi elencherò ciò che funziona qui ed ora con me.

Quando si sceglie un cliente bisogna assicurarsi che supporti l'opzione delay tra i pacchetti. Sì, ogni spiaggia è diversa e 100 megabit non garantiscono affatto che i pacchetti arrivino nell'ordine corretto e al momento giusto da questo luogo.

E sì — quando si configura il cliente, il delay deve essere impostato manualmente. Troppo timeout — i bot attaccheranno, troppo poco — il cliente non ce la fa. Troppo delay — il cliente non ce la fa o ci sarà conflitto di ping (vedi «insidie»), troppo poco — i pacchetti si perderanno in internet.

Con timeout=5s è un'opzione funzionale delay=100..500ms

Windows

Per quanto possa sembrare strano, trovare un knock client decente per questa piattaforma è piuttosto difficile. Uno che, oltre a essere CLI, supporti delay, TCP — e senza fronzoli.

Come alternativa, si può provare questo qui. Evidentemente Google non è il mio forte.

Linux

Qui è tutto semplice:

dnf install knock -y
knock -d   11111 22222 33333

MacOS

È più facile installare la versione da homebrew:
brew install knock
e creare dei file batch di comandi come:

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

iOS

Un'opzione funzionante è KnockOnD (gratuito, disponibile nello store).

Android

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

P.S. Markdown su Habr, certo, che Dio lo benedica un giorno…

UPD1: grazie a una persona gentile è stato trovato un client funzionante per Windows.
UPD2: un'altra persona gentile mi ha ricordato che aggiungere nuove regole in fondo a 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