Meningkatkan keamanan dan perlindungan server Linux / CentOS di Internet

Pada artikel ini, kita akan membahas konsep dasar dan pengaturan khusus yang akan membantu meningkatkan keamanan server CentOS Anda di Internet. Menggunakan pendekatan ini akan meningkatkan perlindungan server dari peretasan dan infeksi. Manual ini untuk sebagian besar bersifat universal dan poin utama cocok untuk meningkatkan keamanan server Linux.

Konten:

  • Opsi partisi dan pemasangan untuk disk drive untuk isolasi
  • Menginstal dan memperbarui perangkat lunak di Linux (CentOS)
  • Perlindungan SSH, otorisasi utama
  • Kata sandi Linux berubah secara teratur
  • Meningkatkan keamanan server dengan SELinux
  • Konfigurasikan Firewalld
  • Hapus instalan X Windows
  • Perlindungan kernel Linux
  • Izin file Linux
  • Keamanan server web
  • Perlindungan Server Fisik
  • Cadangan server Linux

Opsi partisi dan pemasangan untuk disk drive untuk isolasi

Saat memasang CentOS (dan distribusi Linux apa pun) pada tahap partisi disk, jangan membuat satu partisi, tetapi pisahkan web-ruang dari partisi utama, juga membuat partisi sistem:

  • / root
  • / boot
  • / var
  • / tmp
  • /

Saat mengisolasi partisi, penyerang tidak akan dapat naik di atas direktori web saat meretas situs dan memasukkan skrip berbahaya ke dalamnya.

Gunakan opsi khusus untuk memasang beberapa partisi dengan aman:

  • noexec - tidak memungkinkan untuk menjalankan file biner (tidak dapat digunakan pada direktori root, karena ini akan menyebabkan sistem tidak dapat dioperasikan);
  • simpulv - mengasumsikan bahwa file perangkat tidak akan dibuat pada sistem file yang dipasang / dev. Juga tidak berlaku untuk direktori root;
  • tidak cairan - melarang operasi dengan suid dan sgid bit.

Parameter ini dapat diatur ke direktori hanya jika ada sebagai bagian yang terpisah. Anda dapat menyesuaikan / etc / fstab sesuai dengan rekomendasi berikut, jika Anda memiliki partisi pada disk:

  • / rumah - mount dengan opsi simpulv, tidak cairan, usrquota (pencantuman kuota);
  • / boot - mount dengan opsi simpulv, tidak cairan, novis - bagian ini diperlukan untuk mem-boot sistem, kami melarang apa pun untuk mengubahnya;
  • / var - tidak cairan - berjalan sebagai root tidak dilarang;
  • / var / log - mount dengan opsi nodev, nosuid, noexeс;
  • / var / www - mount dengan opsi nodev, nosuid;
  • / tmp - mount dengan opsi nodev, nosuid, noexe - bagian ini hanya diperlukan untuk menyimpan dan merekam file sementara.
Semua bagian di atas sudah terpasang dengan opsi rw (dapat direkam).

Menginstal dan memperbarui perangkat lunak di Linux (CentOS)

Saat memasang server, jangan pernah gunakan distribusi OS yang dikompilasi oleh orang yang tidak dikenal. Unduh distribusi hanya dari mirror resmi dan jangan gunakan file kickstart orang lain untuk instalasi. Jika Anda tidak memahami kode orang lain, lebih baik untuk membatalkan usaha ini sama sekali dan menginstal semuanya secara manual, atau menganalisis file kickstart sepenuhnya agar tidak menginstal sesuatu yang jahat di server Anda.

Instal hanya perangkat lunak minimum yang disyaratkan. Instalasi dan pengaturan hanya untuk kasing dan dengan bantuan pemasang yum dan dnf. Periksa semua perangkat lunak yang diinstal dan hapus paket yang tidak perlu:

daftar yum diinstal
daftar nama paket yum
yum hapus packageName

Gunakan hanya repositori paket resmi dan tepercaya..

Jangan gunakan FTP yang tidak terenkripsi, Telnet, Rlogin, Rsh.

Nonaktifkan layanan yang tidak digunakan di server Anda jika saat ini penghapusan layanan tidak cocok untuk Anda.

Untuk memeriksa daftar semua layanan, gunakan perintah:

systemctl daftar-unit-file --type = layanan

Untuk menonaktifkan dan menghapus layanan dari startup di CentOS, gunakan systemctl:

layanan berhenti systemctl
layanan menonaktifkan systemctl

Misalnya, untuk menonaktifkan layanan httpd perintah berikut digunakan:

systemctl menghentikan httpd.service
systemctl menonaktifkan httpd.service

Selalu perbarui peranti lunak yang diinstal di server Anda. Perangkat lunak yang diperbarui tepat waktu akan melindungi Anda dari kerentanan yang diketahui. Anda dapat mengatur pembaruan sistem otomatis sehingga Anda tidak harus melakukan ini secara manual setiap kali.

pembaruan yum - pembaruan sistem

Perlindungan SSH, otorisasi utama

Untuk otorisasi aman di server, gunakan kunci pribadi. Buat kunci menggunakan utilitas ssh-keygen:

# ssh-keygen

Menghasilkan pasangan kunci publik / swasta. Masukkan file untuk menyimpan kunci (/root/.ssh/id_rsa): Masukkan frasa sandi (kosong tanpa frasa sandi): Masukkan frasa sandi yang sama lagi: Identifikasi Anda telah disimpan di /root/.ssh/id_rsa. Kunci publik Anda telah disimpan di /root/.ssh/id_rsa.pub. Sidik jari kunci adalah: SHA256: ffIDjWIfOgMZmOVbQmDWaOCADK4G3cYYy0dTIjqLkD8 [email protected] Gambar randomart kunci adalah: + --- [RSA 2048] ---- + | * + .B = + | | oO @oO. | | *. *. B +. | | = + o *. o | | + .E + S * o | | ... o + * | | +. o | | o. | | | + ---- [SHA256]-----+ 

Setelah generasi, Anda dapat terhubung menggunakan kunci ini ke server, melalui ssh-klien.

Buat pengguna tambahan dan jalankan perintah melalui sudo.

sudo groupadd sudo - buat grup sudo

adduser webmaster - buat pengguna

webmaster passwd - ubah kata sandi

usermod -aG sudo webmaster - tambahkan pengguna ke grup sudo

Dalam file / etc / sudoers tambahkan baris:

% sudo ALL = (ALL: ALL) ALL

Nonaktifkan dalam pengaturan ssh-otorisasi server melalui root dan login / kata sandi:

nano / etc / ssh / sshd_config

Dan ubah nilai garis di bawah ini menjadi:

PermitRootLogin tanpa Kata SandiAuthentication no ChallengeResponseAuthentication no UsePAM no AuthenticationMethods publickey PubkeyAuthentication ya 

Ubah port default untuk ssh. Port default untuk ssh, akan cenderung retak di tempat pertama.

Untuk mengubah port standar menjadi ssh, dalam file konfigurasi / etc / ssh / sshd_config ganti nilai di baris:

Port 22

Kata sandi Linux berubah secara teratur

Jika Anda masih menggunakan kata sandi untuk otorisasi di Linux, konfigurasikan kata sandi untuk kata sandi melalui utilitas kejar.

Untuk memeriksa berapa hari kata sandi akan valid untuk setiap pengguna, gunakan perintah:

chage -l root

Secara default, saya memiliki 99999 hari yang ditetapkan untuk root:

# chage -l root

Perubahan kata sandi terakhir: tidak pernah Kata sandi kedaluwarsa: tidak pernah Kata sandi tidak aktif: tidak pernah Akun kedaluwarsa: tidak pernah Jumlah hari minimum antara perubahan kata sandi: 0 Jumlah hari maksimum antara perubahan kata sandi: 99999 Jumlah hari peringatan sebelum kata sandi berakhir: 7 

Untuk mengubah periode validitas kata sandi (misalnya, 9 hari), gunakan perintah:

chage -M 9 root

Sekarang, ketika memeriksa informasi kedaluwarsa kata sandi untuk pengguna root, informasinya telah berubah:

# chage -l root

Perubahan kata sandi terakhir: tidak pernah Kata sandi kedaluwarsa: tidak pernah Kata sandi tidak aktif: tidak pernah Akun kedaluwarsa: tidak pernah Jumlah hari minimum antara perubahan kata sandi: 0 Jumlah hari maksimum antara perubahan kata sandi: 9 Jumlah hari peringatan sebelum kata sandi berakhir: 7 

Anda bisa mendapatkan lebih banyak opsi untuk utilitas chage dari bantuan:

man chage

Untuk memblokir pengguna saat memasukkan kata sandi yang salah, gunakan utilitas fail2ban (memungkinkan Anda menerapkan analog kebijakan grup untuk penguncian akun di Windows). Fail2ban melindungi server dan layanan Linux dari tebakan kata sandi.

Untuk menginstal run fail2ban:

yum instal epel-release fail2ban -y

File konfigurasi fail2ban terletak di /etc/fail2ban/jail.conf. Pengaturan yang akan kami sentuh:

  • bantime = 600 - larangan waktu memblokir
  • maxretry = 3 - jumlah upaya untuk memasukkan kata sandi salah, setelah itu pengguna akan diblokir
  • menemukan waktu = 600 - periode waktu di mana pengguna harus masuk

Pengaturan lain digunakan sesuai keinginan. Selain itu, Anda dapat mengonfigurasi pengiriman laporan ke email Anda.

Buat file /etc/fail2ban/jail.local dan tambahkan baris berikut di sana:

Setelah mengubah file konfigurasi, restart layanan.

[DEFAULT] ignip = 127.0.0.1/24 [ssh-iptables] diaktifkan = true port = ssh filter = sshd action = iptables [name = sshd, port = ssh, protokol = tcp] logpath = / var / log / secure 

Kemudian simpan file dan mulai ulang layanan fail2ban:

systemctl restart fail2ban

Jadi, kami menyiapkan pemblokiran pengguna untuk ssh:

Jika kata sandi yang dimasukkan salah, saya diblokir selama 10 menit. Anda dapat mengonfigurasi fail2ban agar berfungsi dengan layanan apa pun yang berfungsi dengan pengguna, misalnya:

  • proftpd
  • exim
  • postfix

Meningkatkan keamanan server dengan SELinux

Biasanya ketika mengatur server, saya mematikan SELinux, walaupun ini tidak dianjurkan. Tapi pengaturan SELinux sangat spesifik dan luas. Mengkonfigurasi SELinux di server dapat memakan waktu beberapa hari. Jika Anda punya waktu untuk mengkonfigurasi dan men-debug sistem SELinux Anda, gunakan untuk mengamankan server Anda.

SELinux memiliki 3 mode operasi:

  • Menegakkan
  • Permisif
  • Dinonaktifkan

Dalam mode enforsing SELinux menerapkan kebijakannya terhadap sistem dan memantau akses yang tidak sah oleh pengguna. Semua upaya dicatat.

Dalam mode permisif Kebijakan SELinux tidak diterapkan, tetapi semua informasi dicatat dalam log, setelah itu Anda dapat menganalisisnya. Mode ini berguna saat mengatur dan men-debug sistem..

Dan dinonaktifkan karenanya menonaktifkan SELinux sama sekali dan kebijakannya tidak berlaku sama sekali.

File konfigurasi SELinux - / etc / selinux / config

Pengaturan yang teliti SELinux Anda dapat menulis pada beberapa artikel, jika Anda memerlukan informasi terperinci, Anda dapat menggunakan dokumentasi resmi Redhat. Biasanya, ketika mengatur server, semuanya berfungsi penuh, saya aktif SELinux memperhatikan bahwa ada masalah dengan ftp-server, serta beberapa perangkat lunak berbayar.

Pemeriksaan Status:
# sestatus

Status SELinux: dinonaktifkan

Untuk studi log SELinux yang lebih nyaman, saya sarankan menggunakan utilitas aureport dan sealer.

Konfigurasikan Firewalld

Buka hanya set port minimum yang diperlukan pada server yang benar-benar diperlukan untuk bekerja. Misalnya untuk bekerja web-itu sudah cukup untuk membuka server 80 dan 443. Jika Anda menggunakannya mysql /mariadb, menonaktifkan kemampuan untuk terhubung dari server jarak jauh ke port 3306 (jika database Anda hanya digunakan secara lokal, tidak termasuk dalam kluster Galera dan tidak digunakan dalam skrip replikasi).

Jika komputer / akses gateway Anda diatur ke statis IP alamat, tambahkan alamat tepercaya Anda ke pengecualian firewall dan sambungkan ke server darinya. Pelajari lebih lanjut tentang mengkonfigurasi firewalld pada CentOS (jika Anda terbiasa dengan iptables, lihat Mengkonfigurasi Linux firewall dengan iptables).

Untuk memeriksa port terbuka di server, gunakan utilitas netstat:

netstat -tulpn

Hapus instalan X Windows

Jangan menggunakan sistem di server Anda X windows. Hapus semua perangkat lunak yang terkait dengan sistem ini, tidak perlu menggunakannya Linux server:

yum group hapus "GNOME Desktop"
yum group hapus "KDE Plasma Workspaces"
grup yum hapus "Server dengan GUI"
yum group hapus "MATE Desktop"

Perlindungan kernel Linux

Gunakan pengaturan dalam file /etc/sysctl.conf untuk keamanan tambahan selama boot kernel Linux.

Nyalakan execshield:

kernel.exec-shield = 1

Nonaktifkan IP routing (jika server Anda tidak digunakan sebagai gateway akses Internet dari LAN):

net.ipv4.conf.all.accept_source_route = 0

Aktifkan Perlindungan Spoofing

net.ipv4.conf.all.rp_filter = 1

Aktifkan abaikan permintaan siaran

net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_messages = 1

Aktifkan pendaftaran paket yang mencurigakan

net.ipv4.conf.all.log_martians = 1

Izin file Linux

Jalankan pencarian file tanpa pengguna dan grup, file tersebut berpotensi berbahaya dan dapat digunakan oleh penjahat cyber. Untuk menemukan file seperti itu, gunakan perintah:

find / direktori -xdev \ (-nouser -o -nogroup \) -print

Jika file ditemukan, ubah pemilik dan grup ke file tersebut.

Tetapkan bendera obrolan ke file yang diperlukan untuk melindunginya dari modifikasi. Tidak ada pengguna yang dapat memodifikasi file saat flag ini disetel. Sebagai contoh:

chattr + i /etc/mysript.sh

Jangan atur izin terlalu tinggi pada direktori dan file, misalnya, hak standar untuk web:

  • 755 untuk direktori
  • 644 untuk file

Dalam beberapa kasus, mungkin ada pengecualian, tetapi selalu hati-hati mendekati masalah ini. Melarang pengguna untuk mengatur izin 777. Anda dapat menemukan file seperti itu:

find / home -type f -perm 777

Keamanan server web

Jika Anda menggunakan server di bawah web, berhati-hati mengatur layanan web. Tutup melihat isi direktori melalui Pilihan -Indeks, juga tambahkan Bingkai X.

Header selalu menambahkan X-Frame-Options SAMAORIGIN

Parameter ini akan melarang membuka halaman dalam bingkai, ini akan mencegah penyisipan konten situs Anda di situs lain.

Nonaktifkan menampilkan versi Anda web-server. Untuk apache dalam file konfigurasi tulis:

ServerSignature Mati

Untuk nginx dalam file konfigurasi ke bagian http tuliskan:

server_token off;

Jika Anda menggunakan php, nonaktifkan fungsi yang tidak aman melalui php.ini:

expose_php = Mati

- melarang tampilan versi php

disable_functions = exec, passthru, shell_exec, sistem, proc_open, popen

- melarang penggunaan fungsi-fungsi ini

Juga konfigurasikan batasan pada eksekusi skrip dan ukurannya, ini akan melindungi Anda dari serangan kecil.

Instal sertifikat SSL di situs web dan surat Anda sehingga koneksi di browser dan saat mengirim surat dienkripsi. Anda dapat menggunakan sertifikat gratis dari Let's Encrypt, atau membeli sertifikat berbayar yang murah.

Perlindungan Server Fisik

Jika server Anda memiliki konsol untuk akses jarak jauh ILO/IPMI/ BMC, tutup akses ke sana dari luar, tinggalkan hanya tepercaya Anda IP, ini akan membatasi diri Anda dari masalah yang tidak perlu.

Jika server fisik Anda berada di luar kantor / rumah, tutup BIOS / UEFI kata sandi.

Dan poin utama, tempatkan server Anda dengan penyedia tepercaya.

Cadangan server Linux

Tentu saja, jangan lupa membuat cadangan server. Anda dapat melakukan pencadangan seluruh server, serta file atau direktori individual (Anda dapat mengonfigurasi cadangan ke skrip penyimpanan cloud gratis). Jika terjadi insiden, Anda akan selalu memiliki cadangan saat ini dari mana Anda dapat menggunakan server atau mengganti file konfigurasi.