vendredi 27 janvier 2012

phpMyAdmin + SSL + CentOS

phpMyAdmin + SSL + CentOS

Configuration de phpMyAdmin pour une utilisation à travers une connexion SSL, avec une identification par cookie, sur un serveur Apache, basé sur une CentOS.

Versions :
  • CentOS 6.2
  • Apache 2.2.15
  • PHP 5.3.3
  • MySQL Server 5.1.52

Je passe sur l'installation des différents composants ... en gros un
 # yum list httpd phpmyadmin php mysql-server mod_ssl
devrait faire l'affaire.



Le Pare-Feu

Ajouter la règle au pare-feu pour :
 # iptables -I INPUT 6 -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
On vérifie  que ça a marché :
 # service iptables status
On doit obtenir un truc genre :
 Table : filter
 Chain INPUT (policy ACCEPT)
 num  target     prot opt source               destination
 .
 .
 .
 6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp  dpt:443
 .
 .
 .
 Chain FORWARD (policy ACCEPT)
 num  target     prot opt source               destination        
 1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

 Chain OUTPUT (policy ACCEPT)
 num  target     prot opt source               destination

Grosso-merdo vous devriez avoir ce résultat. Un petit coup de "save" :
 # service iptables save
 Et le tour est joué pour le pare-feu.


Apache

L'avantage des distros avec des paquets pré-compilé c'est que les configuration se font souvent dans la foulée ...
Normalement le fichier /etc/httpd/conf.d/ssl.conf existe et contient le nécessaire.


 LoadModule ssl_module modules/mod_ssl.so

 Listen 443

 
SSLPassPhraseDialog builtin

 SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
 SSLSessionCacheTimeout 300

 SSLMutex default
 SSLRandomSeed startup file:/dev/urandom 256
 SSLRandomSeed connect builtin

 SSLCryptoDevice builtin

 <virtualhost _default_:443="">
   ErrorLog logs/ssl_error_log
   TransferLog logs/ssl_access_log
   LogLevel warn

   SSLEngine on

   SSLProtocol all -SSLv2

   SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW

   SSLCertificateFile /etc/pki/tls/certs/localhost.crt

   SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

   <files "\.(cgi|shtml|phtml|php3?)$"="" ~="">

     SSLOptions +StdEnvVars
   </files>
   <directory "="" cgi-bin"="" var="" www="">
     SSLOptions +StdEnvVars
   </directory>

   SetEnvIf User-Agent ".*MSIE.*" \
   nokeepalive ssl-unclean-shutdown \
   downgrade-1.0 force-response-1.0

   CustomLog logs/ssl_request_log \
   "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

 </virtualhost>

Du coup j'ai juste commenté les lignes qui interdisent l'accès aux IPs externes dans le fichier de configuration de phpMyAdmin :
/etc/httpd/conf.d/phpMyAdmin.conf
 <Directory /usr/share/phpMyAdmin/>
    Order Deny,Allow
 #   Deny from All
 #   Allow from 127.0.0.1
 #   Allow from ::1
     Allow from All
 </Directory>

Bien sûr  ceci est une mesure temporaire, je vous conseille de chercher de la doc pour cette partie de la configuration.

On relance la machine :
  # service httpd restart


phpMyAdmin
Le fichier de configuration de PMA est /etc/phpMyAdmin/config.inc.php.
J'ai modifier les lignes :
 $cfg['blowfish_secret'] = '';
 $cfg['Servers'][$i]['auth_type']     = 'http';
par
 $cfg['blowfish_secret'] = 'Monde de merde - Georges Abitbol'
 $cfg['Servers'][$i]['auth_type']     = 'cookie';
Puis j'ai ajouté les lignes :
 $cfg['PmaAbsoluteUri']  = 'https://mon.server.loc/phpMyAdmin/';
 $cfg['ForceSSL']        = true;

Pour le nom du serveur j'ai fixé l'IP et au niveau de ma box (configuration du serveur DHCP) j'ai associé l'adresse l'IP choisi au nom de mon serveur. Je peux donc y accéder par un mon (ce qui se retient mieux qu'une IP).

Conclusion
Je ne pense pas avoir sauté d'étape. Grâce à des distributions basé sur des RedHat, Debian et consors la configuration est très simplifié. J'ai une utilisation privée de mon serveur, je n'ai donc pas beaucoup de soucis d'optimisations et de performances.
Pour une installation plus sécurisée et plus robuste je vous conseille de vous renseigner sur le ouèb, DuckDuckGo est ton ami !!!


Mes sources :

phpMyAdmin foire grave sous lighttpd, si j'arrive à bien configurer le serveur je ferai la même pour lighttpd.

Aucun commentaire:

Enregistrer un commentaire