Consigli e trucchi per Linux: server, apri

Per coloro che hanno bisogno di fornire a se stessi e ai propri cari l'accesso ai propri server da qualsiasi parte del mondo tramite SSH/RDP/altro, un piccolo RTFM/spur.

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

E così non devi esercitarti troppo con il server.

Tutto ciò di cui hai bisogno è bussò, braccia tese e 5 minuti di lavoro.

“Tutto è su Internet”, ovviamente (anche su Habré), ma quando si tratta di un'implementazione specifica, è qui che inizia...

Faremo pratica usando Fedora/CentOS come esempio, ma non importa.

Lo sperone è adatto sia ai principianti che agli esperti in materia, quindi ci saranno commenti, ma saranno più brevi.

1. Server

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

  • configuralo (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
    ...

  • inoltrare:

    service iptables restart
    service knockd start

  • puoi aggiungere RDP al server Windows virtuale che gira all'interno (/etc/knockd.conf; sostituisci il nome dell'interfaccia in base ai tuoi gusti):

    [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 nostri calci dal client sul server con il comando iptables -S.

2. Guida ai rastrelli

knockd.conf:

Anche il mana contiene tutto (ma questo è impreciso), ma knockd è un amico piuttosto avaro di messaggi, quindi bisogna stare molto attenti.

  • versione
    Nei repository Fedora/CentOS, l'ultimo knockd di oggi è 0.63. Chi vuole UDP: cerca i pacchetti 0.70.
  • interfaccia
    Nella configurazione predefinita di Fedora/CentOS questa riga no. Aggiungi con le mani, altrimenti non funzionerà.
  • timeout
    Qui potete scegliere in base ai vostri gusti. È necessario che il client abbia abbastanza tempo per tutti i kick e il bot dello scanner delle porte si romperà (e il 146% eseguirà la scansione).
  • avvio/arresto/comando.
    Se è presente un comando, allora comando, se ce ne sono due, allora start_command+stop_command.
    Se commetti un errore, knockd rimarrà silenzioso, ma non funzionerà.
  • proto
    Teoricamente è possibile utilizzare UDP. In pratica ho mischiato tcp e udp e il client della spiaggia di Bali è riuscito ad aprire il cancello solo la quinta volta. Perché TCP è arrivato quando necessario, ma UDP non è un dato di fatto. Ma questa è una questione di gusti, ancora una volta.
  • sequenza
    Il vantaggio implicito è che le sequenze non si intersechino... come dire...

Ad esempio, questo:

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

Con il calcio 11111 aprire aspetterà il prossimo kick a 22222. Tuttavia, dopo questo kick (22222) inizierà a funzionare close e tutto si romperà. Ciò dipende anche dal ritardo del cliente. Cose del genere ©.

iptables

Se in /etc/sysconfig/iptables questo è:

*nat
:PREROUTING ACCEPT [0:0]

Non ci disturba davvero, quindi eccolo qui:

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

Interferisce.

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

E spegnere questo rifiuto significa aprire l’auto a tutti i venti.

Per non perdersi in iptables cosa inserire prima di cosa (come questo persone suggerire) rendiamolo più semplice:

  • predefinito su CentOS/Fedora prima la regola (“ciò che non è vietato è consentito”) sarà sostituita dalla regola opposta,
  • e rimuoviamo l'ultima regola.

Il risultato dovrebbe essere:

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

Ovviamente puoi fare REJECT invece di DROP, ma con DROP la vita sarà più divertente per i robot.

3. Cliente

Questo posto è il più interessante (dal mio punto di vista), poiché devi lavorare non solo da qualsiasi spiaggia, ma anche da qualsiasi dispositivo.

In linea di principio, sono elencati numerosi clienti sito web progetto, ma questo è della stessa serie "tutto è su Internet". Pertanto, elencherò ciò che funziona a portata di mano qui e ora.

Quando si sceglie un client, è necessario assicurarsi che supporti l'opzione di ritardo tra i pacchetti. Sì, ci sono differenze tra le spiagge e 100 megabit non garantiscono mai che i pacchetti arrivino nell'ordine giusto al momento giusto da una determinata località.

E sì, quando imposti un client, devi selezionare tu stesso il ritardo. Troppo timeout: i robot attaccheranno, troppo poco: il client non avrà tempo. Troppo ritardo - il client non arriverà in tempo o ci sarà un conflitto di idioti (vedi "rakes"), troppo poco - i pacchetti si perderanno su Internet.

Con timeout=5s, ritardo=100..500ms è un'opzione completamente funzionante

Windows

Non importa quanto possa sembrare divertente, non è affatto banale trovare in Google un chiaro client per questa piattaforma. In modo tale che la CLI supporti il ​​ritardo, TCP e senza archi.

Come opzione puoi provare questo è qui. A quanto pare il mio Google non è una torta.

Linux

Tutto è semplice qui:

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

MacOS

Il modo più semplice è installare il port da homebrew:
brew install knock
e disegna i file batch necessari per comandi come:

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

iOS

Un'opzione funzionante è KnockOnD (gratuito, dal negozio).

Android

"Bussa ai porti" Non è pubblicità, ma funziona e basta. E gli sviluppatori sono abbastanza reattivi.

PS ribasso su Habré, ovviamente, Dio lo benedirà un giorno...

UPD1: grazie a ad una brava persona trovato cliente funzionante sotto Windows.
UPD2: Un altro brava persona mi ha ricordato che mettere nuove regole alla fine di iptables non è sempre utile. Ma dipende.

Fonte: habr.com

Aggiungi un commento