Linux tips & tricks: server, öppna dig

För dem som vill ge sig sjĂ€lva, det Ă€lskade, tillgĂ„ng till sina servrar frĂ„n vilken plats som helst i vĂ€rlden via SSH/RDP/annat — en liten RTFM/guide.

Vi behöver klara oss utan VPN och andra avancerade lösningar, med vilken apparat som helst i handen.

Och sÄ att man inte behöver krÄngla för mycket med servern.

Allt som behövs för detta Ă€r — knockd, skickliga hĂ€nder och 5 minuters arbete.

"Det finns allt pĂ„ internet", visst (Ă€ven pĂ„ HabrĂ©), men nĂ€r det kommer till den konkreta implementeringen — dĂ„ börjar problemen...

Vi kommer att öva med exempel frÄn Fedora/CentOS, men det spelar ingen roll.

Guiden passar bÄde nybörjare och experter, sÄ det kommer att finnas kommentarer, men kortare.

1. Server

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

  • konfigurera den (till exempel för 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

    "Öppning"-delen Ă€r instĂ€lld pĂ„ automatisk stĂ€ngning efter 1 timme. Man 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Ă„t:

    service iptables restart
    service knockd start

  • man kan lĂ€gga till RDP pĂ„ en roterande virtuell Windows Server (/etc/knockd.conf; sĂ€tt in grĂ€nssnittets namn efter eget val):

    [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

    Alla vÄra klagomÄl frÄn kunden övervakas pÄ servern med kommandot iptables -S.

2. Resa genom fÀllorna

knockd.conf:

Det finns ocksÄ allt i manualerna (men det Àr inte sÀkert), men knockd Àr en person som Àr ganska snÄl med meddelanden, sÄ man mÄste vara vÀldigt försiktig.

  • version
    I Fedora/CentOS-repositorierna Ă€r den senaste knockd versionen idag — 0.63. Den som vill ha UDP — leta efter paket 0.70.
  • interface
    I den standardkonfigurationen Fedora/CentOS finns den hÀr raden inte. LÀgga till för hand, annars kommer det inte att fungera.
  • timeout
    HĂ€r kan man vĂ€lja efter smak. Det mĂ„ste finnas tid för klienten att göra alla pings — och botportscannern ska förhindras (och de kommer att scanna 146%).
  • start/stop/command.
    Om det Àr ett kommando sÄ Àr det command, om det Àr tvÄ sÄ Àr det start_command+stop_command.
    Om du gör ett misstag kommer knockd att vara tyst, men det kommer inte att fungera.
  • proto
    Teoretiskt sett kan man anvÀnda UDP. I praktiken blandade jag tcp och udp, och klienten pÄ stranden i Bali kunde öppna sin grind först efter femte försöket. Eftersom TCP kom fram nÀr det behövdes, men UDP Àr osÀkert. Men det Àr en smaksak ocksÄ.
  • sekvens
    Det finns dolda hinder, i och med att sekvenserna inte fÄr överlappa... hur ska man sÀga...

Till exempel sÄ hÀr:

öppen: 11111,22222,33333
stÀng: 22222,11111,33333

För spark 11111 open kommer det att vÀnta pÄ nÀsta spark pÄ 22222. Men med denna (22222) spark börjar det att fungera stÀng och allt kommer att gÄ sönder. Det beror Àven pÄ klientens fördröjning. SÄ hÀr Àr det ©.

iptables

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

*nat
:PREROUTING ACCEPT [0:0]

stör oss inte speciellt, sÄ Àr detta:

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

Stör det verkligen.

Eftersom knockd lÀgger till regler i slutet av INPUT-kedjan, kommer vi att fÄ reject.

Att stÀnga av detta reject Àr som att öppna maskinen för alla vindar.

För att inte komplicera iptables med vad som ska sÀttas före vad (som folk föreslÄr) gör vi det enklare:

  • standard i CentOS/Fedora den första regeln ("vad som inte Ă€r förbjudet Ă€r tillĂ„tet") byter vi mot det motsatta,
  • och den sista regeln tar vi bort.

I slutÀndan bör det se ut sÄ hÀr:

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

Man kan förstÄs göra REJECT istÀllet för DROP, men med DROP fÄr botarna det enklare.

3. Klient

HÀr blir det riktigt intressant (enligt min Äsikt), eftersom man mÄste kunna arbeta frÄn vilken strand som helst, och frÄn vilken enhet som helst.

I allmÀnhet finns en rad kunder nÀmnda pÄ webbplats projektet, men det Àr samma gamla historia "det finns allt pÄ internet". DÀrför nÀmner jag det som fungerar hÀr och nu.

NÀr man vÀljer klient mÄste man se till att den stöder fördröjningsalternativet mellan paketen. Ja, strand Àr inte alltid strand och 100 megabit garanterar inget nÀr det kommer till att paketen anlÀnder i rÀtt ordning vid rÀtt tidpunkt frÄn den hÀr platsen.

Och ja – nĂ€r man konfigurerar klienten mĂ„ste man justera fördröjningen sjĂ€lv. För mycket timeout – botarna kommer att attackera, för lite – klienten hinner inte. För mycket fördröjning – klienten hinner inte eller det blir konflikt vid knackanden (se "hinder"), för lite – paketen gĂ„r vilse pĂ„ nĂ€tet.

Med timeout=5s Àr delay=100..500ms en helt fungerande lösning.

Windows

Hur konstigt det Ă€n lĂ„ter sĂ„ Ă€r det ganska komplicerat att hitta en begriplig knock-klient för denna plattform. En som har CLI, stöder fördröjning, TCP – och utan krusiduller.

Ett alternativ kan vara att prova det hÀr. Tydligen Àr min Google inte bra.

Linux

HÀr Àr det enkelt:

dnf install knock -y
knock -d   11111 22222 33333

MacOS

Det enklaste sÀttet Àr att installera porten frÄn homebrew:
brew install knock
och rita upp de nödvÀndiga batchfilkommandona:

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

iOS

En fungerande variant — KnockOnD (gratis, frĂ„n butiken).

Android

«Knock on Ports». Ingen reklam, det fungerar bara. Och utvecklarna Àr tillrÀckligt responsiva.

P.S. Markdown pÄ Habré, naturligtvis, mÄ Gud bevara det nÄgon gÄng...

UPD1: tack vare en bra mÀnniska finns det en fungerande klient för Windows.
UPD2: ytterligare en bra mĂ€nniska pĂ„minde om att det inte alltid Ă€r bra att sĂ€tta nya regler lĂ€ngst ner i iptables. Men — det beror pĂ„.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster