GNU/Linux >> Belajar Linux >  >> Linux

Batasi akses SSH ke klien tertentu berdasarkan alamat IP

Anda dapat membatasi host mana yang dapat terhubung dengan mengonfigurasi pembungkus TCP atau memfilter lalu lintas jaringan (firewalling) menggunakan iptables. Jika Anda ingin menggunakan metode autentikasi yang berbeda bergantung pada alamat IP klien, konfigurasikan daemon SSH sebagai gantinya (opsi 3).

Opsi 1:Memfilter dengan IPTABLES

Aturan iptables dievaluasi secara berurutan, hingga pertandingan pertama.

Misalnya, untuk mengizinkan lalu lintas dari jaringan 192.168.0.0/24 dan sebaliknya menghentikan lalu lintas (ke port 22). DROP aturan tidak diperlukan jika kebijakan default iptables Anda dikonfigurasi ke DROP .

iptables -A INPUT -p tcp --dport 22 --source 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

Anda dapat menambahkan lebih banyak aturan sebelum aturan lepas untuk mencocokkan lebih banyak jaringan/host. Jika Anda memiliki banyak jaringan atau alamat host, sebaiknya gunakan ipset modul. Ada juga iprange modul yang memungkinkan penggunaan sembarang rentang alamat IP.

Iptables tidak persisten di seluruh reboot. Anda perlu mengonfigurasi beberapa mekanisme untuk memulihkan iptables saat boot.

iptables hanya berlaku untuk lalu lintas IPv4. Sistem yang memiliki ssh mendengarkan alamat IPv6, konfigurasi yang diperlukan dapat dilakukan dengan ip6tables .

Opsi 2:Menggunakan pembungkus TCP

Catatan:ini mungkin bukan opsi pada distribusi modern, karena dukungan untuk tcpwrappers telah dihapus dari OpenSSH 6.7

Anda juga dapat mengonfigurasi host mana yang dapat terhubung menggunakan pembungkus TCP. Dengan pembungkus TCP, selain alamat IP, Anda juga dapat menggunakan nama host dalam aturan.

Secara default, tolak semua host.

/etc/hosts.deny :

sshd : ALL

Kemudian daftarkan host yang diizinkan di hosts.allow. Misalnya untuk mengizinkan jaringan 192.168.0.0/24 dan localhost .

/etc/hosts.allow :

sshd : 192.168.0.0/24
sshd : 127.0.0.1
sshd : [::1]

Opsi 3:konfigurasi daemon SSH

Anda dapat mengonfigurasi daemon ssh di sshd_config untuk menggunakan metode autentikasi berbeda tergantung pada alamat/nama host klien. Jika Anda hanya ingin memblokir host lain agar tidak terhubung, Anda sebaiknya menggunakan iptables atau pembungkus TCP.

Hapus terlebih dahulu metode autentikasi default:

PasswordAuthentication no
PubkeyAuthentication no

Kemudian tambahkan metode autentikasi yang diinginkan setelah Match Address di akhir file. Menempatkan Match di akhir file itu penting, karena semua baris konfigurasi setelahnya ditempatkan di dalam blok bersyarat hingga Match berikutnya garis. Misalnya:

Match Address 127.0.0.*
    PubkeyAuthentication yes

Klien lain masih dapat terhubung, tetapi login akan gagal karena tidak ada metode autentikasi yang tersedia.

Argumen yang cocok dan opsi konfigurasi bersyarat yang diizinkan didokumentasikan di halaman manual sshd_config. Pola kecocokan didokumentasikan di halaman manual ssh_config.


Berikut beberapa konfigurasi tambahan untuk daemon SSH untuk memperluas jawaban sebelumnya:

  • Tambahkan pemfilteran pengguna dengan AllowUsers opsi di sshd_config berkas:

    AllowUsers [email protected]* [email protected]* otherid1 otherid2
    

    Ini mengizinkan johndoe dan admin2 hanya dari 192.168.1.* alamat dan otherid1 , otherid2 dari mana saja.

  • Batasi kunci ssh atau kunci berbasis ca ke sekumpulan alamat di .ssh/authorized_keys file direktori home pengguna tertentu:

    from="192.168.1.*,192.168.2.*" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABA...etc...mnMo7n1DD useralias
    

    Dalam contoh ini, kunci publik untuk useralias hanya akan efektif dari alamat yang diberikan.


Linux
  1. Batasi Posix Temukan Ke Kedalaman Tertentu?

  2. Ssh – Membatasi Pengguna Ssh/scp/sftp ke Direktori?

  3. Ssh – Mencatat Upaya Akses Ssh?

  1. Bagaimana Cara Ssh Ke Direktori Tertentu?

  2. Bagaimana Cara Membuat Pengguna Baru Dengan Akses Ssh?

  3. Izinkan Akses Ssh Jarak Jauh?

  1. Bunuh semua proses pengguna tertentu melalui SSH

  2. Cara mendapatkan alamat memori tertentu menggunakan C

  3. Haruskah saya membatasi paket dengan iptables?