Petua & kiat Linux: pelayan, buka

Bagi mereka yang perlu menyediakan diri mereka, orang tersayang, dengan akses kepada pelayan mereka dari mana-mana sahaja di dunia melalui SSH/RDP/lain-lain, RTFM/spur kecil.

Kita perlu melakukannya tanpa VPN dan loceng dan wisel lain, dari mana-mana peranti di tangan.

Dan supaya anda tidak perlu bersenam terlalu banyak dengan pelayan.

Apa yang anda perlukan untuk ini ialah diketuk, lengan lurus dan 5 minit bekerja.

β€œSemuanya ada di Internet,” sudah tentu (walaupun pada HabrΓ©), tetapi apabila ia berkaitan dengan pelaksanaan tertentu, di sinilah ia bermula...

Kami akan berlatih menggunakan Fedora/CentOS sebagai contoh, tetapi itu tidak penting.

Spur ini sesuai untuk pemula dan pakar dalam perkara ini, jadi akan ada ulasan, tetapi mereka akan lebih pendek.

1. Pelayan

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

  • konfigurasikannya (contohnya pada 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

    Bahagian "pembukaan" ditetapkan untuk ditutup secara automatik selepas 1 jam. Anda tidak pernah tahu...

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

  • ke hadapan:

    service iptables restart
    service knockd start

  • anda boleh menambah RDP pada Pelayan Windows maya berputar di dalam (/etc/knockd.conf; gantikan nama antara muka mengikut citarasa anda):

    [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

    Kami menjejaki semua sepakan kami dari klien pada pelayan dengan arahan iptables -S.

2. Panduan untuk garu

knockd.conf:

Mana juga mengandungi segala-galanya (tetapi ini tidak tepat), tetapi knockd adalah rakan yang agak kedekut dengan mesej, jadi anda perlu berhati-hati.

  • versi
    Dalam repositori Fedora/CentOS, ketukan terkini untuk hari ini ialah 0.63. Siapa nak UDP - cari 0.70 peket.
  • antara muka
    Dalam konfigurasi lalai Fedora/CentOS baris ini tidak. Tambah dengan tangan anda, jika tidak, ia tidak akan berfungsi.
  • timeout
    Di sini anda boleh memilih mengikut citarasa anda. Pelanggan perlu mempunyai masa yang cukup untuk semua sepakan - dan bot pengimbas port akan rosak (dan 146% akan mengimbas).
  • mula/berhenti/perintah.
    Jika terdapat satu perintah, maka perintah, jika ada dua, maka start_command+stop_command.
    Jika anda membuat kesilapan, ketukan akan tetap senyap, tetapi tidak akan berfungsi.
  • prototaip
    Secara teorinya, UDP boleh digunakan. Dalam praktiknya, saya mencampurkan tcp dan udp, dan pelanggan dari pantai di Bali dapat membuka pintu hanya untuk kali kelima. Kerana TCP tiba apabila diperlukan, tetapi UDP bukanlah fakta. Tetapi ini adalah soal rasa, sekali lagi.
  • turutan
    Raut tersirat ialah urutan tidak boleh bersilang ... bagaimana untuk meletakkannya ...

Sebagai contoh, ini:

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

Dengan sepakan 11111 membuka akan menunggu sepakan seterusnya pada 22222. Namun, selepas ini (22222) sepakan ia akan mula berfungsi rapat dan semuanya akan pecah. Ini bergantung kepada kelewatan pelanggan juga. Perkara sedemikian Β©.

iptables

Jika dalam /etc/sysconfig/iptables ini adalah:

*nat
:PREROUTING ACCEPT [0:0]

Ia tidak benar-benar mengganggu kami, jadi inilah:

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

Ia mengganggu.

Memandangkan knockd menambahkan peraturan pada penghujung rantai INPUT, kita akan mendapat penolakan.

Dan mematikan penolakan ini bermakna membuka kereta kepada semua angin.

Agar tidak tersesat dalam iptables apa yang perlu dimasukkan sebelum apa (seperti ini orang cadangkan) mari kita permudahkan:

  • lalai pada CentOS/Fedora 1 peraturan (β€œapa yang tidak dilarang adalah dibenarkan”) akan digantikan dengan sebaliknya,
  • dan kami mengalih keluar peraturan terakhir.

Hasilnya sepatutnya:

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

Anda boleh, sudah tentu, melakukan TOLAK dan bukannya DROP, tetapi dengan DROP kehidupan akan menjadi lebih menyeronokkan untuk bot.

3. Pelanggan

Tempat ini adalah yang paling menarik (dari sudut pandangan saya), kerana anda perlu bekerja bukan sahaja dari mana-mana pantai, tetapi juga dari mana-mana peranti.

Pada dasarnya, beberapa pelanggan disenaraikan di Online projek, tetapi ini daripada siri yang sama "semuanya ada di Internet." Oleh itu, saya akan menyenaraikan apa yang berfungsi di hujung jari saya di sini dan sekarang.

Apabila memilih pelanggan, anda perlu memastikan bahawa ia menyokong pilihan kelewatan antara paket. Ya, terdapat perbezaan antara pantai dan 100 megabit tidak pernah menjamin bahawa paket akan tiba dalam susunan yang betul pada masa yang tepat dari lokasi tertentu.

Dan ya, apabila menyediakan pelanggan, anda perlu memilih kelewatan itu sendiri. Terlalu banyak tamat masa - bot akan menyerang, terlalu sedikit - pelanggan tidak akan mempunyai masa. Terlalu banyak kelewatan - pelanggan tidak akan sampai tepat pada masanya atau akan ada konflik orang bodoh (lihat "rakes"), terlalu sedikit - paket akan hilang di Internet.

Dengan tamat masa=5s, kelewatan=100..500ms ialah pilihan yang berfungsi sepenuhnya

Windows

Tidak kira betapa lucunya bunyinya, ia agak tidak remeh bagi Google sebagai pelanggan ketuk yang jelas untuk platform ini. Supaya CLI menyokong kelewatan, TCP - dan tanpa haluan.

Sebagai alternatif, anda boleh cuba Inilah dia. Rupa-rupanya Google saya bukan kek.

Linux

Semuanya mudah di sini:

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

MacOS

Cara paling mudah ialah memasang port dari homebrew:
brew install knock
dan lukis fail kelompok yang diperlukan untuk arahan seperti:

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

iOS

Pilihan yang berfungsi ialah KnockOnD (percuma, dari kedai).

Android

"Ketuk Pelabuhan" Bukan pengiklanan, tetapi ia hanya berfungsi. Dan pemaju agak responsif.

Penurunan PS pada HabrΓ©, sudah tentu, Tuhan memberkati dia suatu hari nanti...

UPD1: terima kasih kepada kepada orang yang baik dijumpai pelanggan yang bekerja di bawah Windows.
UPD2: Yang lagi satu lelaki baik mengingatkan saya bahawa meletakkan peraturan baharu pada penghujung iptables tidak selalu berguna. Tetapi - ia bergantung.

Sumber: www.habr.com

Tambah komen