Catégories
Open-source Planet-libre Systeme

J’ai testé Debian GNU/kFreeBSD

La dernière version de la distribution Debian propose en option l’utilisation d’un noyau FreeBSD en lieu et place du classique noyau Linux. Si vous suivez ce blog, vous savez tout le bien que je pense de ce noyau BSD. On se retrouve donc avec une distribution Debian GNU/kFreeBSD (k comme kernel) qui, sur le papier, a de quoi séduire…

Nous allons donc dans ce billet détailler l’installation de cette distribution sur une machine virtuelle VirtualBox afin de vous faire une propre idée.

Installation de Debian GNU/kFreeBSD

On commence par récupérer l’image ISO:

wget -O debian-6.0-kfreebsd-i386.iso http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-kfreebsd-i386/current/images/netboot/mini.iso

L’image ISO ne fait que 9 Mo. C’est donc une procédure d’installation minimale (netinstall) qui va télécharger les paquets nécessaires sur Internet. Il faut donc compter une petite heure d’installation avec une liaison Internet correcte.

On créé ensuite une machine virtuelle (1+ Go de RAM et 6+ Go de disque) en utilisant cette image. Pour me simplifier la vie, j’ai choisi une installation par défaut dans le premier menu: « Default install »


Le wizard d’installation va vous poser les questions habituelles (nom et domaine de la machine, partition ou installer le système, mot de passe root, compte utilisateur par défaut, clavier…), bref rien de compliqué.

Lors de mon test je me suis retrouvé avec un clavier qwerty pendant cette installation, faites donc attention lorsque vous allez saisir le mot de passe root…

Une fois la procédure d’installation terminée, il faut rebooter sur le disque système. J’ai rencontré l’erreur critique suivante durant le démarrage:

Mmmmhhhh pas glop

Pour résoudre ce problème j’ai du forcer l’ordre de démarrage des disques dans VirtualBox en mettant le disque système en premier:

Le démarrage se passe ensuite sans problème ! Glop

On a donc dans les main un système Debian GNU 6.0 avec un noyau FreeBSD 8.1 !

Mais ou est le rc.conf ?

Pour diablotins qui souhaiteraient passer du coté obscur, il va falloir perdre certaines habitudes. En effet, même si on utilise un noyau FreeBSD, tout l’écosystème de cette distribution reste une Debian GNU. Ainsi l’organisation des fichiers de configuration reste la même que sur une Debian « classique » (voir la documentation ici). Point donc du si pratique fichier rc.conf qui permet de configurer l’ensemble des processus lancés au démarrage de votre machine et se contenter d’une gestion par des scripts dans le répertoire /etc/init.d.

Et mes ports ?

Là encore, point de répertoire /usr/ports. En effet, le gestionnaire de paquets est apt-get (ou aptitude). Dommage j’aime bien le principe de compilation à l’installation de nouveaux logiciels.

Voilà PF !

Tout comme Linux, le noyau FreeBSD est de type monolitique modulaire (je vous conseille de lire ce wiki pour voir de quoi je parle). On peut ainsi charger des fonctions complémentaires « à chaud ».

C’est par exemple le cas du module PF qui ajoute un firewall intégré vraiment très puissant (de mon humble avis, l’un des principal avantages du noyau FreeBSD part rapport à Linux).

Il n’est pas activé par défaut dans le noyau fourni par la distribution Debian. Il faut donc pour l’activer, saisir les commandes suivante qui permette de charger le bon module:

su –

kldload pf.ko

pfctl -e

Pour une petite introduction à PF vous pouvez lire un billet que j’avais écrit il y a maintenant deux ans (ou bien RTFM…).

On peut également s’amuser à customiser le stack IP FreeBSD, réputé pour sa fiabilité et sa performance, en utilisant la commande sysctl.

Conclusion

C’est fini pour cette rapide introduction à Debian GNU/kFreeBSD. Je trouve l’initiative intéressante pour contre balancer l’hégémonie du noyau Linux dans les systèmes libres.

Catégories
Open-source Reseau

Installation d’une sonde NetFlow sous FreeBSD

Nous allons dans ce billet voir comment installer une sonde Netflow (protocole propriétaire de Cisco) sur une machine FreeBSD. On pourra ensuite collecter les mesures des flux réseaux transitant par notre machine BSD et les remonter à un collecteur avant analyse. Pour en savoir plus sur le protocole Netflow, je vous conseille la lecture de ce billet.

Nous allons utiliser la sonde libre fProbe qui a le bon goût d’être disponible dans les dépôts de FreeBSD.

Installation de fProbe

On installe le logiciel fProbe (version 1.1 au moment de l’écriture de ce billet):

[shell]
pkg_add -r fprobe
[/shell]

Utilisation de fProbe

Imaginons que votre routeur sous FreeBSD est 2 interfaces réseaux (ce qui est un minimum pour un routeur…): em0 et em1. em0 est votre interface coté LAN et em1 celle coté WAN. Pour capturer les flux transitant sur l’interface WEN et remonté via le protocole NetFlow (sur le port UDP/9991) les mesures vers une machine collecteur ayant pour adresse IP 192.168.0.100, il faut saisir la ligne de commande suivante:

[shell]
fprobe -i em1 -f ip 192.168.0.100:9991
[/shell]

Il est ensuite facile de récupérer les mesures sur la machine 192.168.0.100 en installant NFDump ou en utilisant NTop et son plugin NetFlow.

Vous pouvez bien évidemment lancer autant de sonde fprobe que nécessaire (par exemple si votre routeur dispose de plusieurs interfaces à surveiller).

Il est également possible d’envoyer les mesures Netflow à plusieurs collecteurs. Pour celà il faut ajouter les couples adresse IP/port UDP à la ligne de commande. Dans ce cas, il faut modifier le script de démarrage de la manière suivante:

[shell]
vi /usr/local/etc/rc.d/fprobe

#!/bin/sh

#

# $FreeBSD: ports/net-mgmt/fprobe/files/fprobe.sh.in,v 1.1 2006/11/24 07:23:24 clsung Exp $

#

# PROVIDE: fprobe

# REQUIRE: NETWORKING

# KEYWORD: shutdown

# Add the following lines to /etc/rc.conf to enable fprobe:

#

#fprobe_enable="YES"

#

# See fprobe(8) for fprobe_flags

#

. "/etc/rc.subr"

name="fprobe"

rcvar=`set_rcvar`

command="/usr/local/sbin/fprobe"

command_args1="-i em0 -f ip 192.168.0.100:9990"

command_args1="-i em4 -f ip 192.168.0.100:9994"

pidfile="/var/run/$name.pid"

load_rc_config "$name"

: ${fprobe_enable="NO"}

start_cmd="echo \"Starting ${name}."\; ${command} ${command_args1}; ${command} ${command_args2}"

run_rc_command "$1"

[/shell]

Quand vous avez validé votre chaine de mesure (sonde / collecteur), vous pouvez automatiser le lancement de la sonde en modifiant le fichier /usr/local/etc/rc.d/fprobe pour l’adapter à vos besoins et ajouter la ligne suivante au fichier /etc/rc.conf:

[shell]

fprobe_enable="YES"

[/shell]

Catégories
Open-source Reseau

Installation de Squid sous FreeBSD

squid
Squid est un proxy supportant les protocoles HTTP, HTTPs et FTP. Nous allons dans ce billet voir comment installer et configurer Squid 3.0.20 sur un serveur FreeBSD 8.0 (qui est je le répète le meilleur OS pour les services réseaux – fin de troll).

Catégories
Open-source Planet-libre Systeme

Mise à jour complète de son FreeBSD

100px-logo_freebsd

Pour une mise à jour majeure 7.x -> 8.x. Je vous conseille de suivre les procédures se trouvant sur le site suivant: http://people.freebsd.org/~rse/upgrade/

FreeBSD est surement un des systèmes d’exploitations les plus stable et modulaire que je connaisse. Son administration est une réelle partie de plaisir sauf pour un point: la mise à jour… Nous allons dans un premier temps expliquer pourquoi cette mise à jour n’est pas triviale et ensuite détailler une mise à jour complète.

Pourquoi ?

Un système FreebSD est composé de trois groupe de logiciels: le noyau, le monde et les ports.

Le noyau (ou kernel) est le coeur de système, il permet la communication avec le matériel (CPU, mémoire, entrée/sortie, processus…). Il est géré par l’équipe de développement de FreeBSD. Il est possible de customiser finement ce noyau à vos besoins.

Le monde (ou world) représente des applications ou services proche du système, fournies avec le système FreeBSD.

Les ports sont des applications/services/librairies portés par leurs auteurs ou par des personnes tierces sur le système FreeBSD.

Ainsi quand on doit faire une mise à jour de notre système FreeBSD, il faut commencer par se poser la question suivante: que veut on mettre à jour ? Nous allons dans la suite du billet détailler une mise à jour complète de son système FreeBSD

Comment ?

Avant de commencer la phase de mise à jour proprement dite, il faut récupérer les sources du noyau et du monde (le tout étant recompilé avant d’être installé sur votre machine).

Récupération des sources

Plusieurs méthodes existent. Personnellement, j’utilise la méthode cvsup. On commence par installer le logiciel cvsup (ou csup qui est plus rapide) avec la commande suivante:

pkg_add -r cvsup

mkdir /usr/local/etc/cvsup/

cp /usr/share/examples/cvsup/stable-supfile /usr/local/etc/cvsup

cp /usr/share/examples/cvsup/ports-supfile /usr/local/etc/cvsup

Ensuite on édite les fichiers de configuration /usr/local/etc/cvsup/stable-supfile et /usr/local/etc/cvsup/ports-supfile pour modifier l’URL du serveur de mise à jour:

*default host=cvsup1.fr.FreeBSD.org

Mise à jour du monde

On télécharge les mises à jours:

cvsup /usr/local/etc/csup/stable-supfile

cvsup /usr/local/etc/csup/ports-supfile

On commence par mettre à jour le monde:

cd /usr/src/

make buildworld

On redémarre en mode de maintenance:

mergemaster -p

make installworld

mergemaster -i

On redémarre en mode normal.

PS: l’étape de reboot en mode maintenance n’est pas obligatoire mais fortement conseillée…

Mise à jour du noyau

Puis et seulement puis, on met à jour le noyau de notre système avec les commandes suivantes:

cd /usr/src/sys/i386/conf

ls GENERIC

cd /usr/src

make buildkernel KERNCONF=GENERIC

make installkernel KERNCONF=GENERIC

PS: si vous avez customiser votre noyau, il faut donner le nom du fichier de configuration en lieu et place de GENERIC.

Mise à jour des ports

Comme pour le mode et le noyau, il est nécessaire de récupérer la liste des derniers ports (arbre des ports dans le jargon FreeBSD), pour cela j’utilise les commandes:

portsnap fetch

portsnap extract

portsnap update

Ensuite j’utilise le logiciel portupgrade pour effectuer les mise à jour. Il faut dans un première temps installer ce logiciel sur votre système:

pkg_add -r portupgrade

Ensuite on lance la mise à jour de nos ports installés:

portupgrade -ar

FreeBSD-Update Une solution tout en un

Sur les dernière versions de FreeBSD RELEASE (>6.3 et >8.0), un logiciel automatisant ces taches a été développé par l’équipe de FreeBSD. Le logiciel en question s’appelle freebsd-update.

Attention cette procédure ne peut pas s’appliquer sur les versions STABLE.

Il permet de mettre à jour votre système a deux niveaux:

Mise à jour au niveau sécurité

Il suffit de saisir les deux commandes suivantes:

freebsd-update fetch

freebsd-update install

Mise à jour majeure et mineure

Les trois commandes suivantes vont mettre à jours les ports et migrer FreeBSD dans la dernière version disponible (8.1-RELEASE):

portupgrade -af

freebsd-update -r 8.1-RELEASE upgrade

freebsd-update install

On doit ensuite rebooter la machine, puis re-saisir la commande suivante:

freebsd-update install

Catégories
Open-source Reseau

Installation d’un serveur VPN sous FreeBSD

Le but de ce billet est de détailler l’installation d’un serveur VPN routé de type SSL sur un système FreeBSD 7. Nous utiliserons pour cela le logiciel libre OpenVPN (licence GPL v2).

Installation du système FreeBSD

Robustesse et qualité de sa pile IP font du système FreeBSD un bon « hôte » pour notre serveur VPN. Afin de ne pas surcharger le serveur avec des logiciels inutiles, j’ai choisi l’installation minimale (développeur, comprenant les « ports ») à partir du réseau (ISO 7.x-RELEASE-i386-bootonly).

Avant de commencer l’installation d’OpenVPN, il est préférable de s’assurer que notre système d’exploitation est à jour en suivant cette procédure.

Installation de OpenVPN

On commence par installer le port OpenVPN avec la commande suivante:

pkg_add -r openvpn

On automatise le lancement en ajoutant la ligne suivante au fichier /etc/rc.conf:

openvpn_enable= »YES »

Configuration du serveur OpenVPN

OpenVPN permet la création de tunnel VPN de type SSL. Il faut donc que votre serveur puisse gérer des clès de chiffrement. Les étapes à suivre sont les suivantes:

vi openssl.cnf

dir = /etc/ssl/CA
default_days = 3650 # Valable 10 ans…
default_bits  = 2048 # Clès de 2048 bits
countryName_default = FR
stateOrProvinceName_default = PACA
localityName_default = Valbonne
0.organizationName_default = MaBoite
commonName_default = mondomaine.com
emailAddress_default = contact@mondomaine.com

mkdir /etc/ssl/CA

cd /etc/ssl/CA
mkdir certs
mkdir crls
mkdir newcerts
mkdir private

touch index.txt
echo 01 > serial
echo 01 > crlnumber

openssl req -nodes -new -x509 -keyout private/cakey.pem -out cacert.pem -days 3650
> Laisser les options par défaut

A ce stade, on doit avoir notre clés créé dans le fichier private/cakey.pem:

ls /etc/ssl/CA/private
cakey.pem

On génère ensuite le fichier de révocation:

cd /etc/ssl/CA
openssl ca -gencrl -out crls/crl.pem
chown root:nobody crls/crl.pem

On passe maintenant à la génération de notre certificat pour notre serveur VPN:

cd /etc/ssl/CA/certs
openssl req -nodes -new \
-keyout vpn.mondomaine.com.key \
-out vpn.mondomaine.com.csr
> Laisser les options par défaut puis entrer un mot de passe
chmod 600 /etc/ssl/CA/certs/vpn.mondomaine.com.key

Puis on le signe:

openssl ca -out al-vpn1.alcasat.net.crt
\-in al-vpn1.alcasat.net.csr
\-policy policy_anything

Enfin on génère les paramètres Diffie-Hellman pour l’échange des clés:

openssl dhparam -out dh2048.pem 2048

Pour configurer OpenVPN, nous allons nous baser sur une configuration d’exemple fournie par OpenVPN dans le fichier /usr/local/share/doc/openvpn/sample-config-files/server.conf.

mkdir /usr/local/etc/openvpn/
cp /usr/local/share/doc/openvpn/sample-config-files/server.conf \
/usr/local/etc/openvpn/openvpn.conf

Puis éditer le fichier /usr/local/etc/openvpn/openvpn.conf en adaptant la configuration à votre réseau.

Voici ma configuration:

et le fichier .conf correspondant:

port 1194
proto udp
dev tun

ca /etc/ssl/CA/cacert.pem
cert /etc/ssl/CA/certs/al-vpn1.alcasat.net.crt
key /etc/ssl/CA/certs/al-vpn1.alcasat.net.key
crl-verify /etc/ssl/CA/crls/crl.pem
dh /etc/ssl/CA/certs/dh2048.pem

server 192.168.40.0 255.255.255.0

ifconfig-pool-persist ipp.txt
push « route 192.168.1.0 255.255.255.0 »

keepalive 10 120

cipher BF-CBC
comp-lzo

user nobody
group nobody

persist-key
persist-tun

status openvpn-status.log
verb 6
mute 20

Lancement du serveur OpenVPN

On utilise le script système:

/usr/local/etc/rc.d/openvpn start

Pour vérifier que le tunnel VPN est prêt à accueillir des clients, on peut vérifier que le preocess openvpn est bien lancé et que l’interface tun0 est bien présente:

/usr/local/etc/rc.d/openvpn status
openvpn is running as pid 2212.

ifconfig tun0
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
inet 192.168.40.1 –> 192.168.40.2 netmask 0xffffffff
Opened by PID 2207

Pour relancer le serveur (en cas de changement de configuration):

/usr/local/etc/rc.d/openvpn restart

Pour arrêter le serveur:

/usr/local/etc/rc.d/openvpn stop

La consultation des logs peut être faire via la commande:

tail -f /var/log/messages | grep openvpn

Configuration de votre réseau

Si votre réseau hébergeant le serveur VPN comporte des routeurs il faut leur ajouter la route suivante (exemple donnée pour un ajout de route sur un routeur FreeBSD):

route add -net 192.168.40.0/24 @IP-SERVEUR-VPN

Configuration d’un client Linux

A partir du serveur VPN, on génére les clés pour le nouveau client:

cd /etc/ssl/CA/certs

openssl req -nodes -new -keyout vpn-nicolargo.key -out vpn-nicolargo.csr
Generating a 2048 bit RSA private key
………………………………………..+++
……………….+++
writing new private key to ‘vpn-nicolargo.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [FR]:
State or Province Name (full name) [PACA]:
Locality Name (eg, city) [Valbonne]:
Organization Name (eg, company) [MaBoite]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) [mondomaine.com]:vpn-nicolargo.mondomaine.com
Email Address [contact@mondomaine.com]:monadresse@mondomaine.com

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:monpassword
An optional company name []:

Il faut changer le fichier /etc/ssl/CA/serial (incrémenter la valeur de 1).

echo 02 > /etc/ssl/CA/serial

Puis signer le certificat:

openssl ca -out vpn-nicolargo.crt \
-in vpn-nicolargo.csr -policy policy_anything

Sur la machine cliente, on copie les 3 fichiers ainsi que la clés serveur cacert.pem dans le répertoire /etc/ssl/certs (à créer si il n’existe pas).

On doit se retrouver avec nos 4 fichiers:

ls /etc/ssl/certs/*
/etc/ssl/certs/cacert.pem
/etc/ssl/certs/vpn-nicolargo.crt
/etc/ssl/certs/vpn-nicolargo.csr
/etc/ssl/certs/vpn-nicolargo.key

On protége nos fichiers:

groupdadd nobody
chown root:nobody /etc/ssl/CA/cacert.pem
chown root:nobody /etc/ssl/CA/certs/vpn-nicolargo.*
chmod 600 /etc/ssl/CA/certs/vpn-nicolargo.key

Après installation d’OpenVPN sur votre machine cliente, on le configure en créant le fichier client.conf dans le répertoire /etc/openvpn/ (sous GNU/Linux Ubuntu):

sudo vi /etc/openvpn/client.conf

client
dev tun
proto udp
remote al-vpn1.alcasat.net 1194
nobind
user nobody
group nobody
persist-key
persist-tun
ca /etc/ssl/certs/cacert.pem
cert /etc/ssl/certs/vpn-hennionn.crt
key /etc/ssl/certs/vpn-hennionn.key
cipher BF-CBC
comp-lzo
verb 6
mute 20

Lancement du client OpenVPN Linux

Pour monter le VPN entre notre client et le serveur, on utilise le script système (sous GNU/Linux Ubuntu):

# sudo /etc/init.d/openvpn start client
* Starting VPN ‘client’ [OK]

L’arrêt se fera tout aussi simplement:

# sudo /etc/init.d/openvpn stop client

* Stopping VPN ‘client’ [OK]

Par défaut, au démarrage de la machine, OpenVPN va lancer tout les tunnels VPN dont il trouve une configuration dans le répertoire /etc/openvpn/. Si vous souhaitez désactiver cette fonction et monter vous même le VPN à la main, il faut éditer le fichier /etc/default/openvpn (sous GNU/Linux Ubuntu) et décommenter la ligne suivante:

AUTOSTART= »none »

Pour conclure…

Il est possible de configurer d’autres clients en suivant la même procédure, le tunnel VPN étant routé, il peut accueillir plusieurs utilisateurs en même temps.

Des clients OpenVPN avec interface graphique sont également disponibles sous Windows et Mac OS X.

Quelques sources utiles à la rédaction de ce billet:

Catégories
Open-source Systeme

Mise à jour de FreeBSD avec freebsd-update

Petite note à destination des utilisateurs de FreeBSD qui souhaite maintenir leur système à jour. Nous allons utiliser l’utilitaire freebsd-update.

La première chose à faire est de vérifier la version actuelle de votre système FreeBSD:

# uname -a
FreeBSD monbeauserveur 7.0-RELEASE FreeBSD 7.0-RELEASE #0

Si la version actuelle diffère de la dernière version disponible, on lance la mise à jour:

# freebsd-update upgrade -r 7.1-RELEASE

# freebsd-update install

On relance le système:

# shutdown -r now

On finalise la mise à jour:

# freebsd-update install

Puis on relance une dernière fois le système:

# shutdown -r now

Enfin on vérifie que tout est OK:

# uname -a
FreeBSD monbeauserveur 7.1-RELEASE FreeBSD 7.1-RELEASE #0

Il est également conseiller de mettre à jour vos logiciels tiers en suivant cette procédure.

Catégories
Open-source Reseau Web

Installation serveur NAT-PMP sous FreeBSD

MiniUPnP est une implémentation libre du protocole NAT-PMP. Développé par Apple, ce successeur de UPnP IGD permet de configurer automatique et à la demande des applications des règles de NAT sur votre routeur d’accès. Free vient d’ajouter cette fonction sur le firmware des Freebox.

Nous allons voir dans ce billet comment fonctionne ce protocole et comment transformer votre routeur/firewall PF FreeBSD en un daemon NAT-PMP.

C’est quoi NAT-PMP ?

NAT-PMP est un protocole basée sur le protocole Bonjour. Ce dernier utilise des trames UDP sur le port 5351 qui sont envoyé vers l’adresse de la passerelle par défaut de votre réseau.

Il permettant à une application de:

  • récupérer son adresse IP publique (comment le PC va être vu sur Internet)
  • ajouter une règle de NAT PF (ou IPFW) sur le routeur

Si l’adresse publique de la passerelle par défaut change, une alerte au format multicast (adresse 224.0.0.1 sur le port 5351) sera envoyée sur le réseau. Elle contiendra en donnée la nouvelle adresse.

Installation du daemon sur FreeBSD

Le daemon en question s’appelle minipnpd et est présent dans les ports de FreeBSD (/usr/ports/net/miniupnpd).

L’installation est classique:

portinstall net/miniupnpd

Il faut également ajouter les règles suivantes dans votre fichier de configuration PF (/etc/pf.conf par défaut):

# NAT section
# UPnPd rdr anchor
rdr-anchor « miniupnpd »

# Rules section
# uPnPd rule anchor
anchor « miniupnpd »

puis relancer les règles PF:

pfctl -f /etc/pf.conf

et enfin ajouter la ligne suivante dans votre fichier /etc/rc.conf:

miniupnpd_enable= »YES »

La configuration doit se faire par un fichier /usr/local/etc/miniupnpd.conf. Vous pouvez utiliser le template suivant (à adapter à votre réseau):

# WAN network interface
ext_ifname=em0
# if the WAN interface has several IP addresses, you
# can specify the one to use below
#ext_ip=

# there can be multiple listening ips for receiving SSDP traffic.
# the 1st IP is also used for UPnP Soap traffic.
listening_ip=192.168.0.254
port=5555

# bitrates reported by daemon in bits per second
bitrate_up=131072
bitrate_down=524288

# default presentation url is http address on port 80
#presentation_url=

# report system uptime instead of daemon uptime
system_uptime=yes

# notify interval in seconds default is 30 seconds.
#notify_interval=240

# log packets in pf
#packet_log=no

# uuid : generated by the install a new one can be created with
# uuidgen
uuid=%%UUID%%

# UPnP permission rules
# (allow|deny) (external port range) ip/mask (internal port range)
# A port range is <min port>-<max port> or <port> if there is only
# one port in the range.
# ip/mask format must be nn.nn.nn.nn/nn
allow 1024-65535 192.168.0.0/24 1024-65535
deny 0-65535 0.0.0.0/0 0-65535

Pour lancer le daemon, il faut lancer la commande suivante:

/usr/local/etc/rc.d/miniupnpd start

Pour tester

Le plus simple est d’utiliser une des applications compatibles UPnP (voir liste dans le Wiki) ou bien d’utiliser le client en ligne de commande miniupnpc (compilable sous Linux, BSD, Mac OS X et Windows…).

Conclusion

Bien sûr ce daemon peut présenter un trou de sécurité assez important (possibilité d’ajouter des règles sur votre Firewall), il faut donc prendre toutes les précautions nécessaires sur les réseaux sensibles (notamment au niveau de la configuration de la section UPnP permission rules).

Catégories
Open-source Systeme

La bible de FreeBSD

Si vous suivez régulièrement ce blog, vous savez tout le bien que je pense du système d’exploitation FreeBSD. C’est celui-ci que j’utilise sur mes serveurs critiques nécessitant des fonctions réseaux stables et performantes.

Sans rentrer dans un jeu de troll avec les « aficionados » d’autres systèmes d’exploitation, FreeBSD a un avantage que je trouve énorme pour un administrateur: la clarté de l’arborescence des fichiers de configuration. Un sentiment de propreté que je n’ai pas retrouvé sous GNU/Linux. Pour moi, le système d’information idéal, serait composé de serveur sous FreeBSD et de client sous GNU/Linux, on en est malheureusement encore loin dans la plupart des entreprises Françaises…

Mais revenons au but pricipal de ce billet qui est l’annonce de la publication d’un livre sur la dernière version de FreeBSD: « FreeBSD 7.0 Le guide complet de FreeBSD » aux éditions Broché.

51mbmb4lnzl_sl160_.jpg

C’est ce que l’on appelle une « bible » dans le jargon des bouquins techniques, un livre référence auquel on revient immanquablement. La structure du livre est à la fois adaptée à ceux qui ne connaissance pas encore les systèmes BSD et ceux qui l’utilise depuis de nombreuses années.

Peux de livre sont indispensables pour un administrateur réseau (la faute à Internet…), mais celui-ci en fait parti…

Catégories
Hardware Open-source Systeme

RAID 1 logiciel sous FreeBSD

Certains serveurs de votre réseau sont plus sensibles que d’autres: on peut citer par exemple les serveurs DNS, LDAP ou base de données. D’un autre coté les pannes matérielles survenant sur ces mêmes serveurs viennent souvent des disques durs. En partant de ces deux constats, je vous propose dans ce billet d’utiliser la fonction de RAID 1 logicielle de FreeBSD pour sécuriser ces serveurs.

Petit rappel sur RAID 1

Le RAID 1 consiste à utiliser n disques redondants (n supérieur ou égal à 2). Chaque disque contient la même information.

150px-RAID_1.svg.png

Dans notre exemple, nous allons utiliser une configuration minimale pour du RAID 1: deux disques de taille et de caractéristiques équivalentes.

Préparation de l’installation

Il faut dans un premier temps identifier les disques sur lequel de RAID 1 va être installé. Pour celà la commande dmesg devrait vous aider:

# dmesg

ad4: 76319MB <WDC WD800AAJS-70TDA1 01.00A03> at ata2-master SATA150

ad6: 76319MB <WDC WD800AAJS-70TDA1 01.00A03> at ata3-master SATA150

Nous avons donc deux disques: ad4 et ad6.

Ensuite on regarde ou le système est installé:

# df

/dev/ad4s1a 71621288 1044946 64846640 2% /

FreeBSD est donc installé sur le disque ad4. Nous allons donc nous servir du disque ad6 pour créer le disque mirroir de ad4.

Configuration du RAID 1 sous FreeBSD

Nous allons utiliser l’utilitaire gmirror pour effectuer le « mirroring » de ad4 vers ad6.

La première chose à faire est de vérifier que votre version de FreeBSD supporte cette fonction.

# man gmirror

Si c’est le cas, le manuel de la commande devrait s’afficher.

On commence par préparer le disque « maître » (ad4 dans notre exemple):

# sysctl kern.geom.debugflags=17

# gmirror label -vb round-robin gm0 /dev/ad4

Le résultat de cette dernière commande devrait être:

Metadata value stored on /dev/ad4.

Done.

On charge ensuite le module gmirror dans le kernel.

# gmirror load

Si vous n’avez pas de message d’erreur vous pouvez automatiser le chargement du module au prochain démarrage du serveur en tapant la commande suivante:

# echo ‘geom_mirror_load= »YES »‘ >> /boot/loader.conf

On vient de créer un disque virtuel nommé gm0. Il faut donc remplacer, dans le fichier /etc/fstab, toutes les occurrences /dev/ad4 par /dev/mirror/gm0. Pour cela on utilise vi:

# cp /etc/fstab /etc/fstab.old

# vi /etc/fstab

:%s/ad4/mirror\/gm0/g

On redémarre ensuite le serveur:

# shutdown -r now

Une fois le serveur rebooté, il ne reste plus qu’a ajouter le disque ad6 (notre disque « esclave ») dans le mirroir RAID 1 (gm0).

# gmirror insert gm0 /dev/ad6

Vérification de l’état du RAID 1

On peut utiliser la commande suivante:

# gmirror status

Durant l’initialisation du disque esclave, le résultat devrait ressembler à:

Name Status Components

mirror/gm0 DEGRADED ad4

ad6 (1%)

Ensuite, le message suivant devrait apparaître:

Name Status Components

mirror/gm0 COMPLETE ad4

ad6

Et si un de mes disques plantes ?

Imaginons que le disque primaire (ad4) rende l’âme. Il suffit:

  • éteindre le serveur
  • retirer le disque ad4
  • le remplacer par un disque équivalent
  • redémarrer le serveur
  • Saisir les commande suivantes pour reconstruire le disque:

# gmirror forget gm0

# gmirror insert gm0 /dev/ad4

Il ne reste plus qu’a superviser votre RAID 1 avec votre serveur Nagios !

Catégories
Open-source Systeme

Redémarrer automatiquement un processus

Flickr Photo Download_ Shells.jpg

Certaines processus système sont plus sensibles que d’autres. Par exemple, dans le cas de l’administration d’un serveur distant, le processus SSHD est à protéger avant tout.

Voici donc le petit script que j’utilise sur mes serveurs pour relancer le daemon sshd au cas ou se dernier s’arrête (suite à un bug ou à une fausse manipulation d’un opérateur). Ce script shell est bien sûr adaptable pour d’autres processus.

#!/bin/sh

# /usr/local/bin/sshd_wrapper.sh

PROCESS_NAME=sshd

PROCESS_COMMAND=’ /usr/local/sbin/sshd’

ps auxw | grep -v grep | grep $PROCESS_NAME > /dev/null || $PROCESS_COMMAND

On rends alors ce script exécutable seulement par l’utilisateur qui doit lancer le processus.

chmod 700 /usr/local/bin/sshd_wrapper.sh

Puis on demande au système d’exécuter ce script toute les minutes:

crontab -e

* * * * * /usr/local/thales/bin/sshd_wrapper.sh > /dev/null 2>&1

et hop…