Wiki | Contact

Captaine's blog

lundi, mai 4 2009

Comment utiliser le lecteur de newsgroup Klibido en mode SSL

Klibido KLibido est un lecteur de newsgroup binaires sous KDE pour Linux. Malheureusement, il n'implémente pas les connexions SSL aux serveurs de newsgroup. Pour cela, il existe un utilitaire qui permet de faire des tunnels SSL pour les applications qui ne supportent pas celui-ci. Nous allons voir ici comment configurer ces deux logiciels pour utiliser les newsgroup en SSL.

Installation

sudo apt-get install stunnel klibido

Configuration

Stunnel

Il faut d'abord éditer le fichier /etc/stunnel/stunnel.conf et ajouter :

; Use it for client mode
client = yes
[NNTP]
accept = 127.0.0.1:119
connect = adresse_server_nntp:port ;//exemple : news-europe.giganews.com:563 pour GigaNews

On modifie le script de démarrage /etc/init.d/stunnel4 pour que Stunnel démarre en mettant la variable ENABLED à 1 :

 #! /bin/sh -e
### BEGIN INIT INFO
# Provides: stunnel4
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $syslog
# Should-Stop: $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start or stop stunnel 4.x (SSL tunnel for network daemons)
### END INIT INFO

DEFAULTPIDFILE="/var/run/stunnel4.pid"
DAEMON=/usr/bin/stunnel4
NAME=stunnel
DESC="SSL tunnels"
FILES="/etc/stunnel/*.conf"
OPTIONS=""
ENABLED=1

Pour ma part, il a fallut que je fasse sauter le test en le commentant car cela ne fonctionnait pas :

#test "$ENABLED" = "0" || exit 0

On redémarre ensuite Stunnel :

/etc/init.d/stunnel4 start

et on fait un petit :

netstat -l | grep nntp

afin d'obtenir ceci si tout fonctionne :

tcp        0      0 localhost:nntp          *:*                     LISTEN

Klibido

Au niveau de Klibido, il vous suffit de créer un serveur avec comme adresse "localhost", comme port 119, et avec vos identifiants.

mardi, juillet 22 2008

Free, routeur NAT et IPv6

Si vous êtes chez Free et que vous avez activé l'option IPv6, et que vous voulez configurer votre serveur Ubuntu fonctionne en tant que routeur (et donc la freebox doit être en mode bridge), voici ce qu'il faut faire.
Le DHCP ne peut pas fournir d'adresse IPv6 car DHCP est un protocole IPv4. Dans le cas des Freebox, c'est la Freebox qui fournit l'adresse IPv6 à chaque ordinateur. Le problème, c'est que les ordinateurs sont cachés derrière le routeur NAT Ubuntu (ou n'importe quel routeur NAT). Il ne reçoivent donc pas les paquets "Router Advertisement" que la Freebox envoie à chaque PC pour qu'il obtienne son adresse IPv6. De plus, les paquets normaux IPv6 de communication (par exemple, les échange de données lors du surf) sont aussi bloqués par le NAT. Il faut donc créer un passage virtuel entre l'interface eth1 branchée à la Freebox, et l'interface eth0 (ou autre, qui est reliée au réseau local) afin que les paquets IPv6 (et seulement eux) puissent traverser le routeur Ubuntu pour aller jusqu'aux PC du réseau local. Cela s'appelle un PONT ou BRIDGE.
apt-get install bridge-utils
Le problème du pont est qu'il n'est pas filtrant, et donc il laisse par défaut passer les paquets IPv4 et v6 et tout ce qui existe d'autre... (Je vous laisse imaginer la pagaille si tous les PC on la même adresse IPv4 public (par exemple 82.244...) de la Freebox..).
C'est pour cela qu'il faut installer ebtables et le configurer pour n'autoriser que les paquets IPv6 à traverser le bridge.
apt-get install ebtables
Pour configurer  tout cela, j'ai mis en place un script (dispo sur mon site) qui met en place le NAT pour l'IPv4, le bridge, le firewall, et le blocage de tout ce qui n'est pas IPv6 sur le bridge :

 #!/bin/sh
#
# Script de démarrage qui lance l'interface réseau internet,
# met en place un firewall basique et un partage de connexion et le pont pour l'IPv6 de Free
#
# Inspiré du script de Mjules_at_ifrance.com
#

# Interface connectée à Internet
interface=eth1

# Interface connectée au réseau local
interfacelan=eth0

start() {

# Désactivation des interfaces réseau
/sbin/ifdown $interface
/sbin/ifdown $interfacelan


# Création du bridge pour faire transiter les paquets IPv6
brctl addbr br0

# activation du bridge
ifconfig br0 up

# Ajout des interfaces au bridge
brctl addif br0 eth1
brctl addif br0 eth0

# Activation des interfaces réseau
/sbin/ifup $interface
/sbin/ifup $interfacelan

# Dans cette partie, on met en place le firewall
#vidage des chaines
iptables -F
#destruction des chaines personnelles
iptables -X

#stratégies par défaut
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

#init des tables NAT et MANGLE (pas forcément nécessaire)
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT


# Acceptation de toutes les connexions en local (un process avec l'autre)
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#iptables -A INPUT -i eth0 -j ACCEPT
#iptables -A OUTPUT -o eth0 -j ACCEPT

#création d'une nouvelle règle
iptables -N MAregle

#définition de la règle : accepter les nouvelles connexions ne venant pas de l'interface internet
# et accepter toutes les connexions établies et reliées (ex: une demande de page HTML provoque l'ouverture
# d'une connexion reliée pour acheminer cette page vers l'ordinateur)

iptables -A MAregle -m state --state NEW -i! $interface -j ACCEPT
iptables -A MAregle -m state --state ESTABLISHED,RELATED -j ACCEPT

#application de la règle au partage de connexion
iptables -A INPUT -j MAregle
iptables -A FORWARD -j MAregle

# activation du forwarding dans le noyau
echo 1 >/proc/sys/net/ipv4/ip_forward

# mise en place du partage de connexion sur le réseau local
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o $interface -j MASQUERADE

# Ouvertures de ports pour le routeur
iptables -A INPUT -p TCP --dport ssh -i $interface -j ACCEPT
iptables -A INPUT -p TCP --dport 80 -i $interface -j ACCEPT
iptables -A INPUT -p TCP --dport 443 -i $interface -j ACCEPT

# Port-Forwarding pour adsl TV
iptables -t nat -A PREROUTING -i eth1 -p udp --dport 31336 -j DNAT --to 192.168.0.3:31336
iptables -A FORWARD -i eth1 -p udp --dport 31336 -d 192.168.0.3 -j ACCEPT

# On n'autorise que l'IPv6 sur le bridge br0 (86DD Correspond à la valeur du champ type de protocole de couche 3 dans la trame Ethernet)
ebtables -t broute -A BROUTING -p ! 86DD -j DROP

}

stop() {
echo 0 >/proc/sys/net/ipv4/ip_forward
ifconfig br0 down
brctl delif br0 eth0
brctl delif br0 eth1
brctl delbr br0
ifdown $interface
iptables -F
iptables -X
}

case "$1" in
start)
start
;;

stop)
stop
;;
restart)
stop && start
;;
*)
echo "Usage $0 {start|stop|restart}"
exit 1
esac

exit 0
J'ai mis ce script dans /etc/init.d et il se lance à chaque démarrage grâce à :
sudo update-rc.d scriptconfrouteur start 99 2 . stop 00 2 0 1 6 .
Voilà, c'est tout ce qu'il y a à faire.
Il manque encore des règles ip6tables pour le firewall IPv6. Pour l'instant je les ai mises sur chaque PC derrière le routeur.

lundi, juin 23 2008

Comment installer Nut pour un onduleur MGE USB

Il y a quelques semaines, j'ai subit les dégas de la foudre. Résultat, plus de Freebox, plus d'écran, plus de switch... Du coup je me suis décidé à acheter un Onduleur MGE Pulsar Ellipse 600 USBS.

MGE Pulsar Ellipse 600 USBS

Cet onduleur a la capacité de se brancher en USB ou en série sur un ordinateur afin de monitorer quelques informations telles que le charge de la batterie ou la puissance utilisée par le matériel protégé. Sous Windows pas de soucis, on le branche et il est tout de suite installé. Par contre je voulais qu'il soit branché sur mon serveur Ubuntu afin de l'éteindre proprement lorsque la batterie de l'onduleur est vide, et aussi pour avoir des graphes sous Cacti.
Assez blablaté. Nous allons d'abord installer Nut. Ce tuto s'appuie largement sur celui-ci : http://wiki.monserveurperso.com/wakka.php?wiki=NutInstall

NUT permet la prise en charge d'un grand nombre de modèle d'onduleur.

Nut

Installation sur le "Master"

Pour l'installer : MGE UPS SYSTEMS distribue le paquet PSP pour Debian GNU/Linux au travers de la méthode APT.

Pour installer Personal Solution Pac sur Debian et Ubuntu, ajouter la ligne suivante dans "/etc/apt/sources.list"

deb http://opensource.mgeups.com/stable/debian binary/

Ensuite, tapez les commandes suivantes, dans une console en tant que root :

apt-get update
apt-get install mgeups-psp nut

On vérifie que l'onduleur est bien reconnu :

lsusb

Ce qui devrait donner quelque chose comme ça :

Bus 002 Device 003: ID 0463:ffff MGE UPS Systems UPS

On édite le fichiers /etc/default/nut pour automatiser le lancement des démons de Nut :

# start upsd
START_UPSD=yes

# start upsmon
START_UPSMON=yes

On copie les exemples de fichiers de configuration dans le répertoire de Nut :

cp /usr/share/doc/nut/examples/*.conf.sample /etc/nut
cp /usr/share/doc/nut/examples/*.users.sample /etc/nut
cp /usr/share/doc/nut/examples/upsmon.conf.sample.gz /etc/nut

On renomme ensuite les fichiers exemples en leur enlevant leur extension ".sample" puis on décompresse le fichier upsmon.conf.sample.gz :

gunzip upsmon.conf.sample.gz

On édite le fichier ups.conf :

joe /etc/nut/ups.conf
 [myups]   #Ici on donne un nom à notre onduleur pour pouvoir l'utiliser par la suite
        driver = usbhid-ups #Le driver USB de l'onduleur
        port = auto #pour l'USB
        desc = "MGE 600" #Un petite description

On teste ensuite ce bout de configuration :

upsdrvctl start

On devrait obtenir un résultat qui ressemble à cela :

Network UPS Tools - UPS driver controller 2.2.0-
Network UPS Tools: 0.28 USB communication driver 0.28 - core 0.30 (2.2.0-)

Detected a UPS: MGE OPS SYSTEMS/ELLIPSE
Using subdriver: MGE HID 1.0

Broadcast Message from nut@routeur
        (somewhere) at 23:00 ...

Communications with UPS myups@localhost established

On définit ensuite les droits d'accès au démon réseau pour l'accès à l'onduleur en éditant le fichier upsd.conf :

joe /etc/nut/upsd.conf

De façon à obtenir :

ACL all 0.0.0.0/0
ACL reseau 192.168.0.0/24 #Règle d'accès pour le réseau local
ACL localhost 127.0.0.1/32
ACL server 192.168.0.3/32 #règle pour un poste en particulier

ACCEPT server
ACCEPT localhost
ACCEPT reseau
REJECT all #On bloc tout le reste

On définit les utilisateurs qui pourront accéder au démon par le réseau.

On édite le fichier upsd.users :

joe /etc/nut/upsd.users

Pour ajouter un utilisateur :

        [nom-user]
                password = mot-de-passe
                allowfrom = localhost
                upsmon master #indique que l'utilisateur a le droit de se connecteur sur le serveur maître pour contrôler l'onduleur.

On édite ensuite le fichier /etc/nut/upsmon.conf :

joe /etc/nut/upsmon.conf

On doit obtenir le lignes suivantes qui permettent la connexion du moniteur à l'onduleur et la commande utilisée pour l'extinction de l'ordinateur :

MONITOR myups@localhost 1 nom-user mot-de-passe master
SHUTDOWNCMD "/sbin/shutdown -h now"

On lance ensuite Nut :

/etc/init.d/nut start

Pour vérifier qu'il n'y a pas de problème, on va voir dans les fichiers de log :

tail /var/log/daemon.log


Si tout a l'air d'aller on peut essayer d'obtenir des informations sur l'onduleur :

upsc myups@localhost 

Et on obtient quelque chose comme ça :

battery.charge: 100
battery.charge.low: 20
battery.runtime: 1531
battery.type: PbAc
driver.name: usbhid-ups
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.version: 2.2.0-
driver.version.data: MGE HID 1.0
driver.version.internal: 0.30
input.transfer.high: 264.0
input.transfer.low: 184.0
outlet.0.desc: Main Outlet
outlet.0.id: 1
outlet.0.switchable: no
outlet.1.desc: PowerShare Outlet 1
outlet.1.id: 2
outlet.1.status: on
outlet.1.switchable: no
output.voltage: 230.0
ups.beeper.status: enabled
ups.delay.shutdown: -1
ups.delay.start: -10
ups.load: 14
ups.mfr: MGE OPS SYSTEMS
ups.model: Ellipse 600
ups.power.nominal: 600
ups.productid: ffff
ups.serial: BD8J0900P
ups.status: OL CHRG
ups.vendorid: 0463

On voit que tout fonctionne. Mais on ne va pas s'arrêter là. On va maintenant faire en sorte de pouvoir avoir ces informations dans Cacti sous forme de graphes.

Voici un petit aperçu de ce qu'on peut obtenir :

Graphe charge onduleur

Pour obtenir tout ça il faut d'abord avoir Cacti d'installé, puis aller télécharger les templates et scripts qui permettrons de faire les graphes comme ci-dessus.
Pour l'installation, il suffit de suivre les instruction du site du développeur. Il n'y a plus qu'a créer les graphes dans Cacti.

Installation sur l'esclave

On peut aussi configurer des clients "esclaves" qui se connecte au serveur Nut auquel est connecté l'onduleur :

apt-get install nut

On édite le fichiers /etc/default/nut pour automatiser le lancement du démon de Nut UPSMON :

# start upsd
START_UPSD=no

# start upsmon
START_UPSMON=yes

On édite ensuite le fichier /etc/nut/upsmon.conf :

joe /etc/nut/upsmon.conf

On doit obtenir le lignes suivantes qui permettent la connexion du moniteur à l'onduleur et la commande utilisée pour l'extinction de l'ordinateur :

MONITOR myups@adresse-du-serveur-nut 1 nom-user mot-de-passe master
SHUTDOWNCMD "/sbin/shutdown -h now"

On lance ensuite Nut :

/etc/init.d/nut start

Pour vérifier qu'il n'y a pas de problème, on va voir dans les fichiers de log :

tail /var/log/daemon.log

Si tout a l'air d'aller on peut essayer d'obtenir des informations sur l'onduleur :

upsc myups@adresse-du-serveur-nut

Et on obtient quelque chose comme ça :

battery.charge: 100
battery.charge.low: 20
battery.runtime: 1531
battery.type: PbAc
driver.name: usbhid-ups
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.version: 2.2.0-
driver.version.data: MGE HID 1.0
driver.version.internal: 0.30
input.transfer.high: 264.0
input.transfer.low: 184.0
outlet.0.desc: Main Outlet
outlet.0.id: 1
outlet.0.switchable: no
outlet.1.desc: PowerShare Outlet 1
outlet.1.id: 2
outlet.1.status: on
outlet.1.switchable: no
output.voltage: 230.0
ups.beeper.status: enabled
ups.delay.shutdown: -1
ups.delay.start: -10
ups.load: 14
ups.mfr: MGE OPS SYSTEMS
ups.model: Ellipse 600
ups.power.nominal: 600
ups.productid: ffff
ups.serial: BD8J0900P
ups.status: OL CHRG
ups.vendorid: 0463

On voit que tout fonctionne.

Sources

Ubuntu doc : Onduleur Eaton MGE Office Protection Systems : Personal Solution Pac

Ubuntu doc : Network UPS Tools (NUT)

Installation et gestion d'un UPS USB en réseau sous linux

Cacti-Nut

dimanche, juin 1 2008

Surveiller son trafic réseau avec Ntop

Ntop est un utilitaire pour Unix et Windows. Il permet d’analyser en temps réel le trafic transitant par l'interface réseau que l'on choisit. Les informations récoltées sont visibles sur une page web de manière très ergonomique. On peut y retrouver par exemple les sites visités, les protocoles utilisés (il y en a beaucoup), la quantité de données transférées sur chaque protocoles.... Par contre il ne garde aucune trace des informations et il utilise le Round Robin pour supprimer au fur et à mesure les anciennes données. Il y a aussi des petits plugins pour ajouter des fonctionnalités, par exemple un affichage adapté à un navigateur mobile.

ntop trafic détails

Pour l'installer :

sudo apt-get install ntop

Lancement du daemon NtopPour lancer Ntop, il faut saisir la commande suivante:

sudo ntop -w 3000 -W 3443

On lance Ntop et on lui demande de créer un serveur Web sur le port 3000 (HTTP) pour afficher les résultats.Si vous avez plusieurs interfaces réseaux sur votre machine, vous pouvez utiliser l’option ‘-i interface‘ pour fixer l’interface à surveiller par Ntop.Pour changer le port utilisé par Ntop pour afficher son interface web: ‘-w port HTTP‘ ou ‘-W port HTTPS‘.

Il suffit ensuite d'aller sur http://monIP-ou-domaine:3000 ou https://monIP-ou-domaine:3443. A ce moment là on obtient de magnifiques graphes et statistiques sur beaucoup de protocoles comme Http, FTP, DNS, eDonkey, WinMX, SSH...

De plus, dans l'interface de configuration, on peut configurer Ntop pour se lancer en tant que daemon au démarrage du système : ntop daemon

Un problème de cet utilitaire est qu'on ne peut pas l'utiliser directement sur le port 80 ou dans un Virtual Host d'Apache. Cependant, voici une solution. Commençons pas activer les modules Apache2 :

a2enmod proxy
a2enmod proxy_http

Ensuite, il faut modifier les fichiers de configuration d'Apache2 en rajoutant un VirtualHost :

<VirtualHost *:80>
    ServerAdmin adressemailadmin@domaine.fr
    ServerName ntop.domaine.fr
    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/
    CustomLog /var/log/apache2/access.log combined
</VirtualHost>

Vous pouvez ensuite modifier votre VirtualHost pour sécuriser tout ça en activant HTTPS ou en mettant un mot de passe.

jeudi, mai 1 2008

Comment installer le plugin ipv6 pour Awstats

Ce plugin permet à AWStats de faire du reverse DNS sur les adresses IPv6.

Il faut d'abord installer les deux paquets suivants :
apt-get install libnet-ip-perl
apt-get install libnet-dns-perl
Ensuite, il faut activer le plugin dans votre fichier de configuration ("/etc/awstats/awstats.mon.domaine.fr.conf") en décommentant la ligne
LoadPlugin="ipv6"
Maintenant il ne reste plus qu'à relancer le scan des logs :
/usr/lib/cgi-bin/awstats.pl -config=mon.domaine.fr -updatecd /usr/share/awstats/lib/

mercredi, avril 16 2008

Installer Proftpd avec MySQL et TLS sur Ubuntu

Ce tutoriel est inspiré de ces tutos : http://www.lea-linux.org/cached/index/Reseau-partfic-proftpd_mysql.html et http://howtoforge.com/proftpd-tls-debian-etch
Installation des paquets :
apt-get install proftpd-mysql openssl 
Il faut ensuite créer les bases SQL qui vont contenir nos utilisateurs et nos groupes :
CREATE DATABASE `proftpd`;
USE proftpd;

--
-- Table structure for table `ftpgroup`
--
CREATE TABLE `ftpgroup` (
`groupname` varchar(16) NOT NULL default '',
`gid` smallint(6) NOT NULL default '5500',
`members` varchar(16) NOT NULL default '',
KEY `groupname` (`groupname`)
) TYPE=MyISAM COMMENT='Table des groupes ProFTPD';

--
-- Table structure for table `ftpuser`
--
CREATE TABLE IF NOT EXISTS `ftpuser` (
`id` int(10) unsigned NOT NULL auto_increment,
`userid` varchar(32) NOT NULL default '',
`passwd` varchar(32) NOT NULL default '',
`uid` smallint(6) NOT NULL default '5500',
`gid` smallint(6) NOT NULL default '5500',
`email` varchar(255) NOT NULL,
`homedir` varchar(255) NOT NULL default '',
`shell` varchar(16) NOT NULL default '/bin/false',
`count` int(11) NOT NULL default '0',
`accessed` datetime NOT NULL default '0000-00-00 00:00:00',
`dl_bytes` bigint(20) NOT NULL,
`dl_count` bigint(20) NOT NULL,
`ul_bytes` bigint(20) NOT NULL,
`ul_count` bigint(20) NOT NULL,
`modified` datetime NOT NULL default '0000-00-00 00:00:00',
`LoginAllowed` enum('true','false') NOT NULL default 'true',
PRIMARY KEY (`id`)
) ENGINE=MyISAM COMMENT='Table des utlisateurs ProFTPD' ;
Ensuite il faut créer un nouvel utilisateur (ex : proftpd) avec un mot de passe (ex : password) qui a seulement les droits de lire les données de la base proftpd:
GRANT USAGE ON proftpd.localhost TO proftpd@'localhost'
IDENTIFIED BY password WITH GRANT OPTION;
On crée ensuite les certificats pour le mode TLS :
openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem
On édite ensuite le fichier /etc/proftpd/proftpd.conf : cliquez ici pour le télécharger
#
# /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file.

# To really apply changes reload proftpd after modifications.

#


# Includes DSO modules
Include /etc/proftpd/modules.conf


# Set off to disable IPv6 support which is annoying on IPv4 only boxes.

UseIPv6 on


ServerName "Mon serveur FTP"

ServerType standalone

ServerIdent on "Bienvenue sur mon ftp. Veuillez-vous identifiez"

DeferWelcome on


MultilineRFC2228 on

DefaultServer on

ShowSymlinks on


TimeoutNoTransfer 600

TimeoutStalled 600

TimeoutIdle 1200


DisplayLogin welcome.msg

DisplayFirstChdir .message

ListOptions "-l"


DenyFilter \*.*/


# Use this to jail all users in their homes

DefaultRoot ~


# Users require a valid shell listed in /etc/shells to login.

# Use this directive to release that constrain.

RequireValidShell off


# Port 21 is the standard FTP port.

Port 21


# In some cases you have to specify passive ports range to by-pass

# firewall limitations. Ephemeral ports can be used for that, but

# feel free to use a more narrow range.

PassivePorts 19200 19250


# If your host was NATted, this option is useful in order to

# allow passive tranfers to work. You have to use your public

# address and opening the passive ports used on your firewall as well.

MasqueradeAddress mon.domaine.fr



# To prevent DoS attacks, set the maximum number of child processes

# to 30. If you need to allow more than 30 concurrent connections

# at once, simply increase this value. Note that this ONLY works

# in standalone mode, in inetd mode you should use an inetd server

# that allows you to limit maximum number of processes per service

# (such as xinetd)
MaxInstances 30


# Set the user and group that the server normally runs at.

User proftpd

Group nogroup


# Umask 022 is a good standard umask to prevent new files and dirs

# (second parm) from being group and world writable.

Umask 022 022

# Normally, we want files to be overwriteable.

AllowOverwrite on


# Uncomment this if you are using NIS or LDAP to retrieve passwords:

# PersistentPasswd off


# Be warned: use of this directive impacts CPU average load!

# Uncomment this if you like to see progress and transfer rate with ftpwho

# in downloads. That is not needed for uploads rates.

#

# UseSendFile off


# Choose a SQL backend among MySQL or PostgreSQL.

# Both modules are loaded in default configuration, so you have to specify the backend

# or comment out the unused module in /etc/proftpd/modules.conf.

# Use 'mysql' or 'postgres' as possible values.
#

<ifmodule mod_sql.c>

SQLBackend mysql

</ifmodule>


TransferLog /var/log/proftpd/xferlog

SystemLog /var/log/proftpd/proftpd.log


#Mise en place du mode TLS

<ifmodule mod_tls.c>

TLSEngine on

TLSLog /var/log/proftpd/tls.log

TLSProtocol SSLv23

TLSOptions NoCertRequest

TLSRSACertificateFile /etc/proftpd/ssl/proftpd.cert.pem

TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key.pem

TLSVerifyClient off


#TLS non obligatoire (pour les clients qui ne sont pas compatibles)

TLSRequired off

</ifmodule>


<ifmodule mod_quota.c>

QuotaEngine on

</ifmodule>


<ifmodule mod_ratio.c>

Ratios on

</ifmodule>



# Delay engine reduces impact of the so-called Timing Attack described in

# http://security.lss.hr/index.php?page=details&ID=LSS-2004-10-02

# It is on by default.

<ifmodule mod_delay.c>

DelayEngine on

</ifmodule>


<ifmodule mod_ctrls.c>

ControlsEngine on

ControlsMaxClients 2

ControlsLog /var/log/proftpd/controls.log

ControlsInterval 5
ControlsSocket /var/run/proftpd/proftpd.sock

</ifmodule>


<ifmodule mod_ctrls_admin.c>

AdminControlsEngine on

</ifmodule>




# Mod MySQL
# =========

# Les mots de passe sont cryptés dans la base avec la fct ENCRYPT (MySQL)

SQLAuthTypes Crypt

SQLAuthenticate users* groups*


# Modifiez cette ligne selon l'utilisateur et le mot de passe définis plus haut

SQLConnectInfo nom_de_la_base@localhost utilisateur mot_de_passe


# On donne à ProFTPD le nom des colonnes de la table usertable

SQLUserInfo ftpuser userid passwd uid gid homedir shell

SQLUserWhereClause "LoginAllowed = 'true'"


# On donne à ProFTPD le nom des colonnes de la table "grouptable"

SQLGroupInfo ftpgroup groupname gid members


# Crée le répertoire home de l'utilisateur si il n'existe pas

CreateHome on


# Met jour les compteurs chaque connection d'un utilisateur

SQLLog PASS updatecount

SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser


#Met jour les compteurs chaque upload ou download d'un utilisateur

SQLLog STOR,DELE modified

SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser


# Met à jour le nombre de bytes downloadés

SQLLog RETR dlbytescount

SQLNamedQuery dlbytescount UPDATE "dl_bytes=dl_bytes+%b WHERE userid='%u'" ftpuser


#Met à jour le nombre de téléchargements

SQLLog RETR dlcount

SQLNamedQuery dlcount UPDATE "dl_count=dl_count+1 WHERE userid='%u'" ftpuser


#Met à jour le nombre de bytes uploadés

SQLLog STOR ulbytescount

SQLNamedQuery ulbytescount UPDATE "ul_bytes=ul_bytes+%b WHERE userid='%u'" ftpuser


#Met à jour le nombre d'uploads

SQLLog STOR ulcount

SQLNamedQuery ulcount UPDATE "ul_count=ul_count+1 WHERE userid='%u'" ftpuser


# On désactive le login root

RootLogin off



# Gestion des logs
# ================

# Enregistre les reques SQL dans /var/log/proftpd/mysql.log

SQLLogFile /var/log/proftpd/mysql.log

# Enregistre les authentifications

LogFormat auth "%v [%P] %h %t \"%r\" %s"

ExtendedLog /var/log/proftpd/auth.log AUTH auth

# Enregistre les acc aux fichiers

LogFormat write "%h %l %u %t \"%r\" %s %b"

ExtendedLog /var/log/proftpd/access.log WRITE,READ write


# Recupere le nom partir de l'ip de la machine de l'utilisateur ( resolution DNS )

IdentLookups on
Maintenant vous pouvez redémarrez le serveur ProFTPd pour appliquer la configuration :
/etc/init.d/proftpd restart
On crée ensuite un utilisateur dans la base de données :
INSERT INTO `ftpuser` ( `id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed` , `modified`, `LoginAllowed`, `email` ) VALUES ('', 'test', ENCRYPT('pwd'), '5500', '5500', '/home/ftp/test', '/bin/false', '', '', '', 'true', 'test@domaine.tld' );
On teste ensuite le compte avec Filezilla.
Pour utiliser le mode TLS dans Filezilla, il faut utiliser le mode FTPES.

http://img411.imageshack.us/img411/8476/filezillajc3.jpg

Pour curl :
curl --ftp-ssl-reqd -k -u utilisateur:mot_de_passe -T nom_fichier ftp://mon.domaine.tld/path/
On peut ensuite utilise l'interface web ProFTPdAdmin pour gérer les utilisateurs et les groupes FTP (Attention les sources disponibles sur le site du projet ne fonctionnent que partiellement avec cette configuration. Voici la même chose mais modifiée par mes soins pour que tout fonctionne : lien ) :

ProFTPd Admin

mardi, avril 15 2008

Script bash pour sauvegarder toutes ses bases MySQL sur un FTP

Voici un petit script utilisant curl et mailutils pour sauvegarder ses bases MySQL sur un serveur FTP et envoyer un mail pour le succès ou l'échec de l'opération.

Mysql

#!/bin/bash 
#################################################
#
# Script de sauvegarde d'une base MySQL
# auteur : Benoît
# 15/04/2008
#

#################################################
# ---- Mise en place des variables

# Nom de la 1er base
liste_bases="--all-databases"

# login passwd pour mysql ayant acces a toutes les bases
user=utilisateursql
passbase=motdepassesql

# adresse email a prenir
mailrt=toto@sdrgzs.df

# nom du serveur de Backup
srvbk=nom_du_serveur_ftp sans ftp://
Userftp=user_ftp
Passftp=mdtp_ftp

# Repertoire ou backuper les bases
repbk=backup_sql

# ---- Fin des variables

#################################################
# ---- Main

statsdatem=$(date '+%Y/%m/%d - %T')
statsdatef=$(date '+%Y%m%d')

for base in ${liste_bases}
do
NomFichierSauvegarde="backup-"${statsdatef}"-"${base}".sql"
mysqldump --all --user=${user} --password=${passbase} ${base} > ${NomFichierSauvegarde};
[ $? -ne 0 ] && echo "Il y a eu une erreur lors du Backup (dump) de vos bases" | mail -s "ERREUR - Backup MySQL du ${statsdatem}" ${mailrt};
gzip ${NomFichierSauvegarde};
[ $? -ne 0 ] && echo "Il y a eu une erreur lors de la compression de vos bases"| mail -s "ERREUR - Backup MySQL du ${statsdatem}" ${mailrt};
done
echo "avant"

curl -u ${Userftp}:${Passftp} -T *${statsdatef}*.gz ftp://${srvbk}/${repbk}/

[ $? -ne 0 ] && echo "Il y a eu une erreur de transfert lors du Backup de vos bases" | mail -s "ERREUR - Backup MySQL du ${statsdatem}" ${mailrt};

for fic in `ls -1 *${statsdatef}*.gz`
do
rm -f ${fic}
done

echo "Backup des bases SQL ${liste_bases} : OK" | mail -s "Backup MySQL du ${statsdatem}" ${mailrt};

exit 0

lundi, février 25 2008

Un blog pour ceux qui ont eu une journée (ou vie) de merde

Si vous avez eu une journée de merde, ce site est pour vous : lien

samedi, février 23 2008

Installer Webmin sur Ubuntu Server

Il suffit d'installer les paquets suivants :
apt-get install libmd5-perl libnet-ssleay-perl libauthen-pam-perl libio-pty-perl openssl

wget http://surfnet.dl.sourceforge.net/sourceforge/webadmin/webmin_1.500_all.deb

dpkg -i webmin_1.500_all.deb

Webmin

Permettre la visualisation IPv6 entre le réseau d'un serveur OpenVPN et le réseau du client OpenVPN

PS : Ce tuto se base sur un PC routeur Ubuntu avec ce script lancé. Cela implique que j'ai un bridge br0 où il n'y a que IPv6 d'autorisé à transiter. L'interface tap0 du VPN va être ajoutée à ce bridge ce qui veut dire que IPv4 sera bloqué à travers le VPN. Mon but est de permettre à un réseau ne pouvant pas avoir IPv6 de l'obtenir à travers ce VPN.

Pour commencer il faut installer avec ce tuto OpenVPN sur le serveur et le client en mode bridge avec la directive dev tap0

Il faut ensuite installer bridge-utils puis créer l'interface tap0 avec le script suivant du coté serveur :

#!/bin/bash

#################################
# Set up Ethernet bridge on Linux
# Requires: bridge-utils
#################################

# Define Bridge Interface
br="br0"

# Define list of TAP interfaces to be bridged,
# for example tap="tap0 tap1 tap2".
tap="tap0"

# Define physical ethernet interface to be bridged
# with TAP interface(s) above.
eth="eth0" #Wan vers Freebox en IPv6
eth1="eth1" #Lan

for t in $tap; do
openvpn --mktun dev $t
done

brctl addbr $br
brctl addif $br $eth
brctl addif $br $eth1

for t in $tap; do
brctl addif $br $t
done

Puis du côté client :

#!/bin/bash

#################################
# Set up Ethernet bridge on Linux
# Requires: bridge-utils
#################################

#Lancement d'OpenVPN
openvpn /etc/openvpn/client.conf

# Define Bridge Interface
br="br0"

# Define list of TAP interfaces to be bridged,
# for example tap="tap0 tap1 tap2".
tap="tap0"

# Define physical ethernet interface to be bridged
# with TAP interface(s) above.
eth="eth0" #Lan

brctl addbr $br
brctl addif $br $eth

for t in $tap; do
brctl addif $br $t
done
On obtient donc un tunnel IPv6 vers un réseau IPv6 d'une Freebox. Toutes les communications IPv6 vont passer dans le tunnel VPN mais pas l'IPv4.

Tester le débit entre deux PC ou serveurs

Iperf est un logiciel informatique permettant la mesure de différentes variables d'une connexion réseau IP. Iperf est développé par National Laboratory for Applied Network Research (NLANR).Basée sur une architecture client/serveur et disponible sur différents systèmes d'exploitations, Iperf est un outil important pour les administrateurs réseaux.

Pour l'installer : apt://iperf

Nous allons prendre l'exemple d'un test réseau entre une machine A et une machine B.

Sur la machine A, il faut lancer la commande suivante:

# iperf -s

Ensuite sur la machine B, on lance la commande:

# iperf -c <adresse IP de la machine A>

Pour plus d'infos : lien

mardi, février 12 2008

Répertoires personnels avec Apache2

Dans /etc/apache2/apache2.conf :

UserDir ./
UserDir disabled
UserDir enabled nomUser


Il faut aussi créer les liens symbolique pour le module UserDir d'Apache 2:

a2enmod userdir

Règle Iptables pour le FTP

Pas facile de régler iptables pour laisser passer FTP :
 
#ftp
iptables -A INPUT -p TCP --dport 21 -m state --state NEW -j ACCEPT
iptables -A INPUT -p TCP --dport 20 -m state --state RELATED -j ACCEPT
modprobe ip_conntrack
modprobe ip_conntrack_ftp
iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --sport 1024: --dport 19200:19250 -m state --state NEW,ESTABLISHED -j ACCEPT #TLS

mercredi, janvier 9 2008

VNC par tunnel SSH

Prise en main depuis une machine sous Linux:

Ouvrez deux sessions de terminal :

- 1er terminal (à laisser ouvert le temps de la session VNC) :

ssh -L 5901:localhost:5900 -C <user>@<machine_a_contrôler_ip_ou_nom_domaine>

- 2ème terminal:

vncviewer localhost:1

Remarque : on peut aussi passer par les interfaces graphiques déjà disponibles (Terminal Server Client pour Gnome, Krdc pou KDE), ce qui évite d'ouvrir le deuxième terminal...

Prise en main depuis une machine sous Windows:

Une solution simple et efficace existe sous Windows afin de prendre en main une machine Ubuntu, le tout via un tunnel SSH.

Les manipulations sont les mêmes pour la machine à contrôler, les changements interviennent seulement sur la machine qui contrôle (dans mon cas sous Windows XP).

- télécharger le logiciel PUTTY permettant l'accès à la console en ssh ici: http://www.chiark.greenend.org.uk/~sgtatham/putty/

Démarrez Putty, entrez l'adresse sur laquelle vous voulez vous connectez (ip publique ou nom de domaine, pour en ouvrir un gratuit voyez par ici :http://doc.ubuntu-fr.org/serveur/dns_dynamique)

Choisissez SSH en 'Connection Type'. Sur la gauche de l'écran rendez vous dans l'onglet 'SSH', puis 'Tunnel': en 'source port', ajoutez 5900 en 'destination', ajouter 127.0.0.1:5900

cochez éventuellement sous SSH 'Enable Compression'

Sauvegarder votre profil.

- télécharger vncviewer ici: http://www.realvnc.com Connectez vous sur le port 127.0.0.1, vous voilà connecté sur votre machine Ubuntu en ssh, sécurisé donc!

mardi, octobre 30 2007

Installer le compilateur c

sudo apt-get install build-essential

Améliorer la qualité des vidéos avec une carte ATI

sudo aticonfig --overlay-type=Xv

samedi, octobre 27 2007

Lecteur de newsgroup

Si vous êtes fan des newsgroup binaires, voici la solution pour Linux :
sudo apt-get install klibido