Mysql'e uzaktan erişim nasıl daha güvenli hale getirilir!

Veri güvenliğini sağlamak için, çevrimiçi ticaret genellikle MySQL'e yalnızca yerel veya intranet erişimine izin verir. Bununla birlikte, bazı özel durumlarda, MySQL'e harici ağ üzerinden erişmeniz gerekir. Şu anda izinlerin en aza indirilmesi ve açılmasını sağlamak için önce iki önlem alınmalıdır:

Bir yandan, güvenlik duvarı beyaz listesini yapılandırmanız gerekir

iptables -A GİRİŞ -s 1.2.3.4 -p tcp -m tcp dport 3306 -j KABUL

Öte yandan, MySQL kullanıcıları oluştururken IP'ye erişimi kısıtlayın

mysql > 'Testpass' İLE TANIMLANAN KULLANICI "testuser "@1.2.3.4" OLUŞTURUN;

Peki bu adımda arkanıza yaslanıp rahatlayabilir misiniz? Öyleyse makale burada bitebilir. Ne yazık ki, hala gizli güvenlik riskleri var. MySQL erişimi, izleme ve ele geçirilmeye karşı savunmasız olan düz metin HTTP'ye benzer şekilde varsayılan olarak düz metin halindedir. Harici ağda açığa çıkan MySQL iletişimleri de izleme ve ortadaki adam saldırılarına konu olabilir. Aşağıda belirli bir örnek verilmiştir.

1 MySQL master-slave'in düz metin iletişimini izleyin

İzlemeyi uygulamanın birçok yolu vardır.Bypass izleme için anahtar bağlantı noktası yansıtma kullanırız.

İzlenecek makine xxx.xxx.xxx.83 ve saldırıyı başlatacak makine xxx.xxx.xxx.109'dur.

MySQL master-slave iletişiminin izlenmesini uygularken, ana kütüphaneyi veya slave kütüphanesini izlemenin etkisi benzerdir Burada ana kütüphanenin izlenmesini test ediyoruz.

1.1 Dinlenecek bağlantı noktasını belirleyin

İki makinenin hangi bağlantı noktasına karşılık geldiğini bilmiyorsanız, önce anahtarda oturum açabilir, ping atabilir ve ardından arp önbelleğinden görüntüleyebilirsiniz.

Ping işleminden sonra, bağlantı noktası arp önbelleği aracılığıyla belirlenebilir

Son olarak, xxx.xxx.xxx.83'ün g0 / 15 olarak yansıtma kaynağı bağlantı noktası ve xxx.xxx.xxx.109'un g0 / 1 olarak yansıtma hedef bağlantı noktası olduğunu doğrulayın.

1.2 Bağlantı noktası yansıtmayı yapılandırın

Anahtarda oturum açın, başlangıçta ayna yapılandırması yok

< H3C > dis mir Monitör bağlantı noktası yapılandırılmamış! < H3C > sys Parola: ************ Sistem görünümüne girin, Ctrl + Z ile kullanıcı görünümüne dönün.

Yansıtma hedefini ve yansıtma kaynağı bağlantı noktasını ayrı ayrı yapılandırın

monitör bağlantı noktası g0 / 1 Başarılı! Monitör bağlantı noktası Trunk bağlantı noktası ve pvid olarak belirlendi değişti. yansıtma bağlantı noktası g0 / 15 dis mir Monitör bağlantı noktası: GigabitEthernet 0/1 Yansıtma bağlantı noktası: GigabitEthernet 0/15 q < H3C > kayıt etmek Bu, yapılandırmayı EEPROM belleğine kaydedecektir Emin misin Şimdi mevcut konfigürasyonu EEPROM belleğine kaydetme Lütfen bir süre bekleyin... Mevcut konfigürasyon EEPROM belleğine başarıyla kaydedildi

1.3 Açık metnin ana-bağımlı iletişimini izleme

Aktif olarak izlenen makinede xxx.xxx.xxx.109 çalıştırın

tcpdump host xxx.xxx.xxx.83 -i eth0 -w merhaba.dump

xxx.xxx.xxx.83, MySQL ana veritabanı ile yapılandırılır ve başka bir harici ağ makinesi xxx.xxx.xxx.104, MySQL bağımlı veritabanıyla yapılandırılır. Master ve slave, SSL şifreleme ile yapılandırılmamış. Testte, xxx.xxx.xxx.109, MySQL master ve slave arasındaki iletişimi başarılı bir şekilde izlemek için kullanıldı.

Aşağıdaki şekil, izlenen MySQL hesabı oturum açma bilgilerini gösterir, kullanıcı adını ve şifrelenmiş şifreyi alabilirsiniz:

Karmaşık olmayan MySQL şifreleri için, düz metin, cmd5 gibi web siteleri aracılığıyla kolayca çözülebilir:

Aşağıdaki şekil, izlenen master-slave verilerini gösterir:

MySQL master-slave düz metin iletişimi durumunda, etkili bir şekilde gizlice dinlemenin sağlanabileceği görülebilir.

Burada kullanılan anahtar bağlantı noktası yansıtmasının, uygulanması zor olan anahtar izinlerini alması gerekir. Ancak harici ağ iletişiminde, gerçek ağ ortamı çok karmaşıktır ve kontrolümüzün ötesindedir ve düz metin iletişim hala potansiyel güvenlik risklerine sahiptir.

2 Sunucular arasında güvenli erişim

Peki, sunucular arasındaki harici ağ iletişiminde MySQL'in güvenli erişimi nasıl sağlanır? İşte birkaç genel çözüm.

2.1 Şifreli tünel

Şifrelenmiş tünel, istemcinin ağ verilerini şifreleyebilir ve ardından şifre çözme ve geri yükleme için güvenli bir şekilde sunucuya iletebilir. Örnek olarak stunnel alın:

İlk olarak, istemcide 3306 bağlantı noktasını izleyin ve şifreli iletişim kurun, uzaktaki 1.2.4.5:8000'e bağlanın

/usr/local/stunnel/etc/stunnelclient.confsslVersion = TLSv1 CAfile = /usr/local/stunnel/etc/ca-cert.pem cert = /usr/local/stunnel/etc/clientcert.pem key = /usr/local/stunnel/etc/clientkey.pem kabul = 127.0.0.1:3306 connect = 1.2.4.5: 8000

Sunucu, 8000 numaralı bağlantı noktasını izler ve şifre çözüldükten sonra verileri makinenin 3306 numaralı bağlantı noktasına iletir.

/usr/local/stunnel/etc/stunnelserver.conf

sslVersion = TLSv1

CAfile = /usr/local/stunnel/etc/ca-cert.pem

cert = /usr/local/stunnel/etc/servercert.pem

key = /usr/local/stunnel/etc/serverkey.pem

kabul etmek = 8000

connect = 127.0.0.1: 3306

Bu şekilde, yerel 3306 bağlantı noktasına erişen istemci, şifrelenmiş tünel aracılığıyla uzak MySQL'e erişimi gerçekleştiren uzaktaki 1.2.4.5 makinesinin 3306 bağlantı noktasına erişecektir.

Avantajlar: Harici ağda ayrı bir MySQL hesabı oluşturmaya gerek yoktur ve yerel erişim için şeffaftır.

Dezavantajlar: İstemciden sunucuya yalnızca şifreli erişim gerçekleştirilebilir ve şifreli tünel hizmetinin ek bakımı gerekir.

2.2 VPN

VPN, harici ağ iletişimini sanal dahili ağ iletişimine dönüştürebilir ve harici ağ erişiminin güvenlik sorununu doğrudan çözebilir. OPENVPN'i örnek olarak ele alalım:

Sunuculardan birinde bir sunucu kurun ve dahili ağ segmentini yapılandırın

/etc/openvpn/server.confport 1194 proto tcp-server dev tap #Certificate ilgili ca /etc/openvpn/ca-cert.pem cert /etc/openvpn/server.pem anahtar /etc/openvpn/server.key dh /etc/openvpn/dh.pem # Sunucu tarafından kullanılan adresi belirtin ifconfig 192.168.10.1255.255.255.0 # İstemcinin IP adresini belirtin client-config-dir / etc / openvpn / ccd

Diğer tarafta sunucuda bir istemci oluşturun ve bir VPN bağlantısı başlatın

/etc/openvpn/client.conf müşteri dev tap proto tcp-client uzak 1.2.3.41194 #Certificate ilgili ca /etc/openvpn/ca-cert.pem cert /etc/openvpn/client1-cert.pem key /etc/openvpn/client1-key.pem

Bu şekilde, her iki taraftaki sunucular sanal bir intranet oluşturur ve birbirlerinin MySQL veya diğer hizmetlerine erişebilirler.

Avantajlar: Her iki taraf birbirine erişebilir ve belirli bir bağlantı noktasına erişimle sınırlı değildir, bu özellikle uzak bilgisayar odalarında intranet iç iletişimi için uygundur.

Dezavantajlar: VPN hizmetlerinin ek bakımı gereklidir.

2.3 MySQL SSL

Şifrelenmiş tüneller ve şifrelenmiş sanal ağlar kurmanın yanı sıra, MySQL erişimini şifrelemek için doğrudan SSL de kullanabilirsiniz.

2.3.1 SSL sertifikası oluşturma

Önce MySQL'in SSL'yi destekleyip desteklemediğini kontrol edin.

mysql > "Have_ssl" GİBİ DEĞİŞKENLERİ GÖSTER; + + - + | Değişken_adı | Değer | + + - + | have_ssl | DEVRE DIŞI | + + - Sette + 1 satır (0,00 sn)

Çıktı yukarıdaki gibiyse, bu MySQL'in SSL'yi desteklediği ancak etkinleştirilmediği anlamına gelir.

Birçok SSL sertifikası türü vardır.Pratikte, sunucu veya istemci sertifikaları farklı amaçlara göre kullanılır.

# Sunucu için kullanılan sunucu tipi SSL sertifikası veya ana-bağımlı ilişkisindeki ana kitaplık ssl-ca = / home / mysql / certs / ca-cert.pem ssl-cert = / home / mysql / certs / server-cert.pem ssl-key = / home / mysql / certs / server-key.pem

# İstemci için kullanılan istemci tipi SSL sertifikası (komut satırı araçları gibi) veya ana-bağımlı ilişkisindeki yardımcı kitaplık ssl-ca = / home / mysql / certs / ca-cert.pem ssl-cert = / home / mysql / certs / client-cert.pem ssl-key = / home / mysql / certs / client-key.pem

Ayrıca, birleşik yönetimi kolaylaştırmak için, aynı makinede hem sunucu hem de istemci türlerini destekleyen tek bir SSL sertifikası kullanılabilir. Bir SSL sertifikası oluştururken yalnızca iki tür kullanım belirlemeniz veya her iki kullanımı da doğrudan belirtmemeniz gerekir.

Yapılandırmadan sonra, SSL'nin etkin olup olmadığını kontrol edin

mysql > "% Ssl%" GİBİ DEĞİŞKENLERİ GÖSTER;

+ + + | Değişken_adı | Değer | + + + | have_openssl | EVET | | have_ssl | EVET | | ssl_ca | /home/mysql/certs/ca-cert.pem | | ssl_capath | | | ssl_cert | /home/mysql/certs/mysql-cert.pem | | ssl_cipher | | ssl_key | /home/mysql/certs/mysql-key.pem | + + + Sette 5 satır (0,00 sn)

Çıktı yukarıdaki gibiyse, bu, SSL'nin normalde etkinleştirildiği anlamına gelir

2.3.2 SSL gerektirir ve X509 gerektirir

Harici ağdan erişen MySQL kullanıcılarının SSL şifreleme kullanmasını sağlamak için, kullanıcıları oluştururken GEREKLİ SSL veya GEREK X509'u zorlayabilirsiniz:

mysql > 'Testpass' İLE TANIMLANAN KULLANICI "testuser "@1.2.3.4" OLUŞTURUN SSL GEREKTİRİN; mysql > Testpass İLE TANIMLANAN KULLANICI "testuser "@1.2.3.4" OLUŞTURMA X509 GEREKTİRİR;

İkisi arasındaki fark, REQUIRE SSL'in istemcinin yalnızca belirtilen ca sertifikasını sunucu sertifikasını doğrulamak için kullanmasını gerektirirken REQUIRE X509 ayrıca sunucunun istemci sertifikasını doğrulamasını gerektirir. Ortadaki adam saldırılarını önlemek ve daha güvenli iletişim sağlamak için genellikle REQUIRE X509 kullanılması önerilir.

2.3.3 OpenSSL ve yaSSL

MySQL, şifreli iletişim için kendi yaSSL kitaplığını veya şifreli iletişim için OpenSSL'yi kullanabilir. Hangisini kullanacağınızı derlerken WITH_SSL: STRING parametresini belirtmeniz gerekir:

paketlenmiş (yassl kullanın), evet (varsa işletim sistemi kitaplığını tercih edin, aksi takdirde birlikte kullanın), sistem (os kitaplığını kullanın), < / yol / özel / kurulum >

Daha iyi güvenlik için, sistemle birlikte gelen OpenSSL'yi kullanabilir ve yum / apt'yi zamanında güncelleyebilirsiniz.

Farklı sürümlerin uyumluluğunu düşünüyorsanız, yerleşik yaSSL'yi kullanmanız önerilir.

Örneğin, OpenSSL bir zamanlar CVE-2015-4000'in güvenlik açığına yanıt olarak DH anahtarının minimum değerini 768 bite yükseltti ve MySQL'in bazı eski sürümleri DH anahtarı için 512 bit kullandı. MySQL'in varsayılan SSL şifreleme algoritması DHE-RSA-AES256-SHA olduğundan, OpenSSL MySQL kullanılıyorsa, farklı sürümler arasında erişirken ERROR 2026 görünebilir.

2.3.4 SSL tabanlı master-slave iletişimini izleyin

SSL şifrelemesini yapılandırdıktan sonra, MySQL master-slave iletişimini yeniden yakalamaya çalışıyoruz.

MySQL master ve slave'in oturum açma hesabının elde edilemediği bulundu:

Ek olarak, yakalanan MySQL master-slave verileri de bozuktur:

MySQL master ve slave, SSL ile şifrelendiğinde, etkili bir şekilde gizlice dinlemenin sağlanamadığı görülebilir.

3 Yerel güvenlik erişimi

3.1 SSH tüneli

Genel olarak, uzak sunucuya yerel olarak erişmek için SSH'ye ihtiyacımız var Şu anda, uzak sunucunun belirli bağlantı noktasına erişmek için bir SSH tüneli oluşturabiliriz.

SecureCRT'nin (Putty'ye benzer) bağlantı noktası yönlendirme işlevini kullanıyorsanız, yerel 3306 bağlantı noktasını sunucunun 3306 bağlantı noktasına iletin:

Navicat gibi araçları kullanmaya alışkınsanız, yerleşik SSH tünel işlevini kullanabilirsiniz (eski sürümün özel anahtarı ppk formatına dönüştürmesi gerekebileceğini unutmayın):

3.2 phpmyadmin + HTTPS

MySQL'e erişmek için phpmyadmin'in web yöntemini kullanmaya alışkınsanız, erişim yöntemini HTTPS ile birleştirmeniz yeterlidir:

sunucu { 80 dinle; sunucu_adı phpmyadmin.example.com; # HTTP'yi HTTPS'ye zorlamak için HSTS'yi kullanın add_header Strict-Transport-Security max-age = 31536000; ... } sunucu { 443 ssl http2 dinle; sunucu_adı phpmyadmin.example.com; #Configure server SSL sertifikası ssl açık; ssl_certificate /etc/letsencrypt/live/phpmyadmin.example.com/fullchain.pem; ssl_certificate_key / etc / letsencrypt / live / phpmyadmin.example.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ... }

4 özet

MySQL'in veri güvenliği çok büyük bir konudur ve dış ağlar arasındaki güvenli iletişim genellikle göz ardı edilir. HTTPS / SMTPS / POP3S / IMAPS'ın giderek artan popülaritesiyle, TCP ve UDP'ye dayalı çeşitli şifreli iletişim şemaları çevrimiçi hizmetlere giderek daha fazla uygulanacaktır. Bu makale, MySQL'e sunucudan sunucuya erişimin bazı senaryoları için çeşitli şifreleme iletişim şemalarını tanıtır.Size bazı fikirler vermeyi ve MySQL'in şifreli erişimini kullanmak için gerçek ihtiyaçlarınızı birleştirmeyi umuyorum.

Muhtemelen değeri en çok koruyan elektrikli otomobil, statik deneyim Dongfeng Nissan Sylphy · Pure Electric
önceki
Çin likör endüstrisindeki yeni kara at: Moutai'yi yakalamak, yıllık satışları bir milyar yuan'a ulaşan girişimcilik ruhu inanılmaz.
Sonraki
Kore arabaları satış arayışında gittikçe daha ileri gidiyor, ancak utanç giderek derinleşiyor
Linux komut satırına nasıl önyüklenir
Moe RPG "Apel Story" nin kanlı savaş sistemi ilk kez ortaya çıktı
250.000 kişiliğe sahip alışılmadık dört orta seviye spor otomobil tavsiye edilir
Geely, en güzel yerli SUV coupe olan coupe SUV'nin resmi resmini koydu?
Han Chaofa ile görüşmek mi? Bağımsız markalar "yakalamalardan" "rakiplere" yükseliyor
Kocası gelişigüzel harcamak için 20 milyon cep harçlığı verdi, ancak bunu bir şirket kurmak için kullandı, en zengin adamın karısı gerçekten olağanüstüydü
Dolduktan sonra Linux bölümü nasıl genişletilir?
Savaşçıların Dönüşü | Arabada uyuyordum ama uzanırken uyuyamıyordum. Lop Nor gezisinin üyeleri asla unutmayacak
Mercedes-Benz C-Serisi de fişe takılı ve hibrit versiyonu geliyor. 19 Mart'ta satışa sunulması bekleniyor
Köşede bir "çıkmaz" ile karşılaştın, bir Fransız arabasının acısını anlamıyorsun
Xiaomi'yi düşman, Huawei'yi idol olarak gören 5G'ye girmeye hazırlanan Gree, bir sonraki Huawei olabilir mi?
To Top