Linux məsləhətləri və fəndləri: server, açın

Özlərini, yaxınlarını SSH/RDP/digər vasitəsilə dünyanın istənilən yerindən öz serverlərinə çıxışla təmin etməli olanlar üçün kiçik bir RTFM/spur.

VPN və digər zənglər və fitlər olmadan əlimizdəki hər hansı bir cihazdan etməliyik.

Və serverlə çox məşq etməməyiniz üçün.

Bunun üçün sizə lazım olan tək şey budur döymək, düz qollar və 5 dəqiqəlik iş.

"Hər şey İnternetdədir" əlbəttə (hətta Habré), lakin konkret icraya gəldikdə, o, burada başlayır...

Nümunə olaraq Fedora/CentOS-dan istifadə edəcəyik, lakin bunun heç bir əhəmiyyəti yoxdur.

Spur bu məsələdə həm yeni başlayanlar, həm də mütəxəssislər üçün uyğundur, buna görə də şərhlər olacaq, lakin onlar daha qısa olacaq.

1. Server

  • knock-server quraşdırın:
    yum/dnf install knock-server

  • konfiqurasiya edin (məsələn, ssh-də) - /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

    “Açma” hissəsi 1 saatdan sonra avtomatik bağlanmağa təyin edilir. Heç bilmirsən...

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

  • irəli:

    service iptables restart
    service knockd start

  • içərisində fırlanan virtual Windows Serverə RDP əlavə edə bilərsiniz (/etc/knockd.conf; zövqünüzə uyğun interfeys adını dəyişdirin):

    [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

    Biz komanda ilə serverdə müştəridən bütün zərbələrimizi izləyirik iptables -S.

2. Dırmıqlara bələdçi

knockd.conf:

Mana da hər şeyi ehtiva edir (lakin bu qeyri-dəqiqdir), lakin knockd mesajlara olduqca xəsis olan dostdur, ona görə də çox diqqətli olmaq lazımdır.

  • versiyası
    Fedora/CentOS depolarında bu gün üçün ən son knockd 0.63-dür. Kim UDP istəyir - 0.70 paket axtarın.
  • interface
    Standart Fedora/CentOS konfiqurasiyasında bu xətt Heç bir. Əllərinizlə əlavə edin, əks halda işləməyəcək.
  • zaman aşımı
    Burada zövqünüzə uyğun seçim edə bilərsiniz. Müştərinin bütün zərbələr üçün kifayət qədər vaxtı olması lazımdır - və port skaneri botu sıradan çıxacaq (və 146% skan edəcək).
  • start/stop/command.
    Əgər bir komanda varsa, o zaman əmr, iki varsa, start_command+stop_command.
    Səhv etsəniz, knockd səssiz qalacaq, amma işləməyəcək.
  • proto
    Teorik olaraq, UDP istifadə edilə bilər. Praktikada tcp və udp-ni qarışdırdım və Balidəki çimərlikdən gələn müştəri yalnız beşinci dəfə qapını aça bildi. Çünki TCP lazım olanda gəldi, lakin UDP fakt deyil. Amma bu yenə də zövq məsələsidir.
  • ardıcıllıq
    Gizli dırmıq odur ki, ardıcıllıqlar kəsişməsin... bunu necə deyim...

Məsələn, bu:

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

11111 vuruşu ilə açmaq 22222-də növbəti zərbəni gözləyəcək. Lakin bu (22222) zərbədən sonra işə başlayacaq. yaxın və hər şey qırılacaq. Bu da müştərinin gecikməsindən asılıdır. Belə şeylər ©.

iptables

Əgər /etc/sysconfig/iptables daxilindədirsə, bu:

*nat
:PREROUTING ACCEPT [0:0]

Bu, bizi həqiqətən narahat etmir, ona görə də budur:

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

Bu müdaxilə edir.

knockd INPUT zəncirinin sonuna qaydalar əlavə etdiyi üçün biz rədd cavabı alacağıq.

Və bu rəddi söndürmək maşını bütün küləklərə açmaq deməkdir.

İptables-də itməmək üçün nədən əvvəl nə əlavə etmək lazımdır (bu kimi xalq təklif edirik) gəlin bunu sadələşdirək:

  • default CentOS/Fedora-da ilk qayda (“qadağan edilməyənə icazə verilir”) əksi ilə əvəz olunacaq,
  • və son qaydanı aradan qaldırırıq.

Nəticə belə olmalıdır:

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

Siz, əlbəttə ki, DROP yerinə RƏDD edə bilərsiniz, lakin DROP ilə həyat botlar üçün daha əyləncəli olacaq.

3. Müştəri

Bu yer ən maraqlıdır (mənim nöqteyi-nəzərimdən), çünki yalnız hər hansı bir çimərlikdən deyil, həm də istənilən cihazdan işləmək lazımdır.

Prinsipcə, bir sıra müştərilər siyahıya alınır Online layihədir, lakin bu, "hər şey İnternetdə" seriyasındandır. Buna görə də, burada və indi əlimin ucunda işləyənləri sadalayacağam.

Müştəri seçərkən, onun paketlər arasında gecikmə seçimini dəstəklədiyinə əmin olmalısınız. Bəli, çimərliklər arasında fərqlər var və 100 meqabit paketlərin müəyyən bir yerdən doğru zamanda düzgün qaydada çatacağına heç vaxt zəmanət vermir.

Və bəli, müştəri qurarkən gecikməni özünüz seçməlisiniz. Çox vaxt aşımı - botlar hücum edəcək, çox az - müştərinin vaxtı olmayacaq. Çox gecikmə - müştəri bunu vaxtında etməyəcək və ya axmaqların qarşıdurması olacaq (bax "tırmıklar"), çox az - paketlər İnternetdə itəcək.

Taymout=5s ilə gecikmə=100..500ms tam işlək seçimdir

Windows

Nə qədər gülməli səslənsə də, bu platforma üçün açıq-aydın knock müştərisi olan Google üçün bu olduqca qeyri-ciddidir. Belə ki, CLI gecikməni, TCP-ni və yay olmadan dəstəkləyir.

Alternativ olaraq, cəhd edə bilərsiniz bu odur. Görünür mənim Google-um tort deyil.

Linux

Burada hər şey sadədir:

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

MacOS

Ən asan yol portu homebrew-dən quraşdırmaqdır:
brew install knock
və aşağıdakı kimi əmrlər üçün lazımi toplu faylları çəkin:

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

iOS

İşləyən seçim KnockOnD-dir (pulsuz, mağazadan).

Android

"Limanları döyün" Reklam deyil, sadəcə işləyir. Və tərtibatçılar olduqca həssasdırlar.

PS Habré-yə işarə, əlbəttə ki, Allah ona bir gün rəhmət eləsin...

UPD1: sayəsində yaxşı insana tapıldı işləyən müştəri Windows altında.
UPD2: Başqa biri yaxşı adam iptables-in sonuna yeni qaydaların qoyulmasının həmişə faydalı olmadığını xatırlatdı. Ancaq - asılıdır.

Mənbə: www.habr.com

Добавить комментарий