Apache 2 – Régénérer un certificat SSL auto-signé

Suite à l’article de nanard sur les dates de certificats SSL, j’ai reçu des messages d’insultes de ce type:

depth=0 /C=FR
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=FR
verify error:num=10:certificate has expired
notAfter=Feb 23 14:21:23 2010 GMT
verify return:1
depth=0 /C=FR
notAfter=Feb 23 14:21:23 2010 GMT
verify return:1
DONE
notBefore=Jan 24 14:21:23 2010 GMT
notAfter=Feb 23 14:21:23 2010 GMT

Voici comment regénérer un certificat SSL auto-signé:

Connectez-vous en root.

cd /etc/apache2
openssl req -new -x509 -days 365 -key server.key -out server.crt
invoke-rc.d apache2 restart

Et voila !

echo | openssl s_client -connect www.benjaminbaudouin.com:443 | openssl x509 -noout -dates

depth=0 /C=FR/ST=Some-State/O=Internet Widgits Pty Ltd
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=FR/ST=Some-State/O=Internet Widgits Pty Ltd
verify return:1
notBefore=Apr 1 08:03:02 2010 GMT
notAfter=Apr 1 08:03:02 2011 GMT
DONE

App

Tuning Apache 2 pour WordPress

Tuning

Désactivation de modules non utilisés

a2dismod authz_default authz_groupfile status cgi env python

apache2.conf

Timeout 10

KeepAlive Off

<IfModule mpm_prefork_module>
StartServers          3
MinSpareServers       3
MaxSpareServers      10
ServerLimit         50
MaxClients          50
MaxRequestsPerChild   2000
</IfModule>

/etc/init.d/apache2 restart

Benchmark

Server version: Apache/2.2.9 (Debian)
Server built:   Jul 14 2009 20:03:28

Loaded Modules:
core_module (static)
log_config_module (static)
logio_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
alias_module (shared)
auth_basic_module (shared)
authn_file_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
deflate_module (shared)
dir_module (shared)
expires_module (shared)
headers_module (shared)
info_module (shared)
mime_module (shared)
negotiation_module (shared)
php5_module (shared)
rewrite_module (shared)
setenvif_module (shared)
ssl_module (shared)
status_module (shared)

Créer un fichier de 10Ko:

dd if=/dev/zero of=/tmp/10K bs=10K count=1

autobench
version: 2.1.2

${HOME}/.autobench.conf

host1 = www.benjaminbaudouin.com
uri1  = /10K
port1 = 80
low_rate  = 20
high_rate = 200
rate_step = 20
num_conn  = 5000
num_call  = 10
timeout   = 5
output_fmt = tsv

run.sh

#!/bin/bash
graph_title="Apache/2.2.9"
dir="$(date +%Y%m%d)";
[ -e ${dir} ] && rm -rf ${dir}
mkdir ${dir}
[ ! -e ${dir}/output.tsv ] && autobench --single_host --file ${dir}/output.tsv
[ ! -e ${dir}/output.ps ] && echo -e "[copy/paste] graph title: ${graph_title}" && bench2graph ${dir}/output.tsv ${dir}/output.ps
[ ! -e ${dir}/output.gif ] && convert -rotate 90 ${dir}/output.ps ${dir}/output.gif

Conclusion

La limite basse Apache 2.2.9 (Tuned) est visiblement de 35 req/sec pour des pages de 10ko.

Liens

Autobench

Optimize apache slow vps wordpress

Apache Performance Tuning

App

Apache 2 LDAP SSL

Paquets debian (pré-requis)

apt-get install apache2 libapache2-mod-php5 libldap-2.4-2 ldap-utils libsasl2-modules-ldap openssl libsasl2-2 libkrb5-3 php5-ldap php5-sasl php5-auth-pam

Configuration Apache

Activer le module LDAP Apache 2.0

a2enmod auth_ldap

Activer le module LDAP Apache 2.2

a2enmod authnz_ldap

Certificat SSL

Copier le certificat dans /etc/apache2/ssl/ldap.pem

-----BEGIN CERTIFICATE-----
KJDFJ
...
JDiejfioe
-----END CERTIFICATE-----

Configuration LDAP dans Apache 2.0

Ajouter dans apache2.conf ou httpd.conf:

LDAPTrustedCA /etc/apache2/ssl/ldap.pem
LDAPTrustedCAType BASE64_FILE

Configuration LDAP dans Apache 2.2

Ajouter dans apache2.conf ou httpd.conf:

LDAPTrustedGlobalCert CA_BASE64 /etc/apache2/ssl/ldap.pem

/etc/ldap/ldap.conf

BASE    dc=com
URI     ldap://ldap.host.com
TLS_REQCERT demand
TLS_CACERT /etc/apache2/ssl/ldap.pem

Redémarrer le service apache2

/etc/init.d/apache2 restart

Test

ldaptls.php


Troubleshooting

Problème: fonction PHP ldap_start_tls en erreur. Authentification LDAP impossible par la suite.

Système: debian lenny
Nom du paquet: apache2
Version: 2.2.9-10

Solution:

cd /etc/ldap
mkdir certs
cp /etc/apache2/ssl/ldap.pem /etc/ldap/certs/mycert.pem
vi /etc/ldap/ldap.conf

TLS_REQCERT  never
TLS_CACERT  /etc/ldap/certs/mycert.pem

/etc/init.d/apache2 restart

App

Apache 2.2 – Lister les modules chargés

apache2ctl -t -D DUMP_MODULES

Loaded Modules:
core_module (static)
...
userdir_module (shared)
Syntax OK

App

Tracer une Application LAMP avec les logs Apache Blackbox

Logger avec Apache 2.0

C’est grâce au module Apache mod_logio.c (Logging of input and output bytes per request) que nous allons réaliser des logs de type blackbox.

Liste des modules compilés statiquement:
apache2 -l

Compiled in modules:
core.c
mod_log_config.c
mod_logio.c
prefork.c
http_core.c
mod_so.c

Configuration Apache 2.0

# Blackbox log format
<IfModule mod_logio.c>
LogFormat "%a/%S %X %t \"%r\" %s/%>s %{pid}P/%{tid}P %T/%D %I/%O/%B" blackbox
</IfModule>
<IfModule !mod_logio.c>
LogFormat "%a/%S %X %t \"%r\" %s/%>s %{pid}P/%{tid}P %T/%D 0/0/%B" blackbox
</IfModule>
CustomLog /var/opt/apache2/logs/blackbox blackbox

Si le port source du client ne vous intéresse pas, remplacer %S par 0

Attention!

Pour utiliser pleinement les logs de type BlackBox if va falloir patcher le code source mod_log_config.c ou en créant un module de log dédié. Dans les deux cas, un nouveau format permettra à la directive d’enregistrer le port source de la connexion initiée par le client.

Si vous souhaitez logger le port source du client voici les modifications à opérer.  Pour Apache 2.0 cela se trouve dans les sources modules/loggers/mod_log_config.c

Trouver la fonction définit pour log_remote_address. Ajouter la fonction suivante après elle:

/*
 * log_remote_port patch
 */

static const char *log_remote_port(request_rec *r, char *a)
{
        apr_port_t rport;
        apr_sockaddr_port_get(&rport, r->connection->remote_addr);
        return apr_itoa(r->pool, rport);
}

Trouver une fonction initulée log_pre_config à la fin du fichier et ajouter ce qui suit :

static int log_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
{
        .....
        log_pfn_register(p, "s", log_status, 1);
        /* log_remote_port patch */
        log_pfn_register(p, "S", log_remote_port, 0);
    }
    return OK
}

Sauvegarder les modifications, puis recompiler Apache.

Grapher avec Munin

Source: http://www.oreillynet.com/pub/a/apache/2004/04/22/blackbox_logs.html


App

Apache – Consommation mémoire par processus

Une simple commande qui peut donner de précieuses informations :

#apache
ps -ylC httpd --sort:rss
#apache2
ps -ylC apache2 --sort:rss

Note : La colonne RSS indique la mémoire non swappée utilisée par les processus Apache en kiloBytes.

Apache – Blacklistage d’IPs

  • Dans le core ou vhost :

RewriteEngine on
Rewritemap blacklist txt:/path/to/blacklist.txt
RewriteCond ${blacklist:%{REMOTE_ADDR}} =b
RewriteCond %{request_uri} !=/sorry.html
RewriteRule .* /sorry.html                        [R,L]

>cat /path/to/blacklist.txt
193.220.137.2 b
81.199.171.20 b

  • Sans réécriture :

<Limit GET HEAD POST>
order allow,deny
deny from 202.70.112.0/20
allow from all
</LIMIT>

Générateur de classes IP (par pays) en ligne : http://blockacountry.com

  • Dynamique (ex. par pays) :

Avec la liste ip-to-country et un script Perl du style :
#!/usr/bin/perl -w
use strict;
my %ip;
my $old_ip=0;
while (<>) {
my ($ip) = split;
next if ($ip eq $old_ip);
my ($a,$b,$c,$d) = split(/\./,$ip);
my $n = ((((($a * 256) + $b) * 256) + $c) * 256) +$d;
open (FILE,"< ip-to-country.csv") || die $!;
while (<FILE>) {
my ($beg,$end,$country) = (split (/,/,$_))[0,1,4];
$beg =~ s/"//g;
$end =~ s/"//g;
if (($beg <= $n) and ($end >= $n)) {
$ip{$ip}++;
print "ip = $ip\n";
last;
}}
close(FILE);
$old_ip=$ip;
}
exit(0);

Quelques conseils pour sécuriser votre backoffice d’administration WordPress

Introduction

Il est bien connu que les mots de passe circulent en clair sur le réseau.

Mais qu’est-ce que cela veut dire ?

En réalité il est possible de « sniffer » une connexion réseau afin d’obtenir des informations personnelles. Comme par exemple quand vous vous connectez sur votre backoffice d’administration wordpress.

Pour remédiez à cela nous allons crypter l’échange d’informations entre nous et le serveur.

Installer SSL pour Apache2

En root.

  1. Ajouter le module SSL pour apache
    a2enmod ssl
  2. Forcer la relecture des fichiers de configuration Apache
    /etc/init.d/apache2 force-reload
  3. Créer le certificat
    openssl req -x509 -nodes -days 365 -newkey rsa:1024 -out /etc/apache2/server.crt -keyout /etc/apache2/server.key
  4. Ajouter dans /etc/apache2/ports.conf
    Listen 443
  5. Ajouter le nouveau VHost dans /etc/apache2/sites-enabled/000-default
    NameVirtualHost IP:443<VirtualHost IP:443>
    ServerName www.hostname.com
    DocumentRoot /var/www/path
    SSLEngine on
    SSLCertificateFile /etc/apache2/server.crt
    SSLCertificateKeyFile /etc/apache2/server.key
    </VirtualHost>
  6. Relancer Apache
    /etc/init.d/apache2 force-reload

Hack de la fonction wp_register

Disclaimer: ce code est fournit tel quel. Vous l’utilisez sans aucune garantie et/ou support.

Ce hack permet d’écrire l’url d’administration en https.

L'ongle Admin. du Site pointe bien vers le https

L'onglet Admin. du Site pointe bien vers le https

Remplacer dans wp-includes/general-template.php

ligne 52:
. admin_url() .
par
. preg_replace("|^http://|", "https://", admin_url()) .

App

Apache – Configuration .htaccess

.htaccess

AuthUserFile /path/to/.htpasswd
AuthGroupFile /dev/null
AuthName "Private Access"
AuthType Basic
<LIMIT GET POST>
Require valid-user
</LIMIT>

.htpasswd

Autoriser un utilisateur et créer le fichier .htpasswd

htpasswd -c /path/to/.htpasswd username

Ajouter un utilisateur au fichier .htpasswd

htpasswd -m /some/where/.htpasswd username2

Tuning LAMP

Article traitant du Tuning d’un environnement LAMP.

Source IBM

App

Compression Apache 2, activer mod_deflate

Une étude de IBM conclut par le fait que la compression offre à l’utilisateur un confort précieux lors de la consultation de pages web sur Internet. Voici comment l’implémenter sur un serveur apache2.

Installation

mod_deflate est installé par défaut avec apache2

Paramétrage

Dans /etc/apache2/conf.d/mod_deflate.conf, ajoutez :

 

#
## Mod Deflate
#

<Location />
# Insert filter
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
       BrowserMatch bMSI[E] !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</Location>

 

Mise en production

Activez les deux modules suivants :

a2enmod headers
a2enmod deflate

Relancez Apache

/etc/init.d/apache2 force-reload ou restart

Tester

Gidnetwork

Source

App

Recent Tweets

Catégories