Linux Padomi un ieteikumi: Serveris, Atvērts

Tiem, kam jānodrošina piekļuve saviem serveriem no jebkuras vietas pasaulē, izmantojot SSH/RDP/citu — neliela RTFM/krāpšanās.

Mums jāiztiek bez VPN un citiem zvaniem un svilpieniem, no jebkuras pie rokas esošas ierīces.

Un lai nebūtu pārāk daudz jāvingro ar serveri.

Viss, kas jums tam nepieciešams, ir nokautēts, taisnas rokas un 5 minūtes darba.

“Viss ir internetā,” protams (pat internetā) Habrē), bet, runājot par konkrētu ieviešanu, viss sākas tieši tur...

Praktizēsimies, izmantojot Fedora kā piemēru.CentOS, bet tam nav nozīmes.

Šī apkrāptu lapa ir piemērota gan iesācējiem, gan pieredzējušiem ekspertiem, tāpēc būs daži komentāri, taču tie būs īsi.

1. Serveris

  • mēs instalējam knock-serveri:
    yum/dnf install knock-server

  • Mēs to konfigurējam (piemēram, 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

    "Atvēršanas" daļa ir iestatīta tā, lai tā automātiski aizvērtos pēc 1 stundas. Nekad nevar zināt...

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

  • uz priekšu:

    service iptables restart
    service knockd start

  • Varat pievienot RDP virtuālajai mašīnai, kas darbojas iekšpusē Windows Server (/etc/knockd.conf; aizstājiet saskarnes nosaukumu pēc garšas):

    [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

    Mēs izsekojam visus mūsu sitienus no klienta serverī ar komandu iptables -S.

2. Grābekļa lietošanas ceļvedis

knockd.conf:

Mangā arī ir viss (bet tas nav precīzi), bet knockd ir diezgan skops puisis ar ziņojumiem, tāpēc jābūt ļoti uzmanīgiem.

  • versija
    Fedora repozitorijos/CentOS Jaunākais šodienas kritums ir 0.63. Tiem, kas vēlas UDP, jāmeklē 0.70 paketes.
  • saskarne
    Fedora noklusējuma konfigurācijā/CentOS šī līnija Pievienojiet ar rokām, pretējā gadījumā tas nedarbosies.
  • taimautu
    Tas ir personīgo preferenču jautājums. Klientam ir jābūt pietiekami daudz laika, lai pabeigtu visas nepieciešamās darbības, un portu skenera robotam vajadzētu neizdoties (un 146% no tiem skenēs).
  • sākt/apturēt/komanda.
    Ja ir viena komanda, tad komanda; ja ir divas, tad start_command+stop_command.
    Ja pieļaujat kļūdu, knockd klusēs, bet nedarbosies.
  • tāpēc
    Teorētiski varētu izmantot UDP. Praksē es kombinēju TCP un UDP, un klients Bali pludmalē varēja atvērt vārtus tikai ar piekto mēģinājumu. Jo TCP piegādāja laikā, savukārt UDP netiek garantēts. Bet atkal, tas ir gaumes jautājums.
  • secība
    Slēptais āķis ir tāds, ka secības nedrīkst krustoties... kā lai es to pasaku...

Piemēram, šis:

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

Autors: kick 11111 atvērt gaidīs nākamo sitienu 22222. Tomēr šajā (22222) sitienā tas sāks darboties. aizvērt un viss sabojāsies. Tas ir atkarīgs no klienta kavēšanās, cita starpā. Tā tas ir ©.

iptables

Ja failā /etc/sysconfig/iptables ir šis:

*nat
:PREROUTING ACCEPT [0:0]

tas mūs īsti neuztrauc, tāpēc lūk, kas:

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

Tas gan traucē.

Tā kā knockd pievieno noteikumus INPUT ķēdes beigās, mēs saņemam noraidījumu.

Un šīs atgrūšanas izslēgšana nozīmē automašīnas atvēršanu visiem vējiem.

Lai nejauktos ar iptables, ko un kur likt pirms kā (piemēram, šādi) cilvēki (Viņi iesaka) padarīsim to vienkāršāku:

  • noklusējuma в CentOSFedora pirmais noteikums (“kas nav aizliegts, ir atļauts”) tiks aizstāts ar pretējo,
  • un mēs atceļam pēdējo noteikumu.

Rezultātā jābūt:

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

Protams, DROP vietā var izmantot REJECT, taču DROP padarīs robotiem dzīvi jautrāku.

3. Klients

Šeit tas kļūst visinteresantākais (no mana viedokļa), jo jāstrādā ne tikai no jebkuras pludmales, bet arī no jebkuras ierīces.

Principā vairāki klienti ir uzskaitīti vietnē Tiešsaistē projekts, bet tas ir gluži kā "viss ir internetā". Tāpēc uzskaitīšu, kas man šobrīd darbojas.

Izvēloties klientu, pārliecinieties, vai tas atbalsta aizkaves opciju starp paketēm. Jā, katra pludmale ir atšķirīga, un 100 megabiti negarantē, ka paketes pienāks pareizajā secībā pareizajā laikā no dotās vietas.

Un jā, iestatot klientu, jums pašam jāizvēlas aizkave. Pārāk liels taimauts un boti uzbruks; pārāk mazs un klients nepaspēs laikā. Pārāk liela aizkave un klients nepaspēs laikā vai arī radīsies tērzēšanas konflikts (skatīt "Rake"); pārāk mazs un paketes pazudīs internetā.

Ar taimautu=5s, pilnībā funkcionējoša opcija ir aizkave=100..500ms

Windows

Lai cik smieklīgi tas neizklausītos, atrast pienācīgu "knock" klientu šai platformai Google ir diezgan sarežģīti. Tādu ar komandrindas saskarni, latentuma atbalstu, TCP atbalstu un bez liekām ekstras.

Varat arī izmēģināt tas ir tasAcīmredzot mans Google nav gluži viegls uzdevums.

Linux

Šeit viss ir vienkārši:

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

MacOS

Vienkāršākais veids ir instalēt portu no homebrew:
brew install knock
un uzzīmējiet sev nepieciešamos komandrindas pakešfailus šādi:

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

iOS

Darbojoša opcija ir KnockOnD (bez maksas, no veikala).

Android

"Knock on Ports." Tā nav reklāma, tā vienkārši darbojas. Un izstrādātāji ir diezgan atsaucīgi.

P.S. Markdown Habr, protams, lai Dievs tam kādreiz dod veselību...

UPD1: Pateicoties labam cilvēkam atrasts strādājošs klients saskaņā ar Windows.
UPD2: vēl viens labs cilvēks Es viņam atgādināju, ka jaunu noteikumu pievienošana iptables beigās ne vienmēr ir noderīga. Bet — tas atkarīgs no situācijas.

Avots: www.habr.com

Iegādājieties uzticamu mitināšanu vietnēm ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa vietņu mitināšanu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster