Linuxi nÀpunÀited ja nipid: server, avane

Need for secure access to your servers from anywhere in the world via SSH/RDP/other methods — a handy RTFM/guide.

We aim to avoid VPNs and other complexities, using any device at hand.

And to ensure that managing the server isn't too cumbersome.

All you need for this is — knockd, skilled hands, and 5 minutes of effort.

“Everything is on the internet,” of course (even on Habr's), but when it comes to a specific implementation — that’s where the trouble begins


We will practice using Fedora/CentOS as an example, but it doesn’t really matter.

This guide is suited for both newcomers and seasoned experts, so there will be comments, but shorter.

1. Server

  • let's install knock-server:
    yum/dnf install knock-server

  • configure it (for example, for 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

    The 'opening' part is set to auto-close after 1 hour. Just in case


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

  • vĂ”id lisada RDP pöörlevasse virtuaalsesse Windows Serverisse (/etc/knockd.conf; liidese nimi vastavalt soovile):

    [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

    KÀivitasime kÔik meie pinged kliendilt serveris kÀsuga iptables -S.

2. DĆŸungli teejuht

knockd.conf:

Manuaalid on olemas (aga see pole tĂ€pne), kuid knockd on ĂŒsna tagasihoidlik teateid andes, seega tuleb olla vĂ€ga tĂ€helepanelik.

  • versioon
    Fedora/CentOS hetkese seisuga on viimane knockd versioon 0.63. Kes soovib UDP-d, otsige pakette 0.70.
  • liides
    Fedora/CentOS vaikimisi konfiguratsioonis on see rida on puudub. Lisa kÀsitsi, muidu ei hakka tööle.
  • ajakava
    Siit leiate enda maitsele sobivad variandid. Oluline on, et kliendil oleks aega kĂ”ikide nullide jaoks — ja et portide skaneerimise robot kokku ei jooksuks (skaneeritakse 146%).
  • start/stop/command.
    Kui kĂ€sky on ĂŒks — siis command, kui kaks — siis start_command+stop_command.
    Kui eksite — knockd vaikib, kuid ei tööta.
  • proto
    Teoreetiliselt on vĂ”imalik kasutada UDP-d. Praktikas segasin ma TCP-d ja UDP-d, ja klient Bali rannalt suutis oma vĂ€rava avada alles viiendal katsel. Sest TCP jĂ”udis kohale, kui vaja, kuid UDP — ei pruugi. Aga see on maitse kĂŒsimus, jĂ€lle.
  • sequence
    Karm tĂ”de on see, et jĂ€rjestused ei tohi kattuda
 kuidas nĂŒĂŒd öelda


NĂ€iteks midagi sellist:

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

11111 nulliga open ootab jÀrgmist nulli 22222. Siiski, selle (22222) nulliga hakkab tööle close ja kÔik lÀheb katki. See sÔltub ka kliendi viivitusest. Selline on elu ©.

iptables

Kui /etc/sysconfig/iptables on selline:

*nat
:PREROUTING ACCEPT [0:0]

ei sega meid eriti, siis see:

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

segab kĂŒll.

Kuna knockd lisab reegleid INPUT ahela lÔppu, saame reject.

Ja selle reject'i vĂ€ljalĂŒlitamine — see avab masina tuulele.

Ettei peaksime pelgalt iptables'i nÀppima, kui kuhu ja mida sisestada (nagu inimesed soovitavad), teeme asja lihtsamaks: inimesed pakuvad)

  • vaikimisi CentOSi/Fedora esimene reegel ("mis pole keelatud, on lubatud") asendame vastupidisega,
  • ja viimane reegel eemaldame.

Tulemuseks peaks olema:

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

Muidugi vÔib DROPi asemel kasutada REJECTi, kuid DROPiga saavad robotid lÔbusamalt hakkama.

3. Klient

Siin on huvitav osa (minu arvates), kuna tuleb töötada mitte ainult igalt rannalt, vaid ka igalt seadmel.

PÔhimÔtteliselt on mitu klienti loetletud veebilehel projektis, kuid see kuulub kategooriasse "interneti teab kÔik". SeetÔttu loetlen selle, mis on praegu minu kÀeulatuses toimiv.

Kliendi valimisel on oluline kontrollida, et see toetaks pakettide vahel viivituse (delay) vÔimalust. Jah, rand on erinev ja 100 megabitti ei garanteeri pakettide jÔudmist Ôiges jÀrjekorras Ôigel ajal sellest kohast.

Ja jah — kliendi viivituse seadistamine tuleb iseseisvalt kohandada. Liigne timeout – robotid rĂŒndavad, liiga vĂ€he – klient ei jĂ”ua hakkama. Liigne viivitus – klient ei jĂ”ua vĂ”i tekib konflikt (vt "trikk"), liiga vĂ€he – paketid eksivad internetis.

Timeout=5s on ĂŒsna töötav variant delay=100..500ms

Windows

Kuidas see ka ei kĂ”laks, on mĂ”istliku knock-kliendi leidmine selle platvormi jaoks ĂŒsna keeruline. Selline, mis toetab CLI, delay, TCP — ja ilma igasuguste lisanditeta.

VÔib proovida seda. Tundub, et minu Google ei tööta hÀsti.

Linux

Siin on kÔik lihtne:

dnf install knock -y
knock -d   11111 22222 33333

MacOS

Lihtsaim on paigaldada port homebrew'st:
brew install knock
ja joonistada endale vajalikud kÀskude skriptid sellise kujuga:

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

iOS

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

Android

«Knock on Ports». Ei ole reklaam, aga lihtsalt see töötab. Ja arendajad on piisavalt vastutulelikud.

P.S. markdown Hubis, muidugi, jumal tead, kas see kunagi paraneb...

UPD1: tÀnu heale inimesele leiti töötav klient Windowsi jaoks.
UPD2: veel ĂŒks hea inimene meenis, et uute reeglite lĂ”ppu iptables'i lisamine ei ole alati kasulik. Aga — see sĂ”ltub.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster