Linux Tipy a triky: Server, Otevřený

Pro ty, kteří potřebují poskytnout sobě, svým blízkým, přístup ke svým serverům odkudkoli na světě přes SSH/RDP/ostatní, malý RTFM/spur.

Musíme se obejít bez VPN a dalších zvonků a píšťalek z jakéhokoli zařízení, které máme po ruce.

A abyste se serverem nemuseli příliš cvičit.

Vše, co k tomu potřebujete, je zaklepal, rovné paže a 5 minut práce.

"Všechno je na internetu," samozřejmě (i na Habré), ale pokud jde o konkrétní implementaci, tady to začíná...

Pojďme si to procvičit na příkladu Fedory.CentOS, ale to nevadí.

Ostruha je vhodná pro začátečníky i odborníky v této věci, takže komentáře budou, ale budou kratší.

1. Server

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

  • nakonfigurujte jej (například 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

    „Otevírací“ část je nastavena na automatické zavření po 1 hodině. Nikdy nevíš...

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

  • vpřed:

    service iptables restart
    service knockd start

  • Můžete přidat RDP k virtuálnímu počítači spuštěnému uvnitř Windows Server (/etc/knockd.conf; doplňte název rozhraní dle libosti):

    [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

    Pomocí příkazu sledujeme všechny naše kopy od klienta na serveru iptables -S.

2. Průvodce hráběmi

knockd.conf:

Mana také obsahuje vše (ale to je nepřesné), ale knockd je kamarád, který je na zprávy docela skoupý, takže je potřeba být hodně opatrný.

  • verze
    V repozitářích Fedory/CentOS Nejnovější dnešní hodnota je 0.63. Ti, kteří chtějí UDP, by se měli dívat po paketech s verzí 0.70.
  • rozhraní
    Ve výchozí konfiguraci Fedory/CentOS tento řádek Ne. Přidejte rukama, jinak to nepůjde.
  • timeout
    Zde si můžete vybrat podle svého vkusu. Je nutné, aby měl klient na všechny kopance dostatek času – a bot skeneru portů se porouchal (a 146 % skenuje).
  • start/stop/příkaz.
    Pokud existuje jeden příkaz, pak příkaz, pokud jsou dva, pak start_command+stop_command.
    Pokud uděláte chybu, zaklepání zůstane tiché, ale nebude fungovat.
  • proto
    Teoreticky lze použít UDP. V praxi jsem namíchal tcp a udp a klient z pláže na Bali dokázal otevřít bránu až popáté. Protože TCP dorazil, když bylo potřeba, ale UDP není fakt. Ale to je zase otázka vkusu.
  • sekvence
    Implicitní rake je, že sekvence by se neměly protínat... jak bych to řekl...

Například toto:

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

Kopem 11111 otevřít bude čekat na další kop na 22222. Nicméně po tomto (22222) kopu začne fungovat zavřít a všechno se zlomí. To závisí také na zpoždění klienta. Takové věci ©.

iptables

Pokud je v /etc/sysconfig/iptables toto:

*nat
:PREROUTING ACCEPT [0:0]

Moc nás to netrápí, tak tady je:

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

Překáží to.

Protože knockd přidává pravidla na konec řetězce INPUT, dostaneme odmítnutí.

A vypnout toto odmítnutí znamená otevřít auto všem větrům.

Abyste se v iptables neztratili, co vložit před co (takto lidé navrhněte), pojďme to zjednodušit:

  • výchozí в CentOS/Fedora první pravidlo („co není zakázáno, je dovoleno“) bude nahrazeno opakem,
  • a odstraníme poslední pravidlo.

Výsledek by měl být:

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

Místo DROP můžete samozřejmě udělat REJECT, ale s DROP bude život pro roboty zábavnější.

3. Klient

Toto místo je nejzajímavější (z mého pohledu), protože musíte pracovat nejen z jakékoli pláže, ale také z jakéhokoli zařízení.

V zásadě je uvedena řada klientů webové stránky projekt, ale toto je ze stejné série „všechno je na internetu“. Proto uvedu, co mi tady a teď funguje.

Při výběru klienta se musíte ujistit, že podporuje možnost zpoždění mezi pakety. Ano, mezi plážemi jsou rozdíly a 100 megabitů nikdy nezaručí, že pakety dorazí z daného místa ve správném pořadí ve správný čas.

A ano, při nastavování klienta musíte sami zvolit zpoždění. Příliš mnoho časového limitu – boti budou útočit, příliš málo – klient nebude mít čas. Příliš velké zpoždění – klient to nestihne nebo dojde ke konfliktu idiotů (viz „hrabání“), příliš málo – pakety se ztratí na internetu.

S timeout=5s, delay=100..500ms je zcela funkční volba

Windows

Bez ohledu na to, jak legračně to zní, pro Google je to zcela netriviální jako jasný klient pro tuto platformu. Takové, že CLI podporuje zpoždění, TCP - a bez oblouků.

Jako možnost si můžete vyzkoušet tohle je. Můj Google zřejmě není dort.

Linux

Vše je zde jednoduché:

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

MacOS

Nejjednodušší způsob je nainstalovat port z homebrew:
brew install knock
a nakreslete potřebné dávkové soubory pro příkazy jako:

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

iOS

Funkční možností je KnockOnD (zdarma, z obchodu).

Android

"Knock on Ports" Není to reklama, ale prostě to funguje. A vývojáři jsou velmi vstřícní.

PS markdown na Habrého, samozřejmě, Bůh mu žehnej jednou...

UPD1: díky k dobrému člověku nalezeno pracující klient pod Windows.
UPD2: Další dobrý muž připomnělo mi, že umístění nových pravidel na konec iptables není vždy užitečné. Ale - záleží.

Zdroj: www.habr.com

Kupte si spolehlivý hosting pro stránky s DDoS ochranou, VPS VDS servery 🔥 Kupte si spolehlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster