GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara (selanjutnya) memastikan keamanan SSH?

Lakukan mitigasi sebanyak mungkin.

Tujuan Anda adalah untuk memaksa berbagai macam penyerang potensial untuk menghabiskan lebih banyak usaha, sumber daya, waktu komputer (dan dengan demikian tagihan listrik), dan terutama "terampil" (jarang atau langka, dan dengan demikian berharga) jam kerja. Tidak ada perlindungan yang bekerja melawan setiap ancaman. Tidak semua ancaman dapat dilindungi saat masih ada di internet.

Namun, sejumlah besar ancaman (script kiddies dan penyerang berketerampilan rendah atau sumber daya rendah) dapat dikalahkan hampir sepanjang waktu dengan memiliki pertahanan yang mendalam - banyak lapisan keamanan yang baik dan solid, yang masing-masing seharusnya - secara teoritis - cukup untuk mengalahkan banyak ancaman dengan sendirinya. Jadi, ketika aturan iptables sistem Anda membiarkan seseorang masuk secara tidak sengaja, otentikasi sertifikat SSHD mencegahnya. Ketika layanan SSHD Anda memiliki kelemahan, VPN Anda mencegah siapa pun untuk melihatnya. Ketika VPN dan SSHD Anda memiliki kelemahan pada saat yang sama, aturan firewall Anda bahkan mencegah sebagian besar alamat IP dunia untuk mencobanya, sehingga hanya penduduk lokal dan botnet besar yang dapat mencoba dan mengeksploitasi kerentanan, yang Anda tambal sebagai sesegera mungkin.

Jadi, saya katakan lagi, lakukan mitigasi sebanyak mungkin pada level sebanyak mungkin. Anda tidak dapat mengetahui sebelumnya mana yang memiliki kerentanan yang belum ditemukan, dan urutan mana yang akan dieksploitasi.

  • Pastikan Anda hanya mengizinkan SSH v2

    • sshd_config

      • Protokol 2
  • Tetap ditambal

  • Gunakan iptables Anda untuk HANYA mengizinkan alamat IP atau rentang yang benar-benar Anda gunakan

  • Siapkan SSH Anda untuk mengizinkan akses HANYA dengan sertifikat, bukan dengan nama pengguna/kata sandi, sesuai situs bantuan Ubuntu SSH/OpenSSH/Halaman konfigurasi

    • sshd_config

      • PubkeyAuthentication ya

      • PasswordAutentikasi no

    • Jika Anda menggunakan direktori home terenkripsi

      • AuthorizedKeysFile /etc/ssh/%u/authorized_keys
    • Jika tidak, pengaturan normal untuk direktori home dapat berfungsi

      • AuthorizedKeysFile %h/.ssh/authorized_keys

      • Pastikan tidak ada izin berlebihan untuk itu.

        • chmod 700 ~/.ssh

        • chmod 600 ~/.ssh/authorized_keys

        • chmod go-w ~

    • Dan siapkan sertifikat sekuat mungkin. Membuat kunci tercakup di halaman SSH/OpenSSH/Keys situs bantuan Ubuntu

      • Saya akan mulai dengan kunci RSA 4096 bit atau kunci ed25519 dengan frasa sandi yang panjang dan kuat. Pastikan untuk membuatnya secara lokal, ketik frasa sandi yang panjang dan kuat saat diminta, gunakan -o untuk memastikan format kunci OpenSSH 6.5 yang baru, dan pastikan server tidak memiliki apa pun selain kunci publik.

        • ssh-keygen -o -t ed25519 -f ~/.ssh/id_ed25519

        • ssh-keygen -o -b 4096 -t rsa -f ~/.ssh/id_rsa

        • Untuk memeriksa panjang kunci yang ada, gunakan ssh-keygen -e -f mykeyfile

    • Jika bisa, batasi kunci di file authorized_keys ke alamat IP tertentu atau kumpulan nama host

    • Jika Anda menggunakan OpenSSH 6.8 atau lebih tinggi, Anda juga dapat membatasi kunci resmi untuk jenis tertentu di sshd_config

      • PubkeyAcceptedKeyTypes ssh-ed25519*,ssh-rsa*
  • Gunakan fail2ban untuk membuat upaya kekerasan membutuhkan lebih banyak usaha (mis. membuat mereka menggunakan botnet daripada hanya satu mesin, atau membuatnya memakan banyak waktu)

    • Menyiapkan sertifikat (kunci) lebih baik jika Anda bertanya mana yang harus dilakukan terlebih dahulu
  • Kurangi waktu tenggang login Anda

    • Jika Anda menggunakan sertifikat, Anda memiliki opsi untuk menurunkannya CARANYA kecuali Anda menggunakan koneksi yang sangat, sangat lambat

      • LoginGraceTime 8
    • Jika tidak, seberapa cepat Anda mengetik?

      • LoginGraceTime 20
  • Kontrol pilihan cipher suite Anda dengan informasi dari Mozilla.org Security/Guidelines/OpenSSH

    • Karena itu server Anda, dan hanya Anda yang masuk, Anda dapat memilih pengelompokan yang sangat, sangat ketat sehingga hanya klien paling modern yang diperbolehkan. Mungkin

    • HostKey /etc/ssh/ssh_host_rsa_key

      • sudo ssh-keygen -o -N '' -b 4096 -t rsa -f /etc/ssh/ssh_host_rsa_key

        • atau

        • HostKey /etc/ssh/ssh_host_ed25519_key

        • sudo ssh-keygen -o -N '' -t ed25519 -f /etc/ssh/ssh_host_ed25519_key

      • jelas cocok persis dengan nama file HostKey Anda!

        • atau keduanya (paling disukai dulu)

        • hapus semua kunci dsa seluruhnya; mereka diperbaiki pada 1024 bit yang menyedihkan untuk SSH

    • Gunakan arahan ssh -Q untuk menentukan apa yang didukung sistem Anda untuk opsi cipher suite

    • KexAlgorithms [email protected]

    • Sandi [email protected],[email protected],[email protected]

    • MAC [email protected]

    • Atau pilihan spesifik apa pun yang membuat Anda merasa paling aman

    • Dan ikuti literatur; jika ada kekurangan pada sesuatu yang Anda pilih, pilih sesuatu yang tidak diketahui kekurangannya pada saat itu.

  • Gunakan iptables (atau firewall) Anda dengan daftar blokir dari I-blocklist

  • Gunakan iptables Anda (atau firewall) dengan daftar IP berbasis geografis atau ISP; salah satu sumber daftar geografis tersebut adalah maxmind.com

  • Beralih ke port dalam rentang port dinamis (efemeral) 49152 hingga 65535 per RFC6335

    • Dan hanya ikat ke alamat IP yang diperlukan
  • Blokir semua port lain di server itu melalui iptables; kemungkinan Anda terkena BANYAK serangan

    • Terutama keraskan database MySQL Anda, jika ada - saya melihat BANYAK serangan MySQL (dan SQL Server) di IDS saya, dan saya tidak pernah menjalankan salah satunya atau membuka salah satu port. Setel ke lokal, hanya IP yang tidak dapat dirutekan, dll., kata sandi panjang, nonaktifkan, dll.

    • Terutama nonaktifkan server web apa pun, atur ke lokal, IP yang tidak dapat dirutekan saja, dll.

  • Gunakan port knocking per situs bantuan Ubuntu atau artikel DigitalOcean

  • Tingkat batas upaya koneksi baru, per jawaban ini untuk pertanyaan ServerFault "Ratusan login ssh gagal"

iptables -A INPUT -p tcp --dport 22 -m terbaru --update --detik 60 --hitcount 5 --nama SSH --rsource -j DROP

iptables -A INPUT -p tcp --dport 22 -m terbaru --set --name SSH --rsource -j ACCEPT

  • Pertimbangkan untuk menggunakan chroot per dokumentasi Debian"OpenSSH SFTP chroot() dengan ChrootDirectory"

  • Pastikan rhosts dinonaktifkan dengan opsi sshd_config

    • IgnoreRhost ya

    • RhostsRSAAotentikasi no

    • RhostsAutentikasi no

  • Tambahkan lebih banyak batasan pada proses pra-autentikasi tanpa hak istimewa

    • Gunakan kotak pasir PrivilegeSeparation
  • Jika Anda tidak menggunakan fowarding atau tunneling, nonaktifkan di sshd_config

    • X11Nomor penerusan

    • AllowTcpForwarding no

    • GatewayPort no

    • PermitTunnel no

  • Cegah penyiapan tidak aman lainnya di direktori atau izin

    • StrictModes ya

    • Dan kemudian periksa izin dan pengaturan Anda sampai berfungsi kembali :)

  • Nonaktifkan autentikasi berbasis host

    • HostbasedAuthentication no
  • Perhatikan bahwa berdasarkan jawaban Serverfault ini untuk "daemon OpenSSH mengabaikan arahan ServerKeyBits", arahan ServerKeyBits sshd_config lama tidak lagi berlaku, karena Anda tidak mengizinkan SSH v1 sejak awal.

  • Jangan izinkan root di sshd_config

    • PermitRootLogin no
  • Jangan izinkan pengguna yang berbeda - mungkin pengguna layanan pada beberapa paket yang Anda instal - memiliki opsi lain

    • PermitUserEnvironment no
  • Instal firewall all-up terpisah seperti pfSense atau Ubiquiti Edgerouter Lite antara mesin itu dan dunia luar.

    • Kemudian gunakan VPN bawaan SELAIN login SSH Anda yang dikeraskan

    • Juga dengan login berbasis sertifikat, bukan login berbasis nama pengguna/sandi

    • Jika Anda menggunakan OpenVPN

      • Pastikan untuk menggunakan --tls-auth "ta.key" kunci yang dibagikan sebelumnya juga

      • Dan pilih cipher yang lebih baik daripada default

    • Dan gunakan juga daftar blokir yang disebutkan di atas pada level ini

Seperti yang disebutkan DeerHunter, mengubah ssh dan/atau iptables dan/atau pengaturan firewall lainnya tanpa cara lain dapat mengakibatkan kurangnya kemampuan SSH.


Ini dia:

  • Buat kunci SSH + lindungi dengan kata sandi
  • Izinkan hanya pengguna tertentu untuk masuk (Izinkan Pengguna)
  • Izinkan dari IP tertentu [email protected]
  • Ubah port default
  • Buat aturan firewall
  • dan yang terakhir instal fail2ban.

Linux
  1. Cara Mengubah Port SSH Di Linux

  2. Cara Mengatur Tunneling SSH

  3. Cara Mengatur Kunci SSH

  1. Bagaimana Cara Membuat Bilah Aktivitas Gnome Shell Kecil Sepanjang Waktu?

  2. Cara membuat VPN

  3. CentOS / RHEL :Cara membatasi login SSH berdasarkan waktu

  1. Bagaimana cara membuat ssh masuk sebagai pengguna yang tepat?

  2. Bagaimana cara membuat Shared Keys .ssh/authorized_keys dan sudo bekerja sama?

  3. Bagaimana cara membuat aturan iptables kedaluwarsa?