Chaque cas étant particulier,  je vais simplement expliquer mes contraintes et les solutions choisies.

Les contraintes classiques:

  • Un bon support de linux (OS servant de base pour le serveur)
  • Une faible consommation (fonction 24h/24 365/ans)
  • Suffisamment de puissance pour fournir des fichiers sur le réseau local via samba ~ 70Moctets/s

(suite…)

Cette extension permet de passer automatiquement sur la version https d’un site automatiquement. Certains sites propose deux versions une en http et l’autre en https. Le HTTPS est du HTTP auquel on rajoute une sur-couche de cryptage SSL ou TLS.

(suite…)

Une commande sympa pour tester facilement des filtres fail2ban

fail2ban-regex

Usage: /usr/bin/fail2ban-regex [OPTIONS] <LOG> <REGEX> [IGNOREREGEX]

Fail2Ban v0.8.3-SVN reads log file that contains password failure report
and bans the corresponding IP addresses using firewall rules.

This tools can test regular expressions for "fail2ban".

Options:
-h, --help              display this help message
-V, --version           print the version

Log:
string                  a string representing a log line
filename                path to a log file (/var/log/auth.log)

Regex:
string                  a string representing a 'failregex'
filename                path to a filter file (filter.d/sshd.conf)

IgnoreRegex:
string                  a string representing an 'ignoreregex'
filename                path to a filter file (filter.d/sshd.conf)

un petit test avec le cas de robots à la recherche de failles à exploiter sur votre serveur web.

la commande à exécuter sera:

fail2ban-regex /var/log/apache2/default-error.log.1 /etc/fail2ban/filter.d/apache-nodnsuse.conf

Et si tout se passe bien elle nous renverra:

Running tests
=============

Use regex file : /etc/fail2ban/filter.d/apache-nodnsuse.conf
Use log file   : /var/log/apache2/default-error.log

Results
=======

Failregex
|- Regular expressions:
|  [1] [[]client []] File does not exist: /var/empty/.*
|
`- Number of matches:
   [1] 0 match(es)

Ignoreregex
|- Regular expressions:
|
`- Number of matches:

Summary
=======

Sorry, no match

Look at the above section 'Running tests' which could contain important
information.
xxxxx@xxxxx:~$ fail2ban-regex /var/log/apache2/default-error.log.1 /etc/fail2ban/filter.d/apache-nodnsuse.conf
/usr/share/fail2ban/server/filter.py:431: DeprecationWarning: the md5 module is deprecated; use hashlib instead
  import md5

Running tests
=============

Use regex file : /etc/fail2ban/filter.d/apache-nodnsuse.conf
Use log file   : /var/log/apache2/default-error.log.1

Results
=======

Failregex
|- Regular expressions:
|  [1] [[]client []] File does not exist: /var/empty/.*
|
`- Number of matches:
   [1] 20 match(es)

Ignoreregex
|- Regular expressions:
|
`- Number of matches:

Summary
=======

Addresses found:
[1]
    72.55.156.243 (Sun Jun 06 14:18:32 2010)
    72.55.156.243 (Sun Jun 06 14:18:32 2010)
    72.55.156.243 (Sun Jun 06 14:18:33 2010)
    72.55.156.243 (Sun Jun 06 14:18:33 2010)
    72.55.156.243 (Sun Jun 06 14:32:00 2010)
    72.55.156.243 (Sun Jun 06 14:32:00 2010)
    72.55.156.243 (Sun Jun 06 14:32:01 2010)
    72.55.156.243 (Sun Jun 06 14:32:01 2010)
    72.55.156.243 (Sun Jun 06 14:32:01 2010)
    72.55.156.243 (Sun Jun 06 14:32:01 2010)
    72.55.156.243 (Sun Jun 06 15:19:52 2010)
    72.55.156.243 (Sun Jun 06 15:19:52 2010)
    72.55.156.243 (Sun Jun 06 15:19:52 2010)
    72.55.156.243 (Sun Jun 06 15:19:53 2010)
    72.55.156.243 (Sun Jun 06 15:19:53 2010)
    72.55.156.243 (Sun Jun 06 15:19:53 2010)
    88.80.10.1 (Sun Jun 06 22:02:12 2010)
    202.67.197.61 (Wed Jun 09 08:08:56 2010)
    61.153.150.170 (Fri Jun 11 13:39:20 2010)
    61.153.150.170 (Fri Jun 11 17:15:17 2010)

Date template hits:
41 hit(s): MONTH Day Hour:Minute:Second
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second Year
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second
0 hit(s): Year/Month/Day Hour:Minute:Second
0 hit(s): Day/Month/Year Hour:Minute:Second
0 hit(s): Day/MONTH/Year:Hour:Minute:Second
0 hit(s): Month/Day/Year:Hour:Minute:Second
0 hit(s): Year-Month-Day Hour:Minute:Second
0 hit(s): Day-MONTH-Year Hour:Minute:Second[.Millisecond]
0 hit(s): Day-Month-Year Hour:Minute:Second
0 hit(s): TAI64N
0 hit(s): Epoch
0 hit(s): ISO 8601
0 hit(s): Hour:Minute:Second
0 hit(s): 

Success, the total number of match is 20

However, look at the above section 'Running tests' which could contain important
information.

Ce filtrage se base sur le fait que les robots à la recherche de votre phpmyadmin ou votre webmail pour tenter d’exploiter des failles font leur recherche en utilisant l’adresse IP plutôt qu’un nom de domaine. Les utilisateurs normaux utilisent toujours le nom de domaine: facile de différencier les deux.

Le fichier host qui va récupérer tous les accès sans nom d’Host et les diriger vers /var/www/empty
on crée un virtual host sans nom de domaine /etc/apache2/sites-avaible/default (tous les autres devront en avoir un obligatoirement)

<VirtualHost *:80>

 DocumentRoot /var/www/empty/

 ServerAdmin xxxxxxxxx@yyyyyyyyyyy.com

 ErrorLog /var/log/apache2/default-error.log
 CustomLog /var/log/apache2/default-access.log combined

 <Files  /var/empty/robots.txt>
 Order Allow,Deny
 Allow from All
 </Files>

</VirtualHost>

Quelques robots d’indexation (dont ceux de google) tente aussi des accès via l’IP, ce genre de robots commence toujours par robot.txt, on leur dit simplement qu’il n’ont rien a faire ici.

dans /var/www/empty/robot.txt

User-agent: *
Disallow: /

Vous pouvez aussi créer in index.html si vous le désirez pour rediriger un utilisateur qui s’est perdu

/var/log/apache2/default-error.log va vite se remplir avec des evenements du genre:

[Sun May 30 13:59:55 2010] [error] [client 91.1.221.208] File does not exist: /var/empty/phpmyadmin
[Sun May 30 13:59:55 2010] [error] [client 91.1.221.208] File does not exist: /var/empty/phpMyAdmin
[Sun May 30 13:59:55 2010] [error] [client 91.1.221.208] File does not exist: /var/empty/php
[Mon May 31 15:42:13 2010] [error] [client 77.111.88.11] File does not exist: /var/empty/roundcubemail
[Mon May 31 15:42:13 2010] [error] [client 77.111.88.11] File does not exist: /var/empty/rc
[Mon May 31 15:42:14 2010] [error] [client 77.111.88.11] File does not exist: /var/empty/webmail
[Mon May 31 15:42:14 2010] [error] [client 77.111.88.11] File does not exist: /var/empty/roundcube
[Mon May 31 15:42:14 2010] [error] [client 77.111.88.11] File does not exist: /var/empty/mail
[Mon May 31 15:42:14 2010] [error] [client 77.111.88.11] File does not exist: /var/empty/README

Ensuite le filtre pour fail2ban /etc/fail2ban/filter.d/apache-nodnsuse.conf:

failregex = [[]client []] File does not exist: /var/www/empty/.*
ignoreregex=

Et on ajoute ce filtre dans la configuration de fail2ban /etc/fail2ban/jail.conf:

[apache_nodnsuse]

enabled = true
port    = http,https
filter  = apache-nodnsuse
logpath = /var/log/apache2/default-error.log
maxretry = 1

Lucid Lynk est sortie… , mise à jour sur mon EEEPC 901…

Et un petit bug: impossible de se connecter via Wifi en WPA WPA2, (bug qui a un gout de déjà vu sur Ubuntu 9.04….) c’est un problème d’ options dans les drivers…

Une méthode compliqué, trouver les drivers pour RT2860, mettre les bonnes options, le  compiler, et l’installer

Un méthode relativement simple: mettre à jour son noyaux vers la prochaine version (en release candidate pour le moment)

la liste est ici: http://kernel.ubuntu.com/~kernel-ppa/mainline/

J’ai choisit le dernier disponible à ce jour le 2.6.34-rc6-lucid,

Donc télécharger ces paquets dans un dossier:

linux-headers-2.6.34-020634rc6_2.6.34-020634rc6_all.deb

linux-headers-2.6.34-020634rc6-generic_2.6.34-020634rc6_i386.deb

linux-image-2.6.34-020634rc6-generic_2.6.34-020634rc6_i386.deb

puis faites un

sudo dpkg -i linux-*.deb

Puis un redémarrage et normalement c’est du tout bon.

Attention vous installez un noyaux non final! vous pouvez échanger ce bug contre un autre!

Afin d’optimiser les requêtes sql, MySQL garde ouvert toutes les dernière tables utilisées. Ceci permet d’éviter d’ouvrir et de fermer continuellement une table qui fait l’objet de requêtes régulières. Afin de savoir si le nombre de table qui restent ouvertes est suffisant j’ai fait un petit script qui affiche le nombre d’ouverture de nouvelles tables.

Ces chiffres sont disponibles dans phpmyadmin dans l’onglet Etat Opened_tables il y’a même une petite explication:

The number of tables that have been opened. If opened tables is big, your table cache value is probably too small.

En gros si cette valeur est trop élevé vous pouvez augmenter: table_cache.Il est dans /etc/mysql/my.cnf. Idéalement cette valeur est le nombre de table que contient votre serveur: Ainsi toutes les tables reste tout le temps ouvertes… par contre votre serveur MySQL risque de s’accaparer un peu trop de ressources… a vous de trouver le bon équilibre suivant votre cas.

Pour plus de details: table_cache dans la documentation MySQL

N’oublier pas de redémarrer mysql pour prendre les changement en compte.

/etc/init.d/mysql restart

Le code s’inspire fortement d’ autres plugins munin pour mysql. Voici le code:

#!/bin/sh
#
# Plugin to monitor the number of opened tables on a mysql-server.
#
#
# Copyright (C) 2010 - ffwill contact: http://admin.blogs.docilnet.fr/article/date:2010-02-19,subject:plugin-mysql-munin-opened-table
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; version 2 dated June,
# 1991.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#
# $Log$
# Revision 0.0  2009/05/01 ffwill: initial version
# Revision 0.1  2010/02/19 ffwill: added comment to imporve mysql parameter server
#
# Parameters:
#
# config
# autoconf
#
# Configuration variables
#
#mysqlopts - Options to pass to mysql
#
# $Log$
# Revision 1.0&amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp; 2009/05/1 1:04 ffwill
#
#%# family=auto
#%# capabilities=autoconf

MYSQLOPTS="$mysqlopts"
MYSQLADMIN=${mysqladmin:-mysqladmin}

if [ "$1" = "autoconf" ]; then
$MYSQLADMIN --version 2>/dev/null >/dev/null
if [ $? -eq 0 ]
then
$MYSQLADMIN $MYSQLOPTS status 2>/dev/null >/dev/null
if [ $? -eq 0 ]
then
echo yes
exit 0
else
echo "no (could not connect to mysql)"
fi
else
echo "no (mysqladmin not found)"
fi
exit 1
fi

if [ "$1" = "config" ]; then
echo 'graph_title MySQL Opened table'
echo 'graph_vlabel Opened Tables/s'
echo 'graph_category mysql'
echo 'openedtables.label mysql opened tables'
echo 'openedtables.min 0'
echo 'openedtables.type DERIVE'
echo 'graph_args --base 1000'
echo 'graph_info Plugin available at <a href="http://admin.blogs.docilnet.fr/category/administation-serveur/munin-administation-serveur">munin at http://admin.blogs.docilnet.fr</a><br/>The number of tables that have been opened. If opened tables is big, your table cache value is probably too small. Idealy this is the number of table'
exit 0
fi

/usr/bin/printf "openedtables.value "
($MYSQLADMIN $MYSQLOPTS status 2>/dev/null || echo 'a a a U') | awk '{print $11}'

le résultat:

Plugin munin: Louverture de table mysql
Plugin munin: L’ouverture de table mysql
Plugin munin: Louverture de table mysql
Plugin munin: L’ouverture de table mysql

Et pour télécharger le plugin c’est ici ou ici

Si vous mettez en place un relais smtp sur votre serveur, des robots peuvent tenter de forcer l’accès en force brute pour transformer votre machine en machine à SPAM.

Dans mes logs je peux facilement remarquer que 118.167.128.72 s’acharne à la tache (tout en étant assez intelligent pour ne pas exploser le max connection rate):

Feb 12 05:22:20 ubuntuserv postfix/smtpd[20950]: lost connection after RCPT from 118-167-128-72.dynamic.hinet.net[118.167.128.72]
Feb 12 05:22:20 ubuntuserv postfix/smtpd[20950]: disconnect from 118-167-128-72.dynamic.hinet.net[118.167.128.72]
Feb 12 05:25:40 ubuntuserv postfix/anvil[20952]: statistics: max connection rate 1/60s for (smtp:118.167.128.72) at Feb 12 05:22:19
Feb 12 05:25:40 ubuntuserv postfix/anvil[20952]: statistics: max connection count 1 for (smtp:118.167.128.72) at Feb 12 05:22:19
Feb 12 05:25:40 ubuntuserv postfix/anvil[20952]: statistics: max cache size 1 at Feb 12 05:22:19
Feb 12 05:31:20 ubuntuserv postfix/smtpd[22890]: connect from 118-167-128-72.dynamic.hinet.net[118.167.128.72]
Feb 12 05:31:21 ubuntuserv postfix/smtpd[22890]: NOQUEUE: reject: RCPT from 118-167-128-72.dynamic.hinet.net[118.167.128.72]: 554 5.7.1 <s2288@mail2000.com.tw>: Relay access denied; from=<itidgh483987@hotmail.com> to=<s2288@mail2000.com.tw> proto=SMTP helo=<79.132.57.102>
Feb 12 05:31:22 ubuntuserv postfix/smtpd[22890]: lost connection after RCPT from 118-167-128-72.dynamic.hinet.net[118.167.128.72]
Feb 12 05:31:22 ubuntuserv postfix/smtpd[22890]: disconnect from 118-167-128-72.dynamic.hinet.net[118.167.128.72]
Feb 12 05:34:42 ubuntuserv postfix/anvil[22892]: statistics: max connection rate 1/60s for (smtp:118.167.128.72) at Feb 12 05:31:20
Feb 12 05:34:42 ubuntuserv postfix/anvil[22892]: statistics: max connection count 1 for (smtp:118.167.128.72) at Feb 12 05:31:20
Feb 12 05:34:42 ubuntuserv postfix/anvil[22892]: statistics: max cache size 1 at Feb 12 05:31:20
Feb 12 05:40:38 ubuntuserv postfix/smtpd[24764]: connect from 118-167-128-72.dynamic.hinet.net[118.167.128.72]
Feb 12 05:40:39 ubuntuserv postfix/smtpd[24764]: NOQUEUE: reject: RCPT from 118-167-128-72.dynamic.hinet.net[118.167.128.72]: 554 5.7.1 <s2288@mail2000.com.tw>: Relay access denied; from=<itidgh483987@hotmail.com> to=<s2288@mail2000.com.tw> proto=SMTP helo=<79.132.57.102>

Pour se protéger des attaques en force-brute le classique Fail2Ban, il manque juste l’expression régulière qui va bien:

NOQUEUE\: reject\: RCPT from .*\[<HOST>\]: .*: Relay access denied;

que l’on ajoute dans /etc/fail2ban/filter.d/couriersmtp.conf qui devient:

# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
# $Revision: 510 $
#
[Definition]
# Option:  failregex
# Notes.:  regex to match the password failures messages in the logfile. The
#          host must be matched by a group named "host". The tag "&lt;HOST&gt;" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P&lt;host&gt;[\w\-.^_]+)
# Values:  TEXT
#
failregex = error,relay=&lt;HOST&gt;,.*550 User unknown
NOQUEUE\: reject\: RCPT from .*\[<HOST>\]: .*: Relay access denied;
# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

et on n’oublie pas de valider le filtre dans /etc/fail2ban/jail.conf en passant enabled à true dans la section couriersmtp

[couriersmtp]
enabled  = true
port     = smtp,ssmtp
filter   = couriersmtp
logpath  = /var/log/mail.log</pre>

QtCreator et Ubuntu

31 janvier 2010

L’installation de QtCreator se fait plutôt facilement sous Ubuntu:

Suivant votre système rendez-vous sur la bonne page 32 bits ou 64 bits

comme indiqué sur le site l’installation se fait facilement avec:

chmod u+x qt-sdk-linux-x86_64-opensource-2009.02.bin
./qt-sdk-linux-x86_64-opensource-2009.02.bin

Ensuite il risque de vous manquer quelques paquets:

les outils de compilations: apt://g++, pour vous éviter:

 make: g++ : commande introuvable

Quelques librairies: apt://libfreetype6-dev,libglib2.0-dev,libsm-dev,libxrender-dev, pour vous évitez:

/usr/bin/ld: cannot find -lfreetype

ou encore

/usr/bin/ld: cannot find -lgobject-2.0
/usr/bin/ld: cannot find -lSM
/usr/bin/ld: cannot find -lrender

Et pour les projets contenant de l’OpenGl vous aurez besoin de: mesa-common-dev,libglu1-mesa-dev, pour vous éviter:

erreur: GL/gl.h : Aucun fichier ou dossier de ce type
error: GL/glu.h: Aucun fichier ou dossier de ce type

(testé et fonctionnel sous Ubuntu 9.10 – le Koala Karmique)

Un petite extension sympa et bien pratique pour surveiller une page web. Elle permet de recharger à un interval régulier votre page web.

reloadevery

https://addons.mozilla.org/en-US/firefox/addon/115

Ma liste d’extension pour Firefox

Cette manipulation vous permet d’enregistrer tous les accès au disque dur sur votre machine:

sudo sysctl vm.block_dump=1

tous les événements seront enregistrés dans /var/log/debug

que l’on surveille avec un

tail -f /var/log/debug

ou encore avec en combinant avec grep pour filtrer les informations sur le disque dur sda:

tail -f /var/log/debug | grep sda

ensuite on n’oublie pas d’arreter le log des accès disque dur.  (cela prend des ressources….)

sudo sysctl vm.block_dump=0

testé et fonctionel sous Ubuntu 9.04 « The Jaunty Jackalope » et Ubuntu 9.10 « The Karmic Koala »

source: http://sprocket.io/blog/2006/05/monitoring-filesystem-activity-under-linux-with-block_dump/