lundi 7 janvier 2013

Udev rules pour disk ASM

RHEL 6.3 n'étant pas certifié par Oracle, pas d'outils oracleasm pour créer des disk.
Obliger de passer par d'autres méthodes (multipath, mknod) ou bien des règles udev.

Je préfère les règles udev car elles permettent de préciser le repertoire souhaité, propiétaire et permissions et bien plus...

Le plus simple est de créer une nouvelle règle. Elles sont appliquées par ordre.
99.asm.rules sera donc appliqué en dernier. Important la nom doit terminer par ".rules"
On remplace le numéro de DM par * pour éviter les changement la filtre se base sur le numéro de série.

Pour trouver le numéro de série
Regarder /etc/multipath/wwids
ou bien : ls -al /dev/disk/by-id
ou encore : udevadm info --query=all --path=$(udevadm info -q path -n /dev/mapper/mpathc)

Exmple de contenu :
KERNEL=="dm-*",SUBSYSTEM=="block",ENV{DEVTYPE}=="disk",ENV{DM_UUID}=="mpath-2001738000f87036c",NAME+="oracleasm/disks/DSK1",OWNER="grid",GROUP="oinstall",MODE="0660"

KERNEL=="dm-*",SUBSYSTEM=="block",ENV{DEVTYPE}=="disk",ENV{DM_UUID}=="mpath-2001738000f87036d",NAME+="oracleasm/disks/DSK2",OWNER="grid",GROUP="oinstall", MODE="0660"

KERNEL=="dm-*",SUBSYSTEM=="block",ENV{DEVTYPE}=="disk",ENV{DM_UUID}=="mpath-2001738000f87036e",NAME+="oracleasm/disks/DSK3",OWNER="grid",GROUP="oinstall",MODE="0660"

KERNEL=="dm-*",SUBSYSTEM=="block",ENV{DEVTYPE}=="disk",ENV{DM_UUID}=="mpath-2001738000f87036f",NAME+="oracleasm/disks/DSK4",OWNER="grid",GROUP="oinstall",MODE="0660"

KERNEL=="dm-*",SUBSYSTEM=="block",ENV{DEVTYPE}=="disk",ENV{DM_UUID}=="mpath-2001738000f870370",NAME+="oracleasm/disks/DSK5",OWNER="grid",GROUP="oinstall",MODE="0660"

Pour appliquer la règle sans redémarrer :
udevadm trigger

jeudi 25 octobre 2012

Candy, chat are no dead yet

Candy est un chat en javascript qui semble très flexible et dispose de plus en plus de plugin.
http://candy-chat.github.com/candy/


Il s'intègre bien avec Openfire même si c'est un peu compliqué la première fois.
Je l'ai par exemple couplé avec Openfire, lui même couplé avec le LDAP de Zimbra pour créer un chat room pour les utilisateurs.

Config Openfire


Dans la paramètres du serveur activé HTTP Binding.
Activlé les ports 7070 et 7443.
Activé le script syntax : Allows BOSH.
Laisser ar défaut la Cross-domain policy.

Installation Candy


Télécharger Candy dans votre répertoire www.
Définir votre vhost.
La difficulté est dans Rewrite rule

RewriteRule http-bind/ http://monserver.com:7070/http-bind/ [P]


Config vhost


<VirtualHost *:8081>
ServerName mon.server.com
DocumentRoot /var/www/candy/
<Directory />
                Options FollowSymLinks
                AllowOverride All
</Directory>
<Directory /var/www/candy>
               Options Indexes FollowSymLinks MultiViews
              AllowOverride All
              Order allow,deny
              allow from all
</Directory>
             AddDefaultCharset UTF-8
            Options +MultiViews
            RewriteEngine On
            RewriteRule http-bind/ http://monserver.com:7070/http-bind/ [P]
</VirtualHost>

Config cany/index.html 


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Candy - Chats are not dead yet</title>
<link rel="shortcut icon" href="res/img/favicon.png" type="image/gif" />
<link rel="stylesheet" type="text/css" href="res/default.css" />
<link rel="stylesheet" type="text/css" href="candy-chat-candy-plugins-e9310e4/colors/candy.css" />
        <link rel="stylesheet" type="text/css" href="candy-chat-candy-plugins-e9310e4/roomPanel/default.css" />
        <link rel="stylesheet" type="text/css" href="candy-chat-candy-plugins-e9310e4/inline-images/candy.css" />

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>
<script type="text/javascript" src="libs/libs.min.js"></script>
<script type="text/javascript" src="candy.min.js"></script>
<script type="text/javascript" src="candy-chat-candy-plugins-e9310e4/colors/candy.js"></script>
        <script type="text/javascript" src="candy-chat-candy-plugins-e9310e4/inline-images/candy.js"></script>
        <script type="text/javascript" src="candy-chat-candy-plugins-e9310e4/roomPanel/roomPanel.js"></script>

<script type="text/javascript">
$(document).ready(function() {
Candy.init( 'http://monserveur.com/http-bind/', {
core: { debug: false, autojoin: ['info@conference.monserver.com' ]},
view: { resources: 'res/', language: 'fr'}
});

// enable Colors plugin (default: 8 colors)
                        CandyShop.Colors.init();
CandyShop.InlineImages.init();
// enable RoomPanel plugin
                        CandyShop.RoomPanel.init({
                                // domain that hosts the muc rooms, only required if autoDetectRooms is enabled
                                mucDomain: 'info.monserver.com',

                                // allow you to force a list of rooms, only required if autoDetectRoom is disabled
                                roomList: [
                                       {
                                                name: 'info',
                                                jid:  'info@monserver.com'
                                        },
                                                                       ],
                                // show room list if all rooms are closed, default value is true. [optional]
                                showIfAllTabClosed: true,
                                // detect rooms before showing list, default value is true. [optional]
                                autoDetectRooms: true,
                                // how long in seconds before refreshing room list, default value is 600. [optional]
                                roomCacheTime: 600
                        });
Candy.Core.connect();
});
</script>
</head>
<body>
<div id="candy"></div>
</body>
</html>

Merci à Candy


Le support est assuré au travers de google group, la communauté Candy est très active.
Merci à eux.
https://groups.google.com/forum/#!forum/candy-chat


vendredi 5 octobre 2012

Zabbix superviser Postfix

Superviser Postfix pour éviter par exemple que des emails restent bloquer sans s'en appercevoir.
Recette: un zabbix, un template, un petit script et l'erreur est corrigée.

Zabbix Postfix Template

Template Zabbix-Postfix
Les items, 2 triggers et un graph détaillant les items. Ce template est ccompatible Zabbix 2.0

Installer les outils

Installer sur les serveurs les outils suivants : pflogsumm et logcheck

Config Zabbix agent

Pour récupérer l'était de la queue, on déclare un Userparmeter qui exécutera la commande suivante ;

UserParameter=postfix.mailq,mailq | grep -v "Mail queue is empty" | grep -c '^[0-9A-Z]'

Script Zabbix-Postfix

Créer le script suivant qui une fois les logs analyser, envoi les données au moyen de zabbix_sender au serveur qui actualisera les items correspodants.
#!/bin/bash +x
PFLOGSUMM=/usr/sbin/pflogsumm.pl
MAILLOG=/var/log/mail.log
LOGTAIL=/usr/sbin/logtail
DAT1=/tmp/zabbix-postfix-offset.dat
DAT2=$(mktemp)
ZABBIX_SENDER=/usr/bin/zabbix_sender
ZABBIX_HOST=monserver #même nom que dans Zabbix
ZABBIX_SERVER=monserverzabbix.com
ZABBIX_CONF=/etc/zabbix/zabbix_agentd.conf
DEBUG=0

function zsend {
 key="postfix.`echo "$1" | tr ' -' '_' | tr '[A-Z]' '[a-z]' | tr -cd [a-z_]`"
 value=`grep -m 1 "$1" $DAT2 | awk '{print $1}'`

 [ ${DEBUG} -ne 0 ] && echo "Send key \"${key}\" with value \"${value}\"" >&2
 $ZABBIX_SENDER -s $ZABBIX_HOST -z $ZABBIX_SERVER -c $ZABBIX_CONF -k "${key}" -o "${value}" 2>&1 >/dev/null
}

$LOGTAIL -f $MAILLOG -o $DAT1 | $PFLOGSUMM -h 0 -u 0 --bounce_detail=0 --deferral_detail=0 --reject_detail=0 --no_no_msg_size --smtpd_warning_detail=0 > $DAT2

zsend received
zsend delivered
zsend forwarded
zsend deferred
zsend bounced
zsend rejected
zsend held
zsend discarded
zsend "reject warnings"
zsend "bytes received"
zsend "bytes delivered"
zsend senders
zsend recipients

rm $DAT2

Automatiser le script

Toutes les minutes

* * * * * /etc/zabbix/zabbix-postfix.sh

Astuce supprimer les emails bloqués en queue

# perl -e 'foreach (`postqueue -p`) {`postsuper -d $1` if /^([0-9A-Z]+)/}'


Remerciements

http://blog.hbis.fr/2012/03/30/zabbix-postfix_monitoring/
http://www.zabbix.com/wiki/howto/monitor/mail/postfix/monitoringpostfix

mardi 28 août 2012

Fail2ban + Asterisk 1.8


Fail2ban est souvent utilisé avec Asterisk pour sécuriser les connexions, éviter les fraudes.
Mais depuis la version 1.8 le format des log a quelque peu changé.
Le port de l'utilisateur distant a été ajouté et par conséquent les filtres Asterisk existant sont inopérants.

Par conséquend modifier comme suit la configuration de votre jail pour Asterisk.

NOTICE.* .*: Registration from '.*' failed for '<HOST>(:[0-9]{1,5})?' - Wrong password
NOTICE.* .*: Registration from '\".*\".*' failed for '<HOST>(:[0-9]{1,5})?' - No matching peer found

La première ligne permet de bloquer les connexions intempestive.
La seconde bloque les appels anonymes ou les appels entrants venant de peer inconnu.


mardi 21 août 2012

SSH reverse tunnel

Parfois il est pratique de mettre en place un tunnel ssh inversé.
Par exemple, le serveur de mon client déménage et change d'IP pour être sûr d'en récupérer le contrôle je mets en place un tunnel ssh inverse.


La commande a éxécuté sur le serveur du client :
ssh -p 2222 -R 10000:localhost:22 root@monserveur





Une fois connecté sur mon serveur pour aller sur le serveur du client
ssh -p 10000 localhost

Pour automatiser créer un script : reverse_ssh.sh

#!/bin/sh
#set -x
COMMAND="ssh -p 2222 -N -f -R 10000:localhost:22 root@monserver"
pgrep -f -x "$COMMAND" > /dev/null 2<&1 || $COMMAND

Exécuter ce script par cron
*/10 * * * * /bin/sh /root/reverse_ssh.sh



Avec l'aide de l'excellent blog

http://rhnotebook.wordpress.com/2010/02/13/reverse-ssh-port-forwarding-t-o-i-c-o-r-g/

mercredi 15 août 2012

Installer un serveur dhcp et tftp

Souvent avec les téléphones SIP, nous avons besoin de mettre à jour le firmware et les fichiers de configurations.

Le plus simple est d'utiliser TFTP pour automatiser la mise à jour.
la seule difficulté est declarer les options dhcp 66 et 150 pour indiquer aux téléphones SIP l'adresse du serveur TFTP.

Installer TFTP server

Installer les paquets xinetd tftpd.

Créer le fichier /etc/xinetd.d/tftp

service tftp { 
protocol = udp 
port = 69 
socket_type = dgram 
wait = yes 
user = nobody 
server = /usr/sbin/in.tftpd 
server_args = /tftpboot 
disable = no 
}

Placer les fichiers dans /tftpboot, changer le propriétaire en nobody.

Redémarrer xinited

Installer DHCPD

Editer /etc/dhcp/dhcpd.conf

ddns-update-style none;
ddns-update off;
option T150 code 150 = string; #Déclaration DHCP option 150
deny client-updates;
one-lease-per-client false;
allow bootp;

subnet 10.0.0.0 netmask 255.255.255.0 {
interface eth0;
range 10.0.0.100 10.0.0.150;
default-lease-time 6000;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option time-offset -28000;
option tftp-server-name "tftp://10.0.0.1"; #Option DHCP 66
option ntp-servers pool.ntp.org;
option T150 "10.0.0.1"; #Option 150, ip du server TFTP
}

Redémarrer dhcpd

lundi 2 juillet 2012

Memo Proxmox/OpenVz

Une petite suite de chose à penser lorsqu'on utilise Proxmox et OpenVZ.

Ne pas oublier le boot
Lorsqu'on crée un CT ou un VM avec Proxmox curieusement l'option boot au démarrage n'est pas proposée et immanquablement à un moment le serveur redémarre sans démarrer automatiquement les machines virtuelles. Pensez donc pas à activer le boot de vos VM une fois crées.
onboot="yes"

On peut le faire également pour les CT dans /etc/vz/conf/100.conf et mettre l'option boot à yes.
Pour les VM /etc/pve/qemu-server/100.conf et mettre l'option onboot à 1.
onboot : 1

Mettre les CT à l'heure
Autre chose stressant avec les CT, tous les templates ont la timezone de Moscou. J'adore OpenVZ et je remercie les auteurs mais mes serveurs ne sont pas Moscou.
Ajouter la conf du CT /etc/vz/conf/100.conf l'option suivante :

CAPABILITY="SYS_TIME:on"
Reboot du CT

puis remplacer /etc/localtime par la bonne timezone.
cp /usr/share/timezone/xxx /etc/localtime

Et le tour est joué. C'est mieux pour les logs.