DigitalOcean uzun süredir kullandığım, fiyat / performans ve kolaylık konusunda -bana göre- en önde giden servis sağlayıclardan biri. Ben Ubuntu 22.04 LTS üzerine Mariadb kurdum ama önceki sürümlerde de aynı şekilde kurulacağını düşünüyorum. Yeri gelmişken Ubuntu sürümüzü öğrenmek için konsolda şu iki komuttan birini çalıştırabilirsiniz:
lsb_release -a
hostnamectl
Yükleme :
Mariadb yüklemek için önce apt paket indeksimizi güncelliyoruz:
sudo apt update
Sonra apt ile Mariadb server’ı yüklüyoruz:
sudo apt install mariadb-server
Ayarlar :
Mariadb yüklendikten sonra suncumuzun güvenliğini artırmak için mysql_secure_installation shell scriptini çalıştırıyoruz. Bu script bize aşağıdaki soruları sorarak seçimlerimize göre güvenliği artırıyor.
sudo mysql_secure_installation
Change the root password? (root şifresini değiştir)
Remove anonymous users? (anonim kullanıcıları kaldır)
Disallow root login remotely? (uzaktan root erişimine izin verme)
Remove test database and access to it? (test veritabenı ve ona erişimi kaldır)
Reload privilege tables now? (Ayrıcalıklı tabloları yeniden yükleyerek yapılan değişiklikleri hemen uygula)
Burada “Disallow root login remotely? ” seçeneğine n (hayır) diyorum çünkü ben bu sunucuya uzaktan bağlanmak istiyorum. Bu prod sunucularında önerilen bir şey değil, sunucunuza sadece localhost ile bağlanabilmeniz tabiiki daha güvenli. Ben bu sunucuyu geliştirme amaçlı kullanacağım için böyle bir ihtiyaç duyuyorum. Sonrasında Mariadb için bir kullanıcı oluşturuyoruz. Bunun Mariadb komut satırını açıyoruz :
sudo mariadb
admin kullanıcısını oluşturup ona gerekli hakları veriyoruz :
GRANT ALL ON . TO 'admin'@'localhost' IDENTIFIED BY 'buraya_parolanizi_yazin' WITH GRANT OPTION;
Yaptığımız değişikliklerin hemen geçerli olmasını sağlıyoruz :
FLUSH PRIVILEGES;
Ve MariaDb shell den çıkıyoruz :
exit
Test :
Tüm bunları tamamladıktan sonra Mariadb nin çalıştığını kontrol ediyoruz:
sudo systemctl status mariadb
Active: active (running) since Fri 2022-09-23 13:59:00 UTC; 1 day 3h ago
gibi bir satır görüyorsanız Mariadb ‘niz sorunsuz çalışıyor demektir. Şimdi lokal bilgisayarımdan DigitalOcean’da bulunan sunucuya bağlantı yapmayı deneyeceğim. Ben bunun için linux üzerinde dbeaver aracını kullanıyorum. MySQL, PostgreSQL, SQLite, Oracle, DB2, SQL Server, Sybase, MS Access, Teradata, Firebird, Apache Hive, Phoenix, Presto, gibi tüm popüler veritabanlarını destekliyor. Geliştirme yaparken hızlıca query çekebiliyorum ya da tablolar üzerinde değişiklik yapabiliyorum. Yukarıda tanımladığımız admin@localhost kullanıcısı ile bağlanmayı deniyoruz ve BAĞLANAMIYORUZ.
Uzaktan bağlanabilmek için yapmamız gereken iki şey daha var. Birincisi configürasyon dosyasına gidip bind adresini yorum satırına çevirmek. /etc/mysql/mariadb.conf.d/50-server.cnf dosyasını bir editör ile açmak. Örneğin ben aşağıda vim ile açıyorum.
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
Ve bind adresinin başına # yazarak yorum satırına çeviriyorum.
#bind-address = 127.0.0.1
İkincisi de kendi ip adresiniz le bir kullanıcı oluşturmak. Yukarıda ki gibi Mariadb shell’e girdikten sonra (sudo mariadb) aşağıdaki gibi bir remote kullanıcı oluşturun. kayayan yerine kullanıcı adınızı xxx.xxx.xxx.xxx olan yere i adresinizi buraya_parola yazın yerine de kendi parolanızı yazın.
GRANT ALL ON . to kayayan@'xxx.xxx.xxx.xxx' IDENTIFIED BY 'buraya_parola_yazın';
Önemli : Prod sunucunuzda asla veritabanınıza remote bağlantıya izin vermeyin!
BONUS:
Bir kaç saat/gün sonra komut satırından “sudo systemctl status mariadb” komutu çalıştırdığınızda bazı ip adreslerinden veritabanınıza bağlantı istekleri yapıldığını görebilirsiniz. Muhtemelen ip aralıklarını rastgele tarayan şüpheli işlemler yapmaya çalışan birileri bağlanmaya çalışıyor. Parola korumamız var ama brute force yapmalarını engellemek için birşeyler yapmamız lazım. Ben bu iplerden birini whatismyipaddress.com da kontrol ettiğimde aşağıdaki gibi kullanıcı yorumları görüyorum.
https://whatismyipaddress.com/ip/34.140.248.32
anonymous FTP access attempted – 2022-06-25
connected to FTP server – banned – 2022-04-09
Attempted server access – Blacklisted – 2022-03-28
User who tried to connect to my server through ftp – 2021-11-26
User who tried to connect to my server (through von) Locked and banned – 2021-10-09
Burada imdadımıza ufw yetişiyor. ufw Ubuntu sürümlerinde yüklü olarak gelen iptables üzerinde çalışan bir configürasyon aracı.
Aşağıdaki komutu çalıştırdığımızda muhtelemen ufw nin durumunun aktif olmadığını göreceksiniz (Status:inactive)
sudo ufw status
Hemen ufw yi aktif ediyoruz.
sudo ufw enable
Bu komutu çalıştırdığınızda artık firewall aktif olmalı ve siz de uzaktan bağlantı yapamıyor olmalısınız. Yukarıda ki gibi bir client ile bağlantı yapıp yapamadığınızı kontrol edebilirsiniz. ufw allow komutu ile kendi ip mize (aşağıda xxx.xxx.xxx.xxx) mariadb portu için bağlantı izni veriyoruz. Bunu yaptığınızda ssh bağlantısı yapamayacaksınız. DigitalOcean consolea gidip ssh access vermeniz gerekecek.
sudo ufw allow from xxx.xxx.xxx.xxx to any port 3306
Tekrar kontrol ettiğimizde ip miz üzerinden sunucumuza bağlanabildiğimizi görüyoruz.
SSH bağlantısı yapabilmemiz için DigitalOcean Droplet consolu browserdan açıp aşağıdaki komutu çalıştırıyoruz.
sudo ufw allow 22