Archive

Archive for septembre 2011

OVH minicloud

11 septembre 2011 2 commentaires

J’ai testé il y a quelques temps l’offre minicloud d’OVH. J’ai trouvé la possibilité d’avoir une machine sur le net pour moins de 8 euros/mois vraiment géniale, mais un peu plus de stockage n’aurait pas été du luxe.

Création de l’image, première connexion :

Il faut d’abord créer un compte et se connecter au ManagerV5 d’ovh.

Créer une paire de clés ssh grace à l’interface web, puis télécharger la clé privée (j’utilise openssh, je choisit donc le format pem), ensuite il faut donner les bons droits à la clé : chmod go-rx sshkey.pem

Ensuite on peut créer son « cloud » via l’interface web, j’ai choisi Ubuntu (32bits et 64bits sont proposés, j’ai choisi 64bits).

Ensuite on peut se connecter à la machine une fois démarrée, La somme d’argent mise sur le « compte » est débité à raison d’un centime d’euro par heure, jusqu’a ce que le compte soit épuisé ou que l’on éteigne la machine depuis l’interface web.

NOTE : L’Ip / nom de domaine n’est valide qu’au cours d’une seule ‘session’, une nouvelle ip est attribuée a chaque démarrage de l’image !

On se connecte en ssh : ssh -i sshkey.pem root mc-xxx.ovh.net

Installation de paquets

Pour mon confort:

vim
sysvinit-util
sysv-rc-conf

Pour Apache et Php :

apache2
libapache2-mod-php5
php5-suhosin
php5-xcache
php5-gd

Installation de Tomcat7

J’ai décidé d’installer Tomcat7, il n’y a pas (encore) de paquet apt correspondant. J’installe donc à la main :


mkdir /usr/local/tomcat7
cd /usr/local
wget http://apache.cict.fr/tomcat/tomcat-7/v7.0.16/bin/apache-tomcat-7.0.16.tar.gz
tar zxvf apache-tomcat-7.0.16.tar.gz
mv apache-tomcat-7.0.16 tomcat7
rm apache-tomcat-7.0.16.tar.gz

Tomcat ne sera jamais accédé directement, mais toujours via le serveur Apache grâce à mod_proxy_ajp. Donc je commente le Connector http dans le fichier conf/server.xml.

Démarrage de Tomcat en tant que service

Je dispose d’un script de service ‘maison’ nommé tomcat, je le place dans /etc/init.d

Ensuite : update-rc.d tomcat defaults

Configuration d’Apache

Activation des modules proxy et proxy_ajp

a2enmod proxy
a2enmod proxy_ajp

Ensuite on vient modifier le ficher /etc/apache2/mods_available/proxy.conf :

ProxyRequests Off

AddDefaultCharset off
Order deny,allow
Deny from all
#Allow from .example.com

# Enable/disable the handling of HTTP/1.1 "Via:" headers.
# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
# Set to one of: Off | On | Full | Block

ProxyVia Off

#redirect to tomcat
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/

Mise en place d’un VirtualHost

1) Achetez votre nom de domaine !
2) Créer le dossier dans /var/www :

mkdir /var/www/domaine.com

3) Ajouter la conf dans /etc/apache2/sites_available :

/etc/apache2/sites-available/www.la-bonneterie.fr:

DocumentRoot /var/www/www.domaine.fr
ServerName http://www.domaine.fr


Puis activer la conf a2ensite http://www.domaine.fr

Sécurisation du serveur : Script de Firewall

Un script de firewall est a mon sens une bonne mesure de sécurité :
J’utilise un script tout simple que je range dans /etc/init.d/firewall (que j’active ensuite avec updaterc.d firewall defaults)

#!/bin/bash
### BEGIN INIT INFO
# Provides: firewall
# Required-Start: $remote fs $syslog $network
# Required-Stop: $remote fs $syslog $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: firewall
# Description : iptables-based firewall script
# Author : Julien Rialland
### END INIT INFO

IPT=`which iptables`

#firewall rules installation
#note that the order in which rules are appended is very important. For example, if your first rule is
#to deny everything... then no matter what you specifically allow, it will be denied.
function start {
echo 'Installing new firewall rules...'
$IPT -F

#default policy for the predefined chains
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP

#accept ssh connections
$IPT -A INPUT -p tcp --dport 22 -j ACCEPT

#accept http and https connections (80,443)
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT
$IPT -A INPUT -p tcp --dport 443 -j ACCEPT

#accept anything from localhost
$IPT -A INPUT -i lo -j ACCEPT

#Accept related or established connections so ftp can work, for example
$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#everything else is dropped
$IPT -A INPUT -j DROP

echo '...done.'
}

function stop {
echo 'Flushing all firewall rules...'
$IPT -F
echo '...done.'
}

function restart {
stop
start
}

function status {
$IPT -L -n -v
}

case "$1" in
start|stop|restart|status)
$1
;;
*)
echo "Usage : $0 (start|stop|restart|status)"
;;
esac

Mise en place de fail2ban

ce script surveille les logs de ssh, et bannit les ip qui tentent des connexions repétées sans réussir, ce qui empêche les attaques par dictionnaire par exemple : apt-get install fail2ban

DNS dynamique

Les machines minicloud n’ont pas d’ip fixe, Il faut donc configurer un dns dynamique. Même si on dispose d’un nom de domaine (en .fr par exemple) il faut pouvoir toujours rediriger vers la même machine, même aprés un redemarrage, sans avoir a reconfigurer les dns. Je me sers dont d’une adresse en .dyndns.org.

http://www.domaine.fr (CNAME)=> domaine.dyndns.org => ip flottante minicloud


apt-get install libio-socket-ssl-perl ddclient

Voici ma configuration (/etc/ddclient.conf)

pid=/var/run/ddclient.pid
syslog=yes
protocol=dyndns2
use=if, if=eth0
daemon=300
server=members.dyndns.org
login=jrialland
password='xxxxxxxxxxxxx'
mondomaine.dyndns.org

Configuration Email

Ovh empeche l’utilisation des miniclouds comme serveurs email, in vont même jusqu’a empécher le traffic vers les ports 25(smtp) d’autres machines.
Pour pouvoir envoyer des notifications par email depuis mes programmes, je contourne la limitation en configurant postfix pour utiliser mon compte gmail :


apt-get install postfix libsasl2-2 ca-certificates libsasl2-modules heirloom-mailx

vi /etc/postfix/main.cf:

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_use_tls = yes
--------
vi /etc/postfix/sasl_passwd:
[smtp.gmail.com]:587 user.name@gmail.com:password

chmod 400 /etc/postfix/sasl_passwd
postmap /etc/postfix/sasl_passwd

cat /etc/ssl/certs/Thawte_Premium_Server_CA.pem | sudo tee -a /etc/postfix/cacert.pem

ln -s /etc/postfix/sasl_passwd.db /etc/postfix/sasl/sasl_passwd2.db

service postfix restart

La procédure relève un peu du parcours du combattant, mais en tout cas ça me permet de valider le fait qu’on peut envoyer des emails depuis un minicloud.

L’autre solution (meilleure a mon avis) serait d’utiliser le relais smtp d’ovh, qui permet d’envoyer 100 mails/heure.

Installation de subversion

J’ai décidé d’installer un serveur subversion sur cette machine, là encore Je me suis un peu battu, mais j’ai finalement une configuration qui me convient :

Il faut d’abord installer/configurer svn :


apt-get install subversion libapache2-svn
mkdir /var/svn
mkdir /var/svn/repo
svnadmin create /var/svn/repo

Modifier le fichier /var/svn/repo/conf/svnserve.conf

[general]
anon-access = none
auth-access = write
password-db = passwd
realm = SVN Repository

Modifier le fichier passwd


sudo addgroup svn --system
sudo adduser svn --system --home /var/svn --no-create-home --ingroup svn
sudo chown -R svn: /var/svn

Créer un script de démarrage dans /etc/init.d/svnserve :

#!/bin/sh

set -e
if [ -x /usr/bin/svnserve ] ; then
HAVE_SVNSERVE=1
else
echo "Svnserve not installed."
exit 0
fi

. /lib/lsb/init-functions

case "$1" in
start)
log_action_begin_msg "Starting SVN server"
/sbin/start-stop-daemon --start --chuid svn:svn --exec /usr/bin/svnserve -- -d -r /var/svn
log_action_end_msg $?
;;
stop)
log_action_begin_msg "Stopping SVN server"
/sbin/start-stop-daemon --stop --exec /usr/bin/svnserve
log_action_end_msg $?
;;
force-reload|restart)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/svnserve {start|stop|restart|force-reload}"
exit 1
;;
esac

exit 0

Configurer le démarrage


sudo update-rc.d svnserve defaults

Pour Apache : Ne pas oublier de changer les droits du dossier des dépots :

update-rc.d svnserve defaults
chown -R www-data /var/svn/

J’ai ajouté une configuration de site dans /etc/apache2/sites_available/svn :

<IfModule dav_svn_module>
ServerName jrcloud.dyndns.org:443
SSLEngine On
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
SSLCertificateFile /etc/pki_custom/certs/jrcloud.dyndns.org.crt
SSLCertificateKeyFile /etc/pki_custom/private/jrcloud.dyndns.org.key

<Location /svn>
DAV svn
SVNParentPath /var/svn
SVNListParentPath On
AuthType Basic
AuthName "SVN Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
</Location>
</IfModule>

Puis on active la conf avec : a2ensite svn

On crée un certificat SSL pour Apache :

domain=domaine.dyndns.org

mkdir /etc/pki_custom
mkdir /etc/pki_custom/private
mkdir /etc/pki_custom/certs
mkdir /etc/pki_custom/csrs

openssl genrsa -out /etc/pki_custom/private/$domain.key 1024
openssl req -new -key /etc/pki_custom/private/$domain.key -out /etc/pki_custom/csrs/$domain.csr
openssl x509 -req -days 1825 -in /etc/pki_custom/csrs/$domain.csr -signkey /etc/pki_custom/private/$domain.key -out /etc/pki_custom/certs/$domain.crt

Pour créer un utilisateur subversion, il faut juste créer un utilisateur pour l’authentification Apache :


sudo htpasswd -s /etc/apache2/dav_svn.passwd utilisateur
sudo chown www-data:www-data /etc/apache2/dav_svn.passwd

Une fois ces étapes passées, le dépot est accessible via https://domaine.dyndns.org/svn/repo

Publicités
Catégories :Uncategorized

jfastcgi 2.1 is available

6 septembre 2011 1 commentaire

jFastCGI 2.1 is available, it features some minor bug corrections. The library is now available through the plublic maven repositories.

Catégories :Uncategorized Étiquettes : ,