Linux tips och tricks: server, öppna upp

För de som behöver förse sig själva, sina nära och kära, med tillgång till sina servrar från var som helst i världen via SSH/RDP/annan, en liten RTFM/spur.

Vi måste klara oss utan VPN och andra bells and whistles, från vilken enhet som helst.

Och så att du inte behöver träna för mycket med servern.

Allt du behöver för detta är knockd, raka armar och 5 minuters arbete.

"Allt finns på Internet," naturligtvis (även på Habré), men när det kommer till en specifik implementering är det här det börjar...

Vi kommer att träna på att använda Fedora/CentOS som exempel, men det spelar ingen roll.

Sporen passar både nybörjare och experter i denna fråga, så det kommer kommentarer, men de blir kortare.

1. Server

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

  • konfigurera det (till exempel på 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

    "Öppningsdelen" är inställd på att stängas automatiskt efter 1 timme. Du vet aldrig...

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

  • fram:

    service iptables restart
    service knockd start

  • du kan lägga till RDP till den virtuella Windows-servern som snurrar inuti (/etc/knockd.conf; ersätt gränssnittsnamnet för att passa din smak):

    [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

    Vi spårar alla våra kickar från klienten på servern med kommandot iptables -S.

2. Guide till krattor

knockd.conf:

Manan innehåller också allt (men detta är felaktigt), men knockd är en vän som är ganska snål med meddelanden, så du måste vara mycket försiktig.

  • version
    I Fedora/CentOS-förvaren är den senaste knockd för idag 0.63. Vem vill ha UDP - leta efter 0.70 paket.
  • gränssnitt
    I standard Fedora/CentOS-konfigurationen denna rad ingen. Lägg till med händerna, annars fungerar det inte.
  • timeout
    Här kan du välja efter din smak. Det är nödvändigt att klienten har tillräckligt med tid för alla kickar - och portscannerboten kommer att gå sönder (och 146% kommer att skanna).
  • start/stopp/kommando.
    Om det finns ett kommando, kommando, om det finns två, start_command+stop_command.
    Om du gör ett misstag kommer knockd att förbli tyst, men kommer inte att fungera.
  • därför
    Teoretiskt kan UDP användas. I praktiken blandade jag tcp och udp, och klienten från stranden på Bali kunde öppna porten bara femte gången. Eftersom TCP kom när det behövdes, men UDP är inte ett faktum. Men det här är en smaksak, igen.
  • sekvens
    Den implicita raken är att sekvenserna inte ska skära varandra... hur ska man uttrycka det...

Till exempel detta:

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

Med spark 11111 öppet väntar på nästa kick vid 22222. Men efter denna (22222) kick kommer den att börja fungera stäng och allt kommer att gå sönder. Detta beror också på kundens försening. Sådana saker ©.

iptables

Om i /etc/sysconfig/iptables är detta:

*nat
:PREROUTING ACCEPT [0:0]

Det stör oss inte riktigt, så här är det:

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

Det stör.

Eftersom knockd lägger till regler i slutet av INPUT-kedjan kommer vi att få avslag.

Och att stänga av detta avvisande innebär att bilen öppnas för alla vindar.

För att inte gå vilse i iptables vad ska man infoga före vad (så här människor föreslå) låt oss göra det enklare:

  • standard på CentOS/Fedora först regeln ("det som inte är förbjudet är tillåtet") kommer att ersättas med det motsatta,
  • och vi tar bort den sista regeln.

Resultatet bör bli:

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

Du kan naturligtvis göra REJECT istället för DROP, men med DROP blir livet roligare för bots.

3. Klient

Denna plats är den mest intressanta (ur min synvinkel), eftersom du behöver arbeta inte bara från vilken strand som helst, utan också från vilken enhet som helst.

I princip finns ett antal kunder listade på Online projekt, men det här är från samma serie "allt finns på Internet." Därför kommer jag att lista vad som fungerar till hands här och nu.

När du väljer en klient måste du se till att den stöder fördröjningsalternativet mellan paket. Ja, det finns skillnader mellan stränder och 100 megabit garanterar aldrig att paket kommer fram i rätt ordning vid rätt tidpunkt från en given plats.

Och ja, när du skapar en klient måste du välja fördröjningen själv. För mycket timeout - bots kommer att attackera, för lite - klienten kommer inte att ha tid. För mycket fördröjning - klienten kommer inte fram i tid eller det kommer att uppstå en konflikt mellan idioter (se "rakes"), för lite - paketen kommer att gå vilse på Internet.

Med timeout=5s är delay=100..500ms ett helt fungerande alternativ

Windows

Oavsett hur roligt det låter är det ganska otrivialt att Google en tydlig knock-klient för den här plattformen. Sådan att CLI stöder fördröjning, TCP - och utan bågar.

Som ett alternativ kan du prova detta är. Tydligen är min Google inte en tårta.

Linux

Det är enkelt här:

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

MacOS

Det enklaste sättet är att installera porten från homebrew:
brew install knock
och rita de nödvändiga batchfilerna för kommandon som:

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

iOS

Ett fungerande alternativ är KnockOnD (gratis, från butiken).

Android

"Knacka på hamnar" Inte reklam, men det fungerar bara. Och utvecklarna är ganska lyhörda.

PS nedgång på Habré, naturligtvis, Gud välsigne honom en dag...

UPD1: tack vare till en bra person hittades arbetande klient under Windows.
UPD2: En till bra man påminde mig om att det inte alltid är användbart att sätta nya regler i slutet av iptables. Men – det beror på.

Källa: will.com

Lägg en kommentar