Linux – Quick & Dirty Howto for OpenVPN

Quick & Dirty HowtoConfiguration de la partie Serveur:
apt-get install openvpn openssl
cp -R /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn/
cd /etc/openvpn/easy-rsa/2.0
vi vars
(change KEY_COUNTRY)
../vars
./clean-all
./build-ca
./build-key-server server
./build-key client1
./build-dh
cd /etc/openvpn/easy-rsa/2.0/keys
cp ca.crt ca.key dh1024.pem server.crt server.key /etc/openvpn
cd /etc/openvpn
vi openvpn.conf

Contenu d'openvpn.conf

port 1194
proto tcp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 172.16.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
user nobody
group users
persist-key
persist-tun
status openvpn-status.log
verb 3
client-to-client

Démarrer le service:

/etc/init.d/openvpn start

Configuration de la partie Client:

- récupérer les fichiers:

ca.crt client1.crt client1.key

- Créer un profil client:

client
dev tun
proto tcp
remote ip-or-hostname-of-your-openvpn-server 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo
verb 3

Si on veut rediriger TOUT le trafic vers le VPN, voici une config:

remote ip-or-hostname-of-your-openvpn-server 1194 udp
pull
comp-lzo adaptive
ca ca.crt
redirect-gateway def1
dev tun
cert client1.cert
key client1.key
tls-client
nobind
dhcp-option DNS ip-du-serveur-dns

Et c'est parti !

Crash Mysql -> Recovery

Ca n’a pas loupé, le dernier post au sujet de la sauvegarde de MySQL est plus que d’actualité.

En effet, hier, suite à une maj de mysql-server:

 # portupgrade mysql-server

MySQL était alors plantée avec le message suivant:

110817 21:02:23 mysqld_safe Starting mysqld daemon with databases from /var/db/mysql
110817 21:02:23 InnoDB: The InnoDB memory heap is disabled
110817 21:02:23 InnoDB: Mutexes and rw_locks use GCC atomic builtins
110817 21:02:23 InnoDB: Compressed tables use zlib 1.2.3
110817 21:02:23 InnoDB: Initializing buffer pool, size = 256.0M
110817 21:02:23 InnoDB: Completed initialization of buffer pool
InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 67108864 bytes!
110817 21:02:23 [ERROR] Plugin 'InnoDB' init function returned error.
110817 21:02:23 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
110817 21:02:23 [ERROR] Unknown/unsupported storage engine: InnoDB
110817 21:02:23 [ERROR] Aborting

110817 21:02:23 [Note] /usr/local/libexec/mysqld: Shutdown complete

110817 21:02:23 mysqld_safe mysqld from pid file /var/db/mysql/tripaxland4thot.pid ended

Etant donné que le service est en production et que les bases sont relativement petites, la restauration fut immédiate:

# rm -rf /var/db/mysql/*
# ls -la /root/_archives/mysql/db.all.201108*
-rw-r--r--  1 root  wheel  3627458 Aug 15 01:01 /root/_archives/mysql/db.all.20110815.sql.gz
-rw-r--r--  1 root  wheel  3639055 Aug 16 01:01 /root/_archives/mysql/db.all.20110816.sql.gz
-rw-r--r--  1 root  wheel  3651217 Aug 17 01:01 /root/_archives/mysql/db.all.20110817.sql.gz
# zcat /root/_archives/mysql/db.all.20110817.sql.gz | mysql
# /usr/local/etc/rc.d/mysql start

Et tout refonctionne 🙂

Script pour sauvegarder un serveur MySQL sous Linux ou FreeBSD

Avoir une base de données MySQL c’est bien, la sauvegarder c’est mieux.

Voici un petit script permettant de s’éviter des nuits de sueur après un crash de sa DB.

Le délai de conservation est de 90 jours.

#!/bin/sh

DUMP=/usr/local/bin/mysqldump
MYSQL=/usr/local/bin/mysql
OPTS="--opt"
DATE=`date "+%Y%m%d"`
ARCH_DIR=/root/_archives/mysql
DAYS=90

if [ ! -d $ARCH_DIR ]
then
        echo "error: no archive directory. Please create it or change it."
        exit 1
fi

$DUMP $OPTS  --all-databases | gzip > $ARCH_DIR/db.all.$DATE.sql.gz

if [ $? -ne 0 ]
then
        echo "error: check log"
        exit 2
fi

echo "show databases" | $MYSQL -N | while read db
do
        $DUMP $OPTS $db | gzip > $ARCH_DIR/db.$db.$DATE.sql.gz
done

find $ARCH_DIR -type f -name "db.*" -mtime +$DAYS -exec rm {} \;

exit 0

Ce script est à exécuter en crontab pour avoir une sauvegarde journalière par exemple:

tripaxland4thot# crontab -l
# Daily MySQL DUMP
1 1 * * * /root/_tools/dump_mysql.sh  > /tmp/dump_mysql.log 2>&1

Xymon – Monitorer portaudit sur un Freebsd & ses Jails

Il est important de savoir si des packages comportent des vulnérabilités sur son système.

Pour cela, FreeBSD met à disposition un outil appelé portaudit.

Couplé avec Xymon, voici ce que cela donne:

Lorsqu’il y a une alerte, la diode devient rouge et affiche le(s) package(s) présentant la faille de vulnérabilité remontée par portaudit:

Il arrive bien souvent d’avoir des jails sur un FreeBSD, et plutôt que d’installer portait sur chaque jail, il est possible de l’exécuter depuis la globale et d’analyser les jails.

Ce script s’appuie sur ce principe et reportera au nom des jails sur Xymon.

#!/bin/sh
# HOBBIT - WATCH THE SECURITY
# nlienard - 13-06-2006
#####################################################
#
TEST="portaudit"
VERSION="1.0"
COLOR="red"
PORTAUDIT="/usr/local/sbin/portaudit"

echo > $BBTMP/.portaudit.report

# Hostmaster Portaudit Check
echo "Hostmaster check:" >> $BBTMP/.portaudit.report
$PORTAUDIT -Fad >> $BBTMP/.portaudit.report
cat $BBTMP/.portaudit.report | grep  'Affected'  > /dev/null
if [ $? -ne 0 ]; then
        COLOR="green"
fi

echo "" >> $BBTMP/.portaudit.report
# FORMAT IT PROPERLY FOR BB...
LINE="status+1560 $MACHINE.$TEST $COLOR `date` - portaudit looks $COLOR `echo ; cat $BBTMP/.portaudit.report`"
$BB $BBDISP "$LINE"                     # SEND IT TO BBDISPLAY

# Jails Portaudit Check
cd $BBTMP
for JAIL in `jls | grep -v JID | awk '{print $4}'`; do
        COLOR="red"
        JIP=`basename $JAIL`
        #JNAME=`jls | grep $JIP | awk '{print $3}' | cut -d"." -f1`
        JNAME=`jls | grep $JIP | awk '{print $3}'`
        ls -1 $JAIL/var/db/pkg > $BBTMP/$JIP.paf
        echo "Jail ($JNAME) detection:" > $BBTMP/.portaudit.report
        $PORTAUDIT -f $BBTMP/$JIP.paf >> $BBTMP/.portaudit.report
        cat $BBTMP/.portaudit.report | grep  'Affected'  > /dev/null
        if [ $? -ne 0 ]; then
                COLOR="green"
        fi
        LINE="status+1560 $JNAME.$TEST $COLOR `date` - portaudit looks $COLOR `echo ; cat $BBTMP/.portaudit.report`"
        $BB $BBDISP "$LINE"                     # SEND IT TO BBDISPLAY
        rm $BBTMP/$JIP.paf
        echo ""
done
exit 0

Ce script s’installe dans ~xymon/client/ext/
Il s’active en insérant les lignes suivante dans  ~xymon/client/etc/clientlaunch.cfg

[portaudit]
        ENVFILE $XYMONCLIENTHOME/etc/xymonclient.cfg
        CMD $XYMONCLIENTHOME/ext/portaudit.sh
        LOGFILE $XYMONCLIENTLOGS/portaudit.log
        INTERVAL 60m

Ne pas oublier de redémarrer Xymon pour un résultat immédiat.

Si jamais Xymon n’est pas executé en root, il faudra utiliser sudo pour l’exécution de portaudit.

Test de Post depuis un script Perl

test from Command line

Code source:


#!/usr/bin/perl

use strict;
use warnings;
use WordPress::XMLRPC;

my $o = WordPress::XMLRPC->new({
 username => 'thot',
 password => 'xxxxxxx',
 proxy => 'http://distran.org/xmlrpc.php',
 });

my $article;
 $article->{title} = "Test de Post depuis un script Perl";
 $article->{categories} = ['Vrac'];
 $article->{description} = "test from Command line";

$o->newPost($article,1);

Ne pas oublier d’installer le port p5-WordPress-XMLRPC

# portinstall p5-WordPress-XMLRPC

Inauguration du portail Distran

Installation de WordPress sous Freebsd.

L’installation de wordpress est plutôt simple et se résume comme suit:

cd /usr/ports/www/wordpress
make install clean
cd /usr/local/www/wordpress/
cp wp-config-sample.php wp-config.php
echo "create database wordpress"   | mysql

Configurer les identifiants sql précédemment créés.

vi wp-config.php

Pour être fonctionnel, il faut évidemment configurer Apache pour répondre sur ce nouveau documentroot (/usr/local/www/wordpress).