Linux savjeti & trikovi: poslužitelj, otvori se

Onima koji trebaju osigurati pristup svojim serverima s bilo kojeg mjesta na svijetu preko SSH/RDP/drugo — mali RTFM/pomoćnik.

Moramo se snaći bez VPN-a i drugih kompliciranih stvari, s bilo kojeg uređaja pri ruci.

I tako da se ne treba previše truditi s serverom.

Sve što je potrebno za to — knockd, spretnost i 5 minuta rada.

„Na internetu sve postoji“, naravno (čak i na Habr-u), ali kada dođe do konkretne realizacije — tu i počinju…

Vježbat ćemo na primjeru Fedora/CentOS, ali to nije važno.

Pomoćnik će biti koristan kako početnicima, tako i veteranima, stoga će biti komentara, ali kraćih.

1. Server

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

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

    „Otvoreni“ dio podešen je za automatsko zatvaranje nakon 1 sat. 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 na virtualni Windows Server (/{etc}/knockd.conf; unosite naziv sučelja po želji):

    [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

    Sve naše aktivnosti od klijenta pratimo na serveru naredbom iptables -S.

2. Vodič kroz zamke

knockd.conf:

U manulima također ima svega (ali to nije sigurno), no knockd je prilično škrta na porukama, stoga treba biti vrlo pažljiv.

  • verzija
    U repozitorijima Fedora/CentOS najnoviji knockd do danas je — 0.63. Tko želi UDP — tražite pakete 0.70.
  • sučelje
    U zadnjoj konfiguraciji Fedora/CentOS, ova linija nema. Dodajte ručno, inače neće raditi.
  • timeout
    Ovdje si možete prilagoditi kako želite. Treba da i klijentu ostane dovoljno vremena za sve pingove — i bot-skener portova da ne uspije (a skenirat će 146%).
  • start/stop/command.
    Ako je tim jedan — onda command, ako su dva — onda start_command+stop_command.
    Ako pogriješite — knockd će šutjeti, ali neće raditi.
  • proto
    Teoretski je moguće koristiti UDP. U praksi sam pomiješao tcp i udp, a klijent s plaže na Baliju mogao je otvoriti svoju kapiju tek nakon petog pokušaja. Jer TCP su stigli kada je bilo potrebno, a za UDP — to nije sigurno. No, to je stvar ukusa, ponavljam.
  • sekvenca
    Nejasne zamke su u tome što sekvence ne smiju preklapati… kako da to kažem…

Na primjer, ovako:

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

Po udarcu 11111 open će čekati sljedeći udarac na 22222. Međutim, po ovom (22222) udarcu će početi raditi close i sve će se pokvariti. To ovisi i o odgodi klijenta. Takva su pravila ©.

iptables

Ako u /etc/sysconfig/iptables imamo ovo:

*nat
:PREROUTING ACCEPT [0:0]

ne smeta nam previše, ali ovo:

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

naš je problem.

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

A isključiti to odbijanje — znači otvoriti stroj svim vjetrovima.

Da ne bismo komplicirali s iptables o tome gdje što umetnuti (kao što ljudi predlažu), učinimo jednostavnije:

  • default u CentOS/Fedora prvo pravilo („što nije zabranjeno — dopušteno je“) zamijenimo suprotnim,
  • a posljednje pravilo uklanjamo.

Na kraju bi trebalo ispasti:

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

Naravno, umjesto DROP može se koristiti REJECT, ali s DROP-om botovima će biti zabavnije.

3. Klijent

Na ovom mjestu je najzanimljivije (iz mog gledišta), jer je važno raditi ne samo s bilo koje plaže, nego i s bilo kojeg uređaja.

U načelu, niz klijenata je navedeno na web stranici projektu, ali to je iz iste serije „na internetu se sve može naći“. Zato ću nabrojati one koji trenutačno rade kod mene.

Pri odabiru klijenta potrebno je osigurati da podržava opciju odgode između paketa. Da, plaža je svaka različita i 100 megabita nikako ne garantira da će paketi stići na pravo mjesto u pravo vrijeme iz tog mjesta.

I da — pri postavljanju klijenta, odgoda se mora ručno prilagoditi. Previše timeout-a — botovi će napasti, premalo — klijent neće stići. Previše odgode — klijent neće stići ili će doći do sukoba udaraca (vidi „zamke“), premalo — paketi će se izgubiti na internetu.

Uz timeout=5s, sasvim je dobro rješenje delay=100..500ms.

Windows

Kako god to smiješno zvučalo, ali pronaći smisleni knock-klijent za ovu platformu prilično je nezgodno. Takav, da CLI podržava odgodu, TCP — i bez ukrasa.

Kao opciju možete probati ovo. Očigledno da mi Google nije baš najbolji.

Linux

Ovdje je sve jednostavno:

dnf install knock -y
knock -d   11111 22222 33333

MacOS

Najlakše je instalirati port iz homebrew-a:
brew install knock
i nacrtati si potrebne batnice komande u obliku:

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

iOS

Radna opcija — KnockOnD (besplatno, iz trgovine).

Android

«Knock on Ports». Nije reklama, jednostavno radi. I developeri su dovoljno responzivni.

P.S. markdown na Habreu, naravno, da mu bog da zdravlja jednog dana...

UPD1: zahvaljujući dobrom čovjeku pronađen radni klijent za Windows.
UPD2: još jedan dobar čovjek podsjetio je da postavljanje novih pravila na kraj iptables-a nije uvijek korisno. Ali — to ovisi.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster