Batasi akses SSH ke klien tertentu berdasarkan alamat IP

22

Bagaimana kita mengizinkan set Private IP tertentu untuk masuk melalui SSH login (pasangan kunci RSA) ke Linux Server?

Ranjan Kumar
sumber
3
Aturan firewall adalah tindakan biasa yang harus diambil
Raman Sailopal
2
firewall atau /etc/hosts.allow jika ssh kompilasi dengan pembungkus TCP atau / etc / ssh / sshd_config aturan file.
Rui F Ribeiro
lebih dari satu cara yang harus dilakukan, lihat linux.die.net/man/5/sshd_config yang menjelaskan semuanya dalam/etc/ssh/sshd_config
ron

Jawaban:

42

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

Opsi 1: Memfilter dengan IPTABLES

Aturan Iptables dievaluasi dalam urutan, hingga pertandingan pertama.

Misalnya, untuk mengizinkan lalu lintas dari jaringan 192.168.0.0/24 dan jika tidak drop lalu lintas (ke port 22). The DROPAturan tidak diperlukan jika iptables kebijakan default dikonfigurasi untuk 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 drop untuk mencocokkan lebih banyak jaringan / host. Jika Anda memiliki banyak jaringan atau alamat host, Anda harus menggunakan modul ipset . Ada juga modul iprange yang memungkinkan penggunaan rentang alamat IP sembarang.

Iptables tidak persisten di seluruh reboot. Anda perlu mengkonfigurasi beberapa mekanisme untuk mengembalikan iptables saat boot.

iptableshanya berlaku untuk lalu lintas IPv4. Sistem yang ssh mendengarkan alamat IPv6 dapat melakukan konfigurasi yang diperlukan ip6tables.

Opsi 2: Menggunakan pembungkus TCP

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 daftar host yang diizinkan di hosts.allow. Misalnya untuk memungkinkan 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 mengkonfigurasi daemon ssh di sshd_config untuk menggunakan metode otentikasi yang berbeda tergantung pada alamat klien / nama host. Jika Anda hanya ingin memblokir host lain agar tidak terhubung, Anda sebaiknya menggunakan iptables atau pembungkus TCP.

Pertama-tama hapus metode otentikasi standar:

PasswordAuthentication no
PubkeyAuthentication no

Kemudian tambahkan metode otentikasi yang diinginkan setelah Match Addressdi akhir file. Menempatkan Matchdi akhir file adalah penting, karena semua baris konfigurasi setelah ditempatkan di dalam blok bersyarat sampai Matchbaris berikutnya . Sebagai contoh:

Match Address 127.0.0.*
    PubkeyAuthentication yes

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

Argumen yang cocok dan opsi konfigurasi kondisional yang diperbolehkan didokumentasikan dalam halaman manual sshd_config . Pola kecocokan didokumentasikan dalam halaman manual ssh_config .

sebasth
sumber
Bagaimana dengan menambahkan arahan ListenAddress di / etc / ssh / sshd_config?
jerome
Dimungkinkan dalam situasi tertentu (misalnya mendengarkan alamat jaringan pribadi), tergantung pada konfigurasi jaringan Anda dan host mana yang ingin Anda izinkan.
sebasth
2
Selain itu, sshd_config dapat mengatur penyaringan dengan arahan AlowUsers, dan juga, otor_keys dapat diatur dengan 'dari IP atau subnet "untuk memfilter juga.
tonioc
@toni Solusi hebat untuk kasus penggunaan saya. Harap perluas saran ini menjadi jawaban.
simlev
jika Anda memiliki NIC dengan masing-masing 4 port pergi ke jaringan yang berbeda, maka default #ListenAddress ::di /etc/ssh/sshd_configakan memberi tahu SSH server untuk menerima masuk dari salah satu jaringan tersebut. Kalau tidak, lakukan di ListenAddress <ip address>mana <ip address>port NIC yang Anda inginkan diizinkan. Saya eth0adalah 192.168.3.4karena ListenAddress 192.168.3.4hasil SSH hanya bekerja pada jaringan 192.168.3.4 yang pada eth0; dan eth1 eth2 eth3 ditolak.
Ron
5

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

  • Tambahkan pemfilteran pengguna dengan AllowUsersopsi dalam sshd_configfile:

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

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

  • Batasi kunci ssh atau kunci berbasis ca untuk satu set alamat dalam .ssh/authorized_keysfile direktori home pengguna yang diberikan:

    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.

tonioc
sumber