Linux savjeti i trikovi: poslužitelj, otvori se

Za one koji trebaju sebi, svojim voljenima osigurati pristup svojim serverima s bilo kojeg mjesta u svijetu putem SSH/RDP/ostalo, mali RTFM/spur.

Moramo raditi bez VPN-a i drugih dodataka, s bilo kojeg uređaja pri ruci.

I tako da ne morate previše vježbati s poslužiteljem.

Sve što trebate za ovo je pokucao, ravne ruke i 5 minuta rada.

"Sve je na internetu", naravno (čak i na Habré), ali kada je u pitanju konkretna implementacija, tu počinje...

Vježbat ćemo koristeći Fedora/CentOS kao primjer, ali to nije važno.

Spur je pogodan i za početnike i za stručnjake u ovom pitanju, tako da će biti komentara, ali oni će biti kraći.

1. Poslužitelj

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

  • konfigurirajte ga (na primjer na 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

    Dio za "otvaranje" postavljen je na automatsko zatvaranje nakon 1 sata. Nikad ne znaš...

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

  • naprijed:

    service iptables restart
    service knockd start

  • možete dodati RDP virtualnom Windows Serveru koji se vrti unutra (/etc/knockd.conf; zamijenite naziv sučelja prema svom ukusu):

    [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

    Naredbom pratimo sve naše udarce od klijenta na serveru iptables -S.

2. Vodič za grablje

knockd.conf:

Mana također sadrži sve (ali ovo je netočno), ali knockd je prijatelj koji je dosta škrt s porukama, pa treba biti jako oprezan.

  • verzija
    U Fedora/CentOS spremištima, najnoviji knockd za danas je 0.63. Tko želi UDP - traži 0.70 paketa.
  • sučelje
    U zadanoj Fedora/CentOS konfiguraciji ovaj redak ne. Dodajte rukama, inače neće ići.
  • tajm-aut
    Ovdje možete odabrati prema svom ukusu. Potrebno je da klijent ima dovoljno vremena za sve udarce - i bot za skeniranje portova će se pokvariti (a 146% će skenirati).
  • start/stop/naredba.
    Ako postoji jedna naredba, onda naredba, ako su dvije, onda start_command+stop_command.
    Ako pogriješite, knockd će ostati tih, ali neće raditi.
  • proto
    Teoretski, UDP se može koristiti. U praksi sam miješao tcp i udp, a klijent s plaže na Baliju uspio je otvoriti kapiju tek peti put. Jer TCP je stigao kad treba, ali UDP nije činjenica. Ali ovo je opet stvar ukusa.
  • slijed
    Implicitni rake je da se nizovi ne bi trebali presijecati... kako da se izrazim...

Na primjer, ovo:

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

Udarcem 11111 otvoriti čekat će sljedeći udarac na 22222. Međutim, nakon ovog (22222) udarca počet će raditi blizu i sve će se slomiti. To ovisi i o kašnjenju klijenta. Takve stvari ©.

iptables

Ako je u /etc/sysconfig/iptables ovo:

*nat
:PREROUTING ACCEPT [0:0]

Nama to baš i ne smeta, pa evo:

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

To ometa.

Budući da knockd dodaje pravila na kraj INPUT lanca, dobit ćemo odbijenicu.

A gašenje ovog odbijanja znači otvaranje automobila svim vjetrovima.

Kako se ne bi izgubili u iptables što staviti prije čega (ovako ljudi predloži) pojednostavimo:

  • zadano na CentOS/Fedora prvi pravilo ("dopušteno je što nije zabranjeno") bit će zamijenjeno suprotnim,
  • i uklanjamo posljednje pravilo.

Rezultat bi trebao biti:

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

Možete, naravno, napraviti REJECT umjesto DROP, ali uz DROP život će botovima biti zabavniji.

3. Klijent

Ovo mjesto je najzanimljivije (s moje točke gledišta), jer morate raditi ne samo s bilo koje plaže, već i s bilo kojeg uređaja.

U principu, naveden je niz klijenata Online projekt, ali ovo je iz iste serije “sve je na internetu”. Stoga ću ovdje i sada navesti ono što mi radi na dohvat ruke.

Prilikom odabira klijenta morate biti sigurni da podržava opciju odgode između paketa. Da, postoje razlike između plaža i 100 megabita nikad ne jamči da će paketi stići pravim redoslijedom u pravo vrijeme s određene lokacije.

I da, kada postavljate klijenta, morate sami odabrati odgodu. Previše vremena - botovi će napasti, premalo - klijent neće imati vremena. Previše kašnjenja - klijent neće stići na vrijeme ili će doći do sukoba idiota (vidi "grablje"), premalo - paketi će se izgubiti na internetu.

S timeout=5s, delay=100..500ms je potpuno radna opcija

Windows

Bez obzira koliko smiješno zvučalo, Googleu je sasvim netrivijalan jasan knock klijent za ovu platformu. Takav da CLI podržava kašnjenje, TCP - i bez lukova.

Alternativno, možete pokušati to je to. Očigledno moj Google nije kolač.

Linux

Ovdje je sve jednostavno:

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

MacOS

Najlakši način je instalirati port iz homebrew-a:
brew install knock
i nacrtajte potrebne batch datoteke za naredbe kao što su:

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

iOS

Radna opcija je KnockOnD (besplatno, iz trgovine).

Android

"Kucaj na portove" Nije oglašavanje, ali jednostavno radi. I programeri su prilično osjetljivi.

PS smanjenje na Habréu, naravno, Bog ga blagoslovio jednog dana...

UPD1: zahvaljujući dobroj osobi pronađeno radni klijent pod Windowsima.
UPD2: Još jedan dobar čovjek podsjetio me da stavljanje novih pravila na kraj iptables nije uvijek korisno. Ali – ovisi.

Izvor: www.habr.com

Dodajte komentar