ProxySQL menjadi infrastruktur yang sangat penting dalam lingkungan database. Ini berfungsi sebagai penyeimbang beban, membantu membentuk arus lalu lintas dan mengurangi waktu henti. Dengan kekuatan besar datang tanggung jawab besar. Bagaimana Anda bisa tetap mengetahui siapa yang mengakses konfigurasi ProxySQL? Siapa yang terhubung ke database melalui ProxySQL? Pertanyaan-pertanyaan tersebut dapat dijawab dengan menggunakan Log Audit ProxySQL, yang tersedia mulai dari ProxySQL 2.0.5. Dalam posting blog ini kita akan melihat cara mengaktifkan fitur ini dan bagaimana tampilan isi log.
Langkah awal adalah menerapkan ProxySQL. Kita dapat melakukannya dengan mudah menggunakan ClusterControl - tipe Replikasi MySQL dan Galera Cluster mendukung penerapan ProxySQL.
Dengan asumsi kita memiliki cluster dan berjalan, kita dapat menggunakan ProxySQL dari Manage -> LoadBalancers:
Kita harus memutuskan node ProxySQL mana yang harus diinstal, versinya ( kami akan mempertahankan 2.x default) dan menentukan kredensial untuk pengguna administratif dan pemantauan ProxySQL.
Di bawah ini kita dapat mengimpor pengguna aplikasi yang ada dari database atau membuat yang baru satu dengan menetapkan nama, kata sandi, skema, dan hak istimewa MySQL. Kami kemudian dapat mengonfigurasi node mana yang harus disertakan dalam ProxySQL dan memutuskan apakah kami menggunakan transaksi implisit atau tidak. Setelah semuanya selesai, kita dapat menggunakan ProxySQL. Untuk ketersediaan tinggi, Anda mungkin ingin menambahkan ProxySQL kedua dan kemudian tetap hidup di atasnya. Keepalived juga dapat dengan mudah digunakan dari ClusterControl:
Di sini kita harus memilih node di mana ProxySQL digunakan, melewati Virtual IP dan antarmuka jaringan VIP harus ditetapkan. Setelah ini selesai, ClusterControl dapat menerapkan Keepalive untuk Anda.
Sekarang, mari kita lihat log audit. Semua konfigurasi harus dilakukan pada kedua node ProxySQL. Atau Anda dapat menggunakan opsi untuk menyinkronkan node:
Ada dua setelan yang mengatur cara kerja log audit:
Yang pertama mendefinisikan file di mana data harus disimpan, yang kedua memberitahu seberapa besar file log sebelum dirotasi. Mari konfigurasikan log di direktori data ProxySQL:
Sekarang, kita bisa melihat data yang kita lihat di audit berkas log. Pertama-tama, format penyimpanan data adalah JSON. Ada dua jenis peristiwa, satu terkait dengan konektivitas MySQL dan kedua terkait dengan konektivitas antarmuka admin ProxySQL.
Berikut adalah contoh entri yang dipicu oleh lalu lintas MySQL:
"client_addr": "10.0.0.100:40578",
"event": "MySQL_Client_Connect_OK",
"proxy_addr": "0.0.0.0:6033",
"schemaname": "sbtest",
"ssl": false,
"thread_id": 810,
"time": "2020-01-23 14:24:17.595",
"timestamp": 1579789457595,
"username": "sbtest"
}
{
"client_addr": "10.0.0.100:40572",
"event": "MySQL_Client_Quit",
"proxy_addr": "0.0.0.0:6033",
"schemaname": "sbtest",
"ssl": false,
"thread_id": 807,
"time": "2020-01-23 14:24:17.657",
"timestamp": 1579789457657,
"username": "sbtest"
}
{
"client_addr": "10.0.0.100:40572",
"creation_time": "2020-01-23 14:24:17.357",
"duration": "299.653ms",
"event": "MySQL_Client_Close",
"extra_info": "MySQL_Thread.cpp:4307:process_all_sessions()",
"proxy_addr": "0.0.0.0:6033",
"schemaname": "sbtest",
"ssl": false,
"thread_id": 807,
"time": "2020-01-23 14:24:17.657",
"timestamp": 1579789457657,
"username": "sbtest"
}
Seperti yang Anda lihat, sebagian besar data berulang:alamat klien, alamat ProxySQL, nama skema, jika SSL digunakan dalam koneksi, nomor utas terkait di MySQL, pengguna yang membuat koneksi. Acara "MySQL_Client_Close" juga berisi informasi tentang waktu saat koneksi dibuat dan durasi koneksi. Anda juga dapat melihat bagian mana dari kode ProxySQL yang bertanggung jawab untuk menutup koneksi.
Koneksi admin sangat mirip:
{
"client_addr": "10.0.0.100:52056",
"event": "Admin_Connect_OK",
"schemaname": "information_schema",
"ssl": false,
"thread_id": 815,
"time": "2020-01-23 14:24:19.490",
"timestamp": 1579789459490,
"username": "proxysql-admin"
}
{
"client_addr": "10.0.0.100:52056",
"event": "Admin_Quit",
"schemaname": "information_schema",
"ssl": false,
"thread_id": 815,
"time": "2020-01-23 14:24:19.494",
"timestamp": 1579789459494,
"username": "proxysql-admin"
}
{
"client_addr": "10.0.0.100:52056",
"creation_time": "2020-01-23 14:24:19.482",
"duration": "11.795ms",
"event": "Admin_Close",
"extra_info": "MySQL_Thread.cpp:3123:~MySQL_Thread()",
"schemaname": "information_schema",
"ssl": false,
"thread_id": 815,
"time": "2020-01-23 14:24:19.494",
"timestamp": 1579789459494,
"username": "proxysql-admin"
}
Data yang dikumpulkan sangat mirip, perbedaan utamanya adalah terkait dengan koneksi ke antarmuka administratif ProxySQL.
Kesimpulan
Seperti yang Anda lihat, dengan cara yang sangat mudah Anda dapat mengaktifkan audit akses ke ProxySQL. Ini, terutama akses administratif, adalah sesuatu yang harus dipantau dari sudut pandang keamanan. Plugin audit membuatnya cukup mudah untuk diselesaikan.