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 disshd_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.