affaires en ligne afin d'assurer la sécurité des données, permettent généralement que MySQL d'accès local ou réseau. Mais dans certains cas particuliers, besoin de MySQL d'accès via Internet. Afin de minimiser ce temps pour garantir les droits et l'ouverture, la première chose que deux mesures:
vous avez besoin d'une part pour configurer le pare-feu whitelist
ENTREE iptables -A -s 1.2.3.4 -p tcp -m tcp -dport 3306 -j ACCEPTD'autre part de restreindre l'accès aux utilisateurs IP créer MySQL
mysql > CREATE USER 'testuser'@'1.2.3.4' identified by 'testpass';Ainsi, cette étape ne vous pouvez vous asseoir et se détendre il? Si oui, cet article sera terminée. Mais malheureusement, en fait, encore un risque de sécurité. L'accès par défaut de MySQL est clair, le HTTP plaintext sensibles à la surveillance, une exposition similaire en dehors détournement réseau de communication de MySQL est également susceptible d'être à l'écoute, l'homme dans les attaques du milieu. Dans ce qui suit un exemple spécifique sera décrit.
Une communication en clair à partir du moniteur maître MySQL
Il existe de nombreux programmes pour parvenir à l'écoute, nous avons adopté un mode miroir des ports de commutateur contrôle de dérivation.
La machine est prête à écouter xxx.xxx.xxx.83, la machine d'attaque est xxx.xxx.xxx.109.
MySQL lorsque la mise en uvre des principales communications du moniteur de, que ce soit pour surveiller la bibliothèque principale de la bibliothèque ou un effet similaire, où la bibliothèque principale cas de test d'écoute.
1.1 déterminer le port d'écoute
Si vous ne savez pas ce qui correspond à deux commutateur port de machines, vous pouvez vous connecter au commutateur, pinguez vu à travers le cache arp.
Après le port de ping peut être déterminée par le cache arp
Enfin, à savoir le port source est déterminée xxx.xxx.xxx.83 de g0 / 15, à savoir xxx.xxx.xxx.109 g0 en miroir de port de destination / 1.
1.2 Configuration du port Mirroring
L'accès au commutateur n'est pas configuré pour démarrer la mise en miroir
< H3C > dis mir Le port du moniteur n'a pas été configuré! < H3C > sys Mot de passe: ************ Entrer vue du système, revenir à la vue de l'utilisateur avec Ctrl + Z.Et l'objet image miroir sont disposés en miroir des ports
moniteur ports G0 / 1 Succeed! Le port du moniteur a été spécifié comme port de tronc et la pvid changé. g0 / 15 port en miroir dis mir Surveiller port: GigabitEthernet0 / 1 Mirroring-Port: GigabitEthernet0 / 15 q < H3C > sauver Cela permettra d'économiser la configuration dans la mémoire EEPROM Êtes-vous sûr? y Maintenant sauver la configuration actuelle à la mémoire EEPROM S'il vous plaît attendre pendant un certain temps ... Configuration actuelle enregistrée dans la mémoire EEPROM avec succès1,3 écoute de communications de texte en clair-maître-esclave
Exécuté dans la machine d'écoute active xxx.xxx.xxx.109
hôte tcpdump xxx.xxx.xxx.83 -i eth0 -w hello.dump
xxx.xxx.xxx.83 configuré bibliothèque principale de MySQL, un autre disposé à l'extérieur de la machine de base de données réseau xxx.xxx.xxx.104 MySQL. Et la configuration maître-esclave est pas le cryptage SSL. Test utiliser avec succès xxx.xxx.xxx.109 écouter communication maître-esclave MySQL.
La figure ci-dessous montre la connexion de compte MySQL contrôlé, vous pouvez obtenir le nom d'utilisateur et le cryptage du mot de passe:
Pour le mot de passe de MySQL simple, vous pouvez facilement déchiffré par CMD5 plaintext autres sites:
La figure suivante illustre les données surveillées du maître:
On peut voir dans le cas expressément la communication maître MySQL, l'écoute clandestine peut être efficace.
Commutateur de port mirroring est utilisé ici besoin commutateur d'autorisation, un certain degré de réalisation de difficulté. Mais en dehors de la communication réseau, l'environnement réseau réel est très complexe et hors de notre contrôle, la communication de texte clair est encore un risque potentiel de sécurité.
2 accès au serveur de sécurité
Alors, comment assurer un accès sécurisé à MySQL en dehors de la communication réseau entre le serveur? Voici quelques scénarios communs.
2.1 tunnel crypté
Des données réseau crypté tunnel client peut chiffrer, réduire Décrypter après, puis transférés en toute sécurité sur le serveur. Pour exemple stunnel:
Tout d'abord, le port d'écoute du client 3306, et établir une communication cryptée, une connexion à distance 1.2.4.5:8000
/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 = accepter 127.0.0.1:3306 connect = 1.2.4.5: 8000Le serveur écoute sur le port 8000, et transmis à la machine après le port de données décryptée 3306
/usr/local/stunnel/etc/stunnelserver.confchanger sslVersion = TLSv1
CAFile = /usr/local/stunnel/etc/ca-cert.pem
cert = /usr/local/stunnel/etc/servercert.pem
key = /usr/local/stunnel/etc/serverkey.pem
accept = 8000
connect = 127.0.0.1: 3306
De cette façon, le client peut effectivement accéder au port local 3306 au port 3306 sur l'accès à distance 1.2.4.5 de la machine pour obtenir l'accès à distance de MySQL via le tunnel crypté.
Avantages: pas besoin de créer un compte distinct en dehors du réseau de MySQL, l'accès local transparent.
Inconvénients: ne peut réaliser le chiffrement du client pour accéder au côté service, le besoin d'entretien supplémentaire crypté tunnel de service.
2.2 VPN
VPN en dehors de la communication réseau peut être transformé en une communication réseau interne virtuel directement adresse d'accès extranet problèmes de sécurité. Pour exemple OPENVPN:
Dans un côté du serveur de génération du serveur, configurer le segment de réseau interne
/etc/openvpn/server.confport 1194 proto tcp-serveur dev tap # Certificat liés ca /etc/openvpn/ca-cert.pem cert /etc/openvpn/server.pem /etc/openvpn/server.key clé dh /etc/openvpn/dh.pem # Utilisation finale de l'adresse indiquée serveur ifconfig 192.168.10.1255.255.255.0 # Spécifiez le client IP client-config-dir / etc / openvpn / ccdDe l'autre côté du serveur client mis en place, lancer des liens VPN
/etc/openvpn/client.conf client dev tap proto tcp-client à distance 1.2.3.41194 # Certificat liés ca /etc/openvpn/ca-cert.pem cert /etc/openvpn/client1-cert.pem /etc/openvpn/client1-key.pem cléDe cette façon, les deux parties ont créé un serveur virtuel sur le réseau, vous pouvez accéder à l'autre de MySQL ou d'autres services.
Plus: les deux parties peuvent communiquer entre eux, et non limité à l'accès à un port, en particulier pour le réseau d'interfonctionnement salle de machine distante.
Inconvénients: le besoin d'entretien supplémentaire service VPN.
2.3 MySQL SSL
En plus d'établir un tunnel chiffré, réseau virtuel crypté, vous pouvez en utilisant le cryptage SSL MySQL directement accès.
2.3.1 génération de certificat SSL
Vérifiez d'abord si SSL de support MySQL.
mysql > SHOW VARIABLES LIKE 'HAVE_SSL'; + ----- + ---- + | VARIABLE_NAME | Valeur | + ----- + ---- + | HAVE_SSL | disabled | + ----- + ---- + 1 row in set (0.00 sec)Si la sortie ci-dessus, le support MySQL explication SSL mais pas activé.
certificat SSL est distribuée une pluralité de types, dans la pratique, d'utiliser un serveur de certificat ou d'un client en fonction de buts différents.
# Type de serveur de certificats SSL pour le serveur, ou maître de la base de données de la relation maître-esclave ssl-ca = / home / mysql / certs / ca-cert.pem ssl-cert = / home / mysql / certs / server-cert.pem ssl-key = / home / mysql / certs / server-key.pem# Certificat SSL de type client pour le client (comme un outil de ligne de commande), ou d'une relation maître-esclave de la bibliothèque ssl-ca = / home / mysql / certs / ca-cert.pem ssl-cert = / home / mysql / certs / client-cert.pem ssl-key = / home / mysql / certs / client-key.pem
En outre, afin de faciliter la gestion unifiée, la même machine peut être utilisée pour soutenir le serveur et le type de client certificat SSL unique. Spécifiez deux types d'utilisation uniquement en cas de besoin pour générer un certificat SSL n'est pas spécifié directement ou utilisation.
Une fois configuré, examiner si le protocole SSL est activé
mysql > SHOW VARIABLES LIKE '% ssl%';
+ ----- + -------- + | VARIABLE_NAME | Valeur | + ----- + -------- + | Have_openssl | OUI | | HAVE_SSL | OUI | | 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 | + ----- + -------- + 5 rows in set (0.00 sec)Si la sortie du SSL décrit ci-dessus est pleinement active
2.3.2 exigent SSL et nécessitent X509
Afin d'assurer l'accès au réseau externe utilise des utilisateurs de MySQL cryptage SSL, lors de la génération, l'utilisateur peut forcer le SSL EXIGER ou EXIGER X509:
mysql > CREATE USER 'testuser'@'1.2.3.4' identified by 'testpass' SSL EXIGER; mysql > CREATE USER 'testuser'@'1.2.3.4' identified by 'testpass' require X509;La différence est que, SSL ne nécessite que EXIGER le client de préciser l'utilisation du certificat de serveur de validation du certificat ca, le serveur requiert également EXIGER X509 authentification de certificat client. Afin d'éviter les attaques d'intermédiaires, afin d'assurer une communication plus sécurisée, est généralement recommandé d'utiliser EXIGENT X509.
2.3.3 OpenSSL et yaSSL
MySQL peut utiliser sa propre bibliothèque yaSSL communication cryptée, il peut être utilisé pour OpenSSL de communication cryptée. paramètres STRING: besoins de WITH_SSL à préciser au moment de la compilation que l'utilisation spécifique:
fourni (utilisation yaSSL), oui (préférez bibliothèque os si elle est présente, sinon l'utilisation empaqueté), système (Utiliser bibliothèque d'os), < / Chemin / vers / custom / montage >Pour une meilleure sécurité, vous pouvez utiliser le système est livré avec OpenSSL et en temps opportun yum / mise à jour apt.
Si l'on considère la compatibilité des différentes versions, il est recommandé d'utiliser le haut-yaSSL.
Par exemple, OpenSSL a été pour la vulnérabilité CVE-2015-4000 dans l'amélioration minimale touche DH à 768 bits, alors que certaines anciennes versions de clé DH MySQL utilise 512 bits. Étant donné que l'algorithme de cryptage SSL par défaut MySQL DHE-RSA-AES256-SHA, si vous utilisez OpenSSL MySQL et l'accès entre les différentes versions peut apparaître erreur 2026 erreur.
2.3.4 surveilleront sur la base de la communication du maître SSL
Après avoir configuré le cryptage SSL, nous avons à nouveau essayé de ramper communication maître-esclave MySQL.
Je l'ai trouvé impossible de se rendre à partir du compte principal de connexion MySQL:
En outre, pris du maître aux données MySQL est tronquée:
On peut voir dans le cas de SSL crypté, ne peut être réalisé efficacement dans le taraudage principal MySQL.
3 Sécurité d'accès local
3.1 tunnel SSH
En général, nous avons tous besoin de SSH pour accéder à un serveur distant à partir d'un local, vous pouvez établir un tunnel SSH port spécifique pour accéder au serveur distant.
Tel qu'il est utilisé fonction de transfert de port SecureCRT (similaire comme mastic), l'orifice d'acheminement locale 3306 au port 3306 dans le serveur:
Si navicat habitué à utiliser ces outils, vous pouvez utiliser le haut-tunnel SSH (notez que les anciennes versions peuvent convertir une clé privée au format PPK):
3.2 phpmyadmin + HTTPS
Si vous êtes phpmyadmin utilisé de MySQL d'accès Web, il vous suffit d'accéder à une manière unifiée HTTPS:
serveur { écouter 80; server_name phpmyadmin.example.com; # HSTS forcé à utiliser le protocole HTTP vers HTTPS Jump add_header stricte-Transport-sécurité "max-age = 31536000"; ...... } serveur { écouter 443 ssl HTTP2; server_name phpmyadmin.example.com; # Configurer les certificats de serveur SSL ssl sur; 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 Résumé
la sécurité des données MySQL est un très gros problème, qui communication sécurisée en dehors de la passerelle souvent facilement négligé. Avec la popularité et le courant HTTPS / SMTPS / POP3S / IMAPS, et basé sur une variété de TCP, UDP, programme de communications cryptées sera de plus en plus appliquée aux entreprises en ligne. Dans cet article, quelques-unes des scènes entre l'accès au serveur MySQL / local aux serveurs plusieurs introduit programme de communications cryptées, nous espérons donner quelques idées, combinées à leurs besoins d'accès réel crypté à l'aide de MySQL.