Linuxi näpunäited ja nipid: server, avage

Neile, kes peavad pakkuma endale, oma lähedastele juurdepääsu oma serveritele kõikjal maailmas SSH/RDP/muu kaudu, väike RTFM/spur.

Peame hakkama saama ilma VPN-i ja muude kellade ja viledeta mis tahes käepärast olevast seadmest.

Ja et te ei peaks serveriga liiga palju treenima.

Kõik, mida selleks vaja on, on koputasin, sirged käed ja 5 minutit tööd.

"Kõik on Internetis" muidugi (isegi Habré), aga mis puudutab konkreetset rakendust, siis siit see algab...

Harjutame Fedora/CentOS-i kasutamist näitena, kuid see ei oma tähtsust.

Spur sobib nii algajatele kui ka asjatundjatele, seega kommentaare tuleb, aga need on lühemad.

1. Server

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

  • seadistage see (näiteks ssh-s) - /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

    "Avamise" osa on seatud 1 tunni pärast automaatselt sulguma. Ei või iial teada...

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

  • edasi:

    service iptables restart
    service knockd start

  • saate lisada RDP-d sees pöörlevale virtuaalsele Windows Serverile (/etc/knockd.conf; asendage liidese nimi vastavalt oma maitsele):

    [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

    Jälgime kõiki oma kliendilt saadud lööke serveris käsuga iptables -S.

2. Rehade juhend

knockd.conf:

Mana sisaldab ka kõike (aga see on ebatäpne), kuid knockd on sõber, kes on sõnumitega üsna ihne, seega peate olema väga ettevaatlik.

  • versioon
    Fedora/CentOS-i hoidlates on tänane viimane koputus 0.63. Kes tahab UDP-d - otsige 0.70 pakette.
  • liides
    Fedora/CentOS-i vaikekonfiguratsioonis see rida ei. Lisage oma kätega, muidu see ei tööta.
  • timeout
    Siin saate valida vastavalt oma maitsele. Vajalik on, et kliendil oleks piisavalt aega kõikideks löökideks – ja portskanneri bot läheb katki (ja 146% skannib).
  • start/stopp/käsk.
    Kui on üks käsk, siis käsk, kui on kaks, siis start_command+stop_command.
    Kui teete vea, jääb knockd vaikima, kuid ei tööta.
  • proto
    Teoreetiliselt saab UDP-d kasutada. Praktikas segasin tcp ja udp ning Bali rannast pärit klient sai värava avada alles viiendal korral. Sest TCP saabus siis, kui vaja, aga UDP pole fakt. Aga see on jällegi maitse asi.
  • jada
    Kaudne reha on see, et jadad ei tohiks ristuda... kuidas seda öelda...

Näiteks see:

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

Löögiga 11111 avatud ootab järgmist lööki kell 22222. Kuid peale seda (22222) lööki hakkab see tööle lähedal ja kõik läheb katki. See sõltub ka kliendi hilinemisest. Sellised asjad ©.

iptables

Kui failis /etc/sysconfig/iptables on see:

*nat
:PREROUTING ACCEPT [0:0]

See meid tegelikult ei häiri, nii et siin see on:

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

See segab.

Kuna knockd lisab reeglid INPUT-ahela lõppu, saame reject.

Ja selle tagasilükkamise väljalülitamine tähendab auto avamist kõikidele tuultele.

Et mitte iptablesis ära eksida, mida enne mida sisestada (nagu see inimesed soovita) teeme selle lihtsamaks:

  • vaikimisi CentOS/Fedoras esimene reegel ("mis pole keelatud, see on lubatud") asendatakse vastupidisega,
  • ja eemaldame viimase reegli.

Tulemus peaks olema:

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

Muidugi saate DROP-i asemel teha REJECT-i, kuid DROP-iga on robotite jaoks elu lõbusam.

3. Klient

See koht on kõige huvitavam (minu vaatenurgast), kuna peate töötama mitte ainult mis tahes rannast, vaid ka mis tahes seadmest.

Põhimõtteliselt on loetletud mitu klienti veebisait projekt, kuid see on samast sarjast "kõik on Internetis". Seetõttu loetlen, mis siin ja praegu minu käeulatuses töötab.

Kliendi valimisel peate veenduma, et see toetab pakettide vahelist viivitust. Jah, randade vahel on erinevusi ja 100 megabitti ei garanteeri kunagi, et paketid jõuavad antud asukohast õiges järjekorras õigel ajal kohale.

Ja jah, kliendi seadistamisel tuleb viivitus ise valida. Liiga palju aegumist – robotid ründavad, liiga vähe – kliendil pole aega. Liiga palju viivitust - klient ei jõua õigeks ajaks või tekib idiootide konflikt (vt "rehad"), liiga vähe - paketid lähevad internetti kaduma.

Timeout=5s korral on viivitus=100...500ms täiesti töötav valik

Windows

Ükskõik kui naljakalt see ka ei kõlaks, pole Google'i jaoks selle platvormi jaoks üsna triviaalne. Selline, et CLI toetab viivitust, TCP-d ja ilma vibudeta.

Teise võimalusena võite proovida see on see. Ilmselt pole mu Google kook.

Linux

Siin on kõik lihtne:

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

MacOS

Lihtsaim viis on installida port Homebrewist:
brew install knock
ja joonistage vajalikud pakkfailid selliste käskude jaoks nagu:

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

iOS

Töötav variant on KnockOnD (tasuta, poest).

Android

"Knock on Ports" Mitte reklaam, aga see lihtsalt töötab. Ja arendajad on üsna vastutulelikud.

PS allahindlus Habré kohta muidugi, jumal õnnistagu teda kunagi...

UPD1: tänu heale inimesele leitud töötav klient Windowsi all.
UPD2: Veel üks hea mees tuletas mulle meelde, et uute reeglite panemine iptablesi lõppu ei ole alati kasulik. Aga - oleneb.

Allikas: www.habr.com

Lisa kommentaar