Selama setahun terakhir, banyak terjadi kebocoran dari database
Mari segera buat reservasi bahwa dalam praktik kami, kami menggunakan Elasticsearch untuk menyimpan log dan menganalisis log alat keamanan informasi, OS, dan perangkat lunak di platform IaaS kami, yang mematuhi persyaratan 152-FZ, Cloud-152.
Kami memeriksa apakah database βmenonjolβ ke Internet
Dalam kebanyakan kasus kebocoran yang diketahui (
Pertama, mari kita berurusan dengan penerbitan di Internet. Mengapa ini terjadi? Faktanya adalah untuk pengoperasian Elasticsearch yang lebih fleksibel
Jika Anda bisa masuk, larilah untuk menutupnya.
Melindungi koneksi ke database
Sekarang kita akan membuatnya tidak mungkin untuk terhubung ke database tanpa otentikasi.
Elasticsearch memiliki modul otentikasi yang membatasi akses ke database, tetapi hanya tersedia di set plugin X-Pack berbayar (penggunaan gratis 1 bulan).
Kabar baiknya adalah pada musim gugur 2019, Amazon membuka pengembangannya yang tumpang tindih dengan X-Pack. Fungsi otentikasi saat menghubungkan ke database telah tersedia di bawah lisensi gratis untuk versi Elasticsearch 7.3.2, dan rilis baru untuk Elasticsearch 7.4.0 sedang dalam pengerjaan.
Plugin ini mudah dipasang. Buka konsol server dan sambungkan repositori:
Berbasis RPM:
curl https://d3g5vo6xdbdb9a.cloudfront.net/yum/opendistroforelasticsearch-artifacts.repo -o /etc/yum.repos.d/opendistroforelasticsearch-artifacts.repo
yum update
yum install opendistro-security
Berbasis DEB:
wget -qO β https://d3g5vo6xdbdb9a.cloudfront.net/GPG-KEY-opendistroforelasticsearch | sudo apt-key add -
Menyiapkan interaksi antar server melalui SSL
Saat menginstal plugin, konfigurasi port yang menghubungkan ke database berubah. Ini mengaktifkan enkripsi SSL. Agar server cluster dapat terus bekerja satu sama lain, Anda perlu mengonfigurasi interaksi di antara server tersebut menggunakan SSL.
Kepercayaan antar host dapat dibangun dengan atau tanpa otoritas sertifikatnya sendiri. Dengan metode pertama, semuanya jelas: Anda hanya perlu menghubungi spesialis CA. Mari kita langsung ke yang kedua.
- Buat variabel dengan nama domain lengkap:
export DOMAIN_CN="example.com"
- Buat kunci pribadi:
openssl genrsa -out root-ca-key.pem 4096
- Tanda tangani sertifikat akar. Tetap aman: jika hilang atau disusupi, kepercayaan antara semua host perlu dikonfigurasi ulang.
openssl req -new -x509 -sha256 -subj "/C=RU/ST=Moscow/O=Moscow, Inc./CN=${DOMAIN_CN}" -key root-ca-key.pem -out root-ca.pem
- Buat kunci administrator:
openssl genrsa -out admin-key-temp.pem 4096 openssl pkcs8 -inform PEM -outform PEM -in admin-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out admin-key.pem
- Buat permintaan untuk menandatangani sertifikat:
openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " -key admin-key.pem -out admin.csr
- Buat sertifikat administrator:
openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem
- Buat sertifikat untuk node Elasticsearch:
export NODENAME="node-01" openssl genrsa -out ${NODENAME}-key-temp.pem 4096 openssl pkcs8 -inform PEM -outform PEM -in ${NODENAME}-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out ${NODENAME}-key.pem
- Buat permintaan tanda tangan:
openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${NODENAME}.${DOMAIN_CN}" -addext"subjectAltName=DNS:${NODENAME}.${DOMAIN_CN},DNS:www.${NODENAME}.${DOMAIN_CN}" -key ${NODENAME}-key.pem -out ${NODENAME}.csr
- Menandatangani sertifikat:
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node.pem
- Tempatkan sertifikat di antara node Elasticsearch di folder berikut:
/etc/elasticsearch/
kami membutuhkan file:node-01-key.pem node-01.pem admin-key.pem admin.pem root-ca.pem
- Mengkonfigurasi /etc/elasticsearch/elasticsearch.yml β ubah nama file dengan sertifikat menjadi yang kami buat:
opendistro_security.ssl.transport.pemcert_filepath: node-01.pem opendistro_security.ssl.transport.pemkey_filepath: node-01-key.pem opendistro_security.ssl.transport.pemtrustedcas_filepath: root-ca.pem opendistro_security.ssl.transport.enforce_hostname_verification: false opendistro_security.ssl.http.enabled: true opendistro_security.ssl.http.pemcert_filepath: node-01.pem opendistro_security.ssl.http.pemkey_filepath: node-01-key.pem opendistro_security.ssl.http.pemtrustedcas_filepath: root-ca.pem opendistro_security.allow_unsafe_democertificates: false opendistro_security.allow_default_init_securityindex: true opendistro_security.authcz.admin_dn: β CN=admin,CN=example.com,O=Moscow Inc.,ST=Moscow,C=RU opendistro_security.nodes_dn: β CN=node-01.example.com,O=Moscow Inc.,ST=Moscow,C=RU
Mengubah kata sandi untuk pengguna internal
- Dengan menggunakan perintah di bawah ini, kami menampilkan hash kata sandi ke konsol:
sh ${OD_SEC}/tools/hash.sh -p [ΠΏΠ°ΡΠΎΠ»Ρ]
- Ubah hash dalam file ke yang diterima:
/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
Menyiapkan firewall di OS
- Izinkan firewall untuk memulai:
systemctl enable firewalld
- Mari kita luncurkan:
systemctl start firewalld
- Izinkan koneksi ke Elasticsearch:
firewall-cmd --set-default-zone work firewall-cmd --zone=work --add-port=9200/TCP --permanent
- Muat ulang aturan firewall:
firewall-cmd --reload
- Berikut aturan kerjanya:
firewall-cmd --list-all
Menerapkan semua perubahan kami pada Elasticsearch
- Buat variabel dengan path lengkap ke folder dengan plugin:
export OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/"
- Mari kita jalankan skrip yang akan memperbarui kata sandi dan memeriksa pengaturan:
${OD_SEC}/tools/securityadmin.sh -cd ${OD_SEC}/securityconfig/ -icl -nhnv -cacert /etc/elasticsearch/root-ca.pem -cert /etc/elasticsearch/admin.pem -key /etc/elasticsearch/admin-key.pem
- Periksa apakah perubahan telah diterapkan:
curl -XGET https://[IP/ΠΠΌΡ Elasticsearch]:9200/_cat/nodes?v -u admin:[ΠΏΠ°ΡΠΎΠ»Ρ] --insecure
Itu saja, ini adalah pengaturan minimum yang melindungi Elasticsearch dari koneksi tidak sah.
Sumber: www.habr.com