Perlindungan server Linux. Apa yang harus dilakukan terlebih dahulu

Perlindungan server Linux. Apa yang harus dilakukan terlebih dahulu
Habib M'henni/Wikimedia Commons, CC BY-SA

Saat ini, menyiapkan server di hosting hanya membutuhkan beberapa menit dan beberapa klik mouse. Namun segera setelah diluncurkan, dia mendapati dirinya berada dalam lingkungan yang tidak bersahabat, karena dia terbuka terhadap seluruh Internet seperti gadis lugu di diskotik rocker. Pemindai akan segera menemukannya dan menemukan ribuan bot dengan skrip otomatis yang menjelajahi jaringan untuk mencari kerentanan dan konfigurasi yang salah. Ada beberapa hal yang harus Anda lakukan segera setelah peluncuran untuk memastikan perlindungan dasar.

kadar

Pengguna non-root

Hal pertama yang perlu Anda lakukan adalah membuat pengguna non-root. Intinya adalah pengguna root hak istimewa absolut dalam sistem, dan jika Anda mengizinkannya melakukan administrasi jarak jauh, maka Anda akan melakukan separuh pekerjaan untuk peretas, meninggalkan nama pengguna yang valid untuknya.

Oleh karena itu, Anda perlu membuat pengguna lain, dan menonaktifkan administrasi jarak jauh melalui SSH untuk root.

Pengguna baru dibuat dengan perintah useradd:

useradd [options] <username>

Kemudian kata sandi ditambahkan untuk itu dengan perintah passwd:

passwd <username>

Terakhir, pengguna ini perlu ditambahkan ke grup yang memiliki hak untuk menjalankan perintah dengan hak istimewa yang lebih tinggi sudo. Tergantung pada distribusi Linux, grup ini mungkin berbeda. Misalnya, di CentOS dan Red Hat, pengguna ditambahkan ke grup wheel:

usermod -aG wheel <username>

Di Ubuntu itu ditambahkan ke grup sudo:

usermod -aG sudo <username>

Kunci, bukan kata sandi SSH

Brute force atau kebocoran kata sandi adalah vektor serangan standar, jadi lebih baik nonaktifkan otentikasi kata sandi di SSH (Secure Shell) dan gunakan otentikasi kunci sebagai gantinya.

Ada berbagai program untuk mengimplementasikan protokol SSH, seperti lsh и dropbear, tapi yang paling populer adalah OpenSSH. Menginstal klien OpenSSH di Ubuntu:

sudo apt install openssh-client

Instalasi server:

sudo apt install openssh-server

Memulai daemon SSH (sshd) di server Ubuntu:

sudo systemctl start sshd

Memulai daemon secara otomatis pada setiap boot:

sudo systemctl enable sshd

Perlu dicatat bahwa bagian server OpenSSH mencakup bagian klien. Artinya, melalui openssh-server Anda dapat terhubung ke server lain. Selain itu, dari mesin klien Anda, Anda dapat meluncurkan terowongan SSH dari server jarak jauh ke host pihak ketiga, dan kemudian host pihak ketiga akan menganggap server jarak jauh sebagai sumber permintaan. Fungsi yang sangat nyaman untuk menutupi sistem Anda. Untuk lebih jelasnya lihat artikel. "Tips praktis, contoh, dan terowongan SSH".

Biasanya tidak ada gunanya menginstal server lengkap pada mesin klien untuk mencegah kemungkinan koneksi jarak jauh ke komputer (untuk alasan keamanan).

Jadi, untuk pengguna baru Anda, Anda harus terlebih dahulu membuat kunci SSH di komputer tempat Anda akan mengakses server:

ssh-keygen -t rsa

Kunci publik disimpan dalam sebuah file .pub dan terlihat seperti serangkaian karakter acak yang dimulai dengan ssh-rsa.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname

Kemudian, sebagai root, buat direktori SSH di server di direktori home pengguna dan tambahkan kunci publik SSH ke file authorized_keysmenggunakan editor teks seperti Vim:

mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys

vim /home/user_name/.ssh/authorized_keys

Terakhir, atur izin yang benar untuk file tersebut:

chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys

dan ubah kepemilikan ke pengguna ini:

chown -R username:username /home/username/.ssh

Di sisi klien, Anda perlu menentukan lokasi kunci rahasia untuk otentikasi:

ssh-add DIR_PATH/keylocation

Sekarang Anda dapat masuk ke server dengan nama pengguna menggunakan kunci ini:

ssh [username]@hostname

Setelah otorisasi, Anda dapat menggunakan perintah scp untuk menyalin file, utilitas sshfs untuk memasang sistem file atau direktori dari jarak jauh.

Dianjurkan untuk membuat beberapa salinan cadangan kunci pribadi, karena jika Anda menonaktifkan otentikasi kata sandi dan kehilangannya, Anda tidak akan bisa masuk ke server Anda sendiri sama sekali.

Seperti disebutkan di atas, di SSH Anda perlu menonaktifkan otentikasi untuk root (untuk alasan ini kami membuat pengguna baru).

Di CentOS/Red Hat kami menemukan garisnya PermitRootLogin yes dalam file konfigurasi /etc/ssh/sshd_config dan mengubahnya:

PermitRootLogin no

Di Ubuntu tambahkan baris PermitRootLogin no ke file konfigurasi 10-my-sshd-settings.conf:

sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Setelah memverifikasi bahwa pengguna baru diautentikasi menggunakan kunci mereka, Anda dapat menonaktifkan otentikasi kata sandi untuk menghilangkan risiko kebocoran kata sandi atau kekerasan. Sekarang, untuk mengakses server, penyerang perlu mendapatkan kunci pribadi.

Di CentOS/Red Hat kami menemukan garisnya PasswordAuthentication yes dalam file konfigurasi /etc/ssh/sshd_config dan mengubahnya sebagai berikut:

PasswordAuthentication no

Di Ubuntu tambahkan baris PasswordAuthentication no untuk mengajukan 10-my-sshd-settings.conf:

sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Untuk petunjuk tentang cara mengaktifkan otentikasi dua faktor melalui SSH, lihat di sini.

Tembok api

Firewall memastikan bahwa hanya lalu lintas pada port yang Anda izinkan secara langsung yang akan masuk ke server. Hal ini melindungi terhadap eksploitasi port yang secara tidak sengaja diaktifkan oleh layanan lain, sehingga sangat mengurangi permukaan serangan.

Sebelum memasang firewall, Anda perlu memastikan bahwa SSH termasuk dalam daftar pengecualian dan tidak akan diblokir. Jika tidak, setelah memulai firewall, kami tidak akan dapat terhubung ke server.

Distribusi Ubuntu dilengkapi dengan Firewall Tidak Rumit (ufw), dan dengan CentOS/Red Hat - firewalld.

Mengizinkan SSH di firewall di Ubuntu:

sudo ufw allow ssh

Di CentOS/Red Hat kami menggunakan perintah firewall-cmd:

sudo firewall-cmd --zone=public --add-service=ssh --permanent

Setelah prosedur ini, Anda dapat memulai firewall.

Di CentOS/Red Hat kami meluncurkan layanan systemd untuk firewalld:

sudo systemctl start firewalld
sudo systemctl enable firewalld

Di Ubuntu kami menggunakan perintah berikut:

sudo ufw enable

Fail2Ban

Layanan Fail2Ban menganalisis log server dan menghitung jumlah upaya akses dari setiap alamat IP. Pengaturan menentukan aturan berapa banyak upaya akses yang diperbolehkan dalam interval tertentu - setelah itu alamat IP ini diblokir untuk jangka waktu tertentu. Misalnya, kami mengizinkan 5 upaya otentikasi yang gagal melalui SSH dalam jangka waktu 2 jam, setelah itu kami memblokir alamat IP ini selama 12 jam.

Menginstal Fail2Ban di CentOS dan Red Hat:

sudo yum install fail2ban

Instalasi di Ubuntu dan Debian:

sudo apt install fail2ban

Meluncurkan:

systemctl start fail2ban
systemctl enable fail2ban

Program ini memiliki dua file konfigurasi: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. Pembatasan larangan ditentukan dalam file kedua.

Penjara untuk SSH diaktifkan secara default dengan pengaturan default (5 upaya, interval 10 menit, larangan selama 10 menit).

[DEFAULT] abaikan perintah = bantime = 10 menit waktu pencarian = 10 menit percobaan ulang maks = 5

Selain SSH, Fail2Ban dapat melindungi layanan lain di server web nginx atau Apache.

Pembaruan keamanan otomatis

Seperti yang Anda ketahui, kerentanan baru selalu ditemukan di semua program. Setelah informasi dipublikasikan, eksploitasi ditambahkan ke paket eksploitasi populer, yang banyak digunakan oleh peretas dan remaja saat memindai semua server secara berurutan. Oleh karena itu, sangat penting untuk menginstal pembaruan keamanan segera setelah tersedia.

Server Ubuntu mengaktifkan pembaruan keamanan otomatis secara default, jadi tidak diperlukan langkah tambahan.

Di CentOS/Red Hat Anda perlu menginstal aplikasi dnf-otomatis dan nyalakan pengatur waktu:

sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer

Pemeriksaan pengatur waktu:

sudo systemctl status dnf-automatic.timer

Mengubah port default

SSH dikembangkan pada tahun 1995 untuk menggantikan telnet (port 23) dan ftp (port 21), sehingga pembuat programnya adalah Tatu Iltonen memilih port 22 secara default, dan itu disetujui oleh IANA.

Secara alami, semua penyerang mengetahui port mana yang menjalankan SSH - dan memindainya bersama dengan port standar lainnya untuk mengetahui versi perangkat lunak, untuk memeriksa kata sandi root standar, dan sebagainya.

Mengubah port standar - kebingungan - mengurangi volume lalu lintas sampah, ukuran log dan beban pada server beberapa kali, dan juga mengurangi permukaan serangan. Meskipun beberapa mengkritik metode “pertahanan melalui ketidakjelasan” ini (keamanan melalui ketidakjelasan). Pasalnya, teknik ini bertentangan dengan fundamental perlindungan arsitektur. Oleh karena itu, misalnya, Institut Standar dan Teknologi Nasional AS "Panduan Keamanan Server" menunjukkan perlunya arsitektur server terbuka: “Keamanan suatu sistem tidak boleh bergantung pada kerahasiaan implementasi komponen-komponennya,” kata dokumen tersebut.

Secara teori, mengubah port default bertentangan dengan praktik arsitektur terbuka. Namun dalam praktiknya, volume lalu lintas berbahaya justru menurun, jadi ini adalah tindakan yang sederhana dan efektif.

Nomor port dapat dikonfigurasi dengan mengubah arahan Port 22 dalam file konfigurasi / etc / ssh / sshd_config. Hal ini juga ditunjukkan oleh parameter -p <port> в sshd. Klien dan program SSH sftp juga mendukung parameter -p <port>.

Parameter -p <port> dapat digunakan untuk menentukan nomor port saat menghubungkan menggunakan perintah ssh di Linux. DI DALAM sftp и scp parameter digunakan -P <port> (huruf besar P). Menentukannya dari baris perintah akan menimpa nilai apa pun dalam file konfigurasi.

Jika ada banyak server, hampir semua tindakan untuk melindungi server Linux ini dapat diotomatiskan dalam skrip. Namun jika hanya ada satu server, maka lebih baik mengontrol prosesnya secara manual.

Tentang Hak Periklanan

Pesan dan mulai bekerja segera! Pembuatan VDS konfigurasi apa pun dan dengan sistem operasi apa pun dalam satu menit. Konfigurasi maksimum akan memungkinkan Anda bersenang-senang - 128 inti CPU, RAM 512 GB, NVMe 4000 GB. Cukup epik :)

Perlindungan server Linux. Apa yang harus dilakukan terlebih dahulu

Sumber: www.habr.com