Linux savjeti i trikovi: server, otvori

Za one koji treba da sebi, svojim najmilijima, obezbede pristup svojim serverima sa bilo kog mesta u svetu preko SSH/RDP/ostalo, mali RTFM/spur.

Moramo bez VPN-a i drugih zvona i zviždaljki, s bilo kojeg uređaja pri ruci.

I tako da ne morate previše vježbati sa serverom.

Sve što vam treba za ovo je knockd, 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 korištenje Fedora/CentOS-a kao primjera, ali to nije važno.

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

1. Server

  • 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" je podešen da se automatski zatvara 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 virtuelnom Windows Serveru koji se vrti unutar (/etc/knockd.conf; zamijenite ime interfejsa po 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

    Pratimo sve naše udarce od klijenta na serveru pomoću komande iptables -S.

2. Vodič za grablje

knockd.conf:

Mana takođe sadrži sve (ali ovo je netačno), ali knockd je prijatelj koji je dosta škrt sa porukama, tako da treba biti veoma oprezan.

  • verzija
    U Fedora/CentOS repozitorijumima, najnoviji knockd za danas je 0.63. Ko želi UDP - traži 0.70 paketa.
  • Interfejs
    U podrazumevanoj Fedora/CentOS konfiguraciji ovaj red ne. Dodajte rukama, inače neće raditi.
  • vrijeme je isteklo
    Ovdje možete birati po svom ukusu. Potrebno je da klijent ima dovoljno vremena za sve udarce - i bot skenera portova će se pokvariti (i 146% će skenirati).
  • start/stop/command.
    Ako postoji jedna naredba, onda naredba, ako postoje dvije, onda start_command+stop_command.
    Ako pogriješite, knockd će šutjeti, ali neće raditi.
  • stoga
    Teoretski, UDP se može koristiti. U praksi sam pomiješao tcp i udp, a klijent sa plaže na Baliju uspio je otvoriti kapiju tek peti put. Jer TCP je stigao po potrebi, ali UDP nije činjenica. Ali ovo je opet stvar ukusa.
  • sekvenca
    Implicitni rake je da sekvence ne bi trebalo da se presecaju... kako da se izrazim...

Na primjer, ovo:

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

Udarac 11111 otvoreno će čekati sljedeći udarac u 22222. Međutim, nakon ovog (22222) udarca će početi raditi blizu i sve će se slomiti. Ovo zavisi i od kašnjenja klijenta. Takve stvari ©.

iptables

Ako je u /etc/sysconfig/iptables ovo je:

*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

Ometa se.

Pošto knockd dodaje pravila na kraj INPUT lanca, dobićemo odbijenicu.

A isključivanje ovog odbijanja znači otvaranje automobila svim vjetrovima.

Da se ne izgubite u iptablesima šta umetnuti pre čega (ovako ljudi predložimo) da pojednostavimo:

  • default na CentOS/Fedora prvi pravilo ("ono što nije zabranjeno, dozvoljeno je") 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, uraditi REJECT umjesto DROP, ali sa DROP život će biti zabavniji za botove.

3. Klijent

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

U principu, određeni broj klijenata je na listi site projekta, ali ovo je iz iste serije "sve je na internetu". Stoga ću ovdje i sada navesti ono što mi radi na dohvat ruke.

Kada birate klijenta, morate biti sigurni da podržava opciju kašnjenja između paketa. Da, postoje razlike između plaža i 100 megabita nikada ne garantuje da će paketi stići u pravom redoslijedu u pravo vrijeme sa određene lokacije.

I da, kada postavljate klijenta, morate sami odabrati kašnjenje. Previše vremena čekanja - 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.

Sa timeout=5s, kašnjenje=100..500ms je potpuno funkcionalna opcija

Windows

Bez obzira koliko to smiješno zvučalo, Googleu je sasvim netrivijalno da je jasan 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

Ovde je sve jednostavno:

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

MacOS

Najlakši način je da instalirate port iz homebrew-a:
brew install knock
i nacrtajte potrebne batch fajlove za komande kao što su:

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

iOS

Radna opcija je KnockOnD (besplatno, iz trgovine).

android

"Kuck on Ports" Nije reklama, ali jednostavno funkcionira. A programeri su prilično osjetljivi.

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

UPD1: Hvala za dobroj osobi pronađeno radni klijent pod Windowsom.
UPD2: Drugi dobar čovjek podsjetio me da stavljanje novih pravila na kraj iptablesa nije uvijek korisno. Ali - zavisi.

izvor: www.habr.com

Dodajte komentar