11/05/2012
201205111842 kimsufi
Au revoir kimsufi
D'ici 7 jours, je quitterai mon valeureux kimsufi. Que soient ici remerciés son disque dur, son processeur Celeron et son giga de ram qui, pendant plus de 3 ans, ne m'ont jamais trahi. Petite pensée particulière à la jail devel sans qui mohawk n'aurait pas vu le jour.
La semaine à suivre ne sera pas un modèle de haute disponibilité, d'avance toutes mes excuses. L'aventure continue avec ml150, orke, zail et un nouveau mohawk gonflé à bloc.
16/06/2008
200806160800 freebsd kimsufi install jail
Mon premier billet
Prélude
Pour mon premier billet, je vais décrire l'installation de mon serveur. Après avoir pris un domaine chez gandi.net, j'ai commandé mon serveur dédié chez ovh (livré avec un peu de retard :) avec FreeBSD 7.0. Installation de la version 32 bits par défaut et un partitionnement des plus simple:ks34581# cat /etc/fstab # Device Mountpoint FStype Options Dump Pass# /dev/ad4s1a / ufs rw 1 1 /dev/ad4s1b /home ufs rw 2 2 /dev/ad4s1d swap swap sw 0 0 proc /proc procfs rw 0 0
Depuis le manager je réinstalle la version 64 bits. J'en profite pour activer mon compte de backup.
Configuration de base
Modification du mot de passe rootks34581# passwdSuppression des getty inutiles
ks34581# grep "getty Pc" /etc/ttys ttyv0 "/usr/libexec/getty Pc" cons25 on secure ttyv1 "/usr/libexec/getty Pc" cons25 off secure ttyv2 "/usr/libexec/getty Pc" cons25 off secure ttyv3 "/usr/libexec/getty Pc" cons25 off secure ttyv4 "/usr/libexec/getty Pc" cons25 off secure ttyv5 "/usr/libexec/getty Pc" cons25 off secure ttyv6 "/usr/libexec/getty Pc" cons25 off secure ttyv7 "/usr/libexec/getty Pc" cons25 off secure ks34581# kill -HUP 1Heure locale
ks34581# cp /usr/share/zoneinfo/Europe/Paris /etc/localtimeDésactivation du module linux
ks34581# kldunload linux ks34581# echo 'linux_enable="NO"' >> /etc/rc.confActivation de ZFS
ks34581# kldload zfs ks34581# echo 'zfs_enable="YES"' >> /etc/rc.confActivation de lo1 (pour les jails)
ks34581# ifconfig lo1 create ks34581# ifconfig lo1 inet 172.16.0.254 netmask 255.255.255.0 ks34581# echo 'network_interfaces="lo0 vr0 lo1"' ks34581# echo '/sbin/ifconfig lo1 create' > /etc/start_if.lo1 ks34581# echo 'ifconfig_lo1="inet 172.16.0.254 netmask 255.255.255.0"' >> /etc/rc.conf ks34581# echo '172.16.0.254 kimsufi.mondomaine.tld' >> /etc/hostsssh sur interface publique
ks34581# echo 'sshd_flags="-o ListenAddress=syslog en mode local"' >> /etc/rc.conf
ks34581# echo 'syslogd_flags="-ss"' >> /etc/rc.confnamed ip v4 only
ks34581# echo 'named_flags="-4"' >> /etc/rc.confnamed sur interface privée
ks34581# grep 172.16.0.254 /etc/named/named.conf
listen-on { 127.0.0.1; 172.16.0.254; };
Sauvegarde
Pour l'instant, un simple backup ftp fera l'affaire. Je commence par automatiser l'accès au backup:ks34581# cat >> /root/.netrc machine backup loginUn script sans prétention:password ^D ks34581# chmod 600 /root/.netrc ks34581# echo " backup" >> /etc/hosts`
ks34581# cat /root/bin/backup.sh #!/bin/sh set -- $(date "+%Y%m%d") TBZ=kimsufi-$1.tbz tar cjf $HOME/tmp/$TBZ -T $HOME/etc/backup.cfg 2>/dev/null cd $HOME/tmp echo "put $TBZ" | ftp -V backupUn fichier de configuration minimal:
ks34581# cat /root/etc/backup.cfg /etc/rc.conf /etc/ttys /etc/start_if.lo1 /etc/namedb/named.conf /root/.netrc /root/etc/backup.cfg /root/bin/backup.shTous les jours à 2h45 du matin:
ks34581# echo '45 2 * * * $HOME/bin/backup.sh' >> /root/.crontab ks34581# crontab .crontab ks34581# echo '/root/.crontab' >> /root/etc/backup.cfg
Courriel
Pour l'instant, l'installation de base de FreeBSD me permet d'envoyer des courriels. J'ajuste la configuration de sendmail pour que les jails puissent en profiter. Une jail smtp est prévue pour plus tard.ks34581# cd /etc/mail ks34581# echo 'root:Pour pouvoir être utilisé par les jails, sendmail doit écouter sur 172.16.0.254:' >> aliases ks34581# make aliases
ks34581# sed -I'.orig' -e 's/^DS/DS[172.16.0.254]/' /etc/mail/submit.cf ks34581# echo 'sendmail_submit_flags="-L sm-mta -bd -q30m -ODaemonPortOptions=Addr=172.16.0.254"' >> /etc/rc.conf ks34581# echo '/etc/mail/submit.cf' >> $HOME/etc/backup.cfgIl doit aussi accepter de relayer les jails:
ks34581# cat /etc/mail/relay-domains ks34581.kimsufi.com localhost 127.0.0.1 .mondomaine.tld ks34581# make restart ks34581# echo '/etc/mail/relay-domains' >> /root/etc/backup.cfg
Pf
Les jails seront sur le réseau 172.16.0.x, interface lo1. Pour accèder à ces jails du NAT s'impose:ks34581# echo 'pf_enable="YES"' >> /etc/rc.conf ks34581# echo 'pflog_enable="YES"' >> /etc/rc.confUn (trop) simple /etc/pf.conf:
ext_if="vr0"
int_if="lo1"
set block-policy return
set loginterface $ext_if
set skip on lo0
scrub in
nat on $ext_if from !($ext_if) -> ($ext_if:0)
block log on $ext_if
antispoof quick for { lo0 $int_if }
pass in on $ext_if inet proto tcp from any to ($ext_if) port ssh
pass quick on $int_if
pass out on $ext_if
Seul le ssh du kimsufi est accessible. Je rajouterai les règles rdr et pass au fur et à mesure. Je
croise les doigts (un pf.conf qui bloque est si vite arrivé :) et hop:
ks34581# pfctl -n -f /etc/pf.conf ks34581# /etc/rc.d/pf start ks34581# echo '/etc/pf.conf' >> /root/etc/backup.cfg
Jail et Zfs
J'utilise Zfs pour définir les partitions de mes jails. N'ayant qu'une seule partition physique à ma disposition, je ne peux pas utiliser les fonctions mirror, raid, raidz ... Je ne compte que sur mes backup !ks34581# umount /home ks34581# cat /etc/fstab # Device Mountpoint FStype Options Dump Pass# /dev/ad4s1a / ufs rw 1 1 #/dev/ad4s1b /home ufs rw 2 2 /dev/ad4s1d swap swap sw 0 0 proc /proc procfs rw 0 0 ks34581# zpool create zfs /dev/ad4s1b ks34581# zfs create zfs/jailJ'active les jails. jail_list est volontairement vide afin de ne pas démarer automatiquement une jail tant qu'elle n'est pas validée (un reboot du serveur est si vite arrivé :)
ks34581# cat >>/etc/rc.conf jail_enable="YES" jail_list="" jail_set_hostname_allow="NO" # pour postgresql et symon jail_sysvipc_allow="YES" ^DUn script pour simplifier l'installation d'une jail:
ks34581# cat /root/bin/mk_jail.sh
1 #!/bin/sh
2
3 JROOT=zfs/jail
4 FTP=ftp://ftp.fr.freebsd.org/pub/FreeBSD
5 CFG=$HOME/tmp/sysinstall.cfg
6 IFNAME=lo1
7
8 NAME=$1
9 SIZE=$2
10 HOSTNAME=$3
11 IP=$4
12
13 zfs create -o quota=${SIZE}M $JROOT/$NAME
14 zfs create -o quota=512M $JROOT/$NAME/tmp
15 zfs create -o quota=512M $JROOT/$NAME/var
16
17 cat <$CFG
18 installRoot=/$JROOT/$NAME
19 _ftpPath=$FTP
20 mediaSetFTP
21 dists=base
22 distSetCustom
23 installCommit
24 EOF
25
26 sysinstall configFile=$CFG loadConfig
27
28 cat <> /etc/rc.conf
29 jail_${NAME}_rootdir=/$JROOT/$NAME
30 jail_${NAME}_hostname=$HOSTNAME
31 jail_${NAME}_ip=$IP
32 jail_${NAME}_interface=$IFNAME
33 jail_${NAME}_devfs_enable="YES"
34 jail_${NAME}_devfs_ruleset="devfsrules_jail"
35 EOF
36
37 echo "$IP $HOSTNAME" >> /etc/hosts
38
39 cat < /$JROOT/$NAME/etc/rc.conf
40 sshd_enable="YES"
41 sshd_flags="-o ListenAddress=$IP"
42 syslogd_flags="-ss"
43 sendmail_enable="NONE"
44 EOF
45
46 cat <> /$JROOT/$NAME/etc/hosts
47 $IP $HOSTNAME
48 213.251.173.2 backup
49 172.16.0.254 kimsufi.mondomaine.tld
50 EOF
51
52 cat < /$JROOT/$NAME/etc/resolv.conf
53 nameserver 172.16.0.254
54 EOF
55
56 sed -I'.orig' -e 's/^DS/DS[172.16.0.254]/' /$JROOT/$NAME/etc/mail/submit.cf
57
58 cp /etc/localtime /$JROOT/$NAME/etc
- lignes 3-6: quelques variables
- lignes 8-11: configuration de la jail
- lignes 13-15: création des partitions
- lignes 17-24: je scripte l'utilisation de sysinstall pour l'installation d'un système de base.
- ligne 26: installation du système de base
- lignes 28-35: configuration du démarrage de la jail côté serveur
- ligne 37: en attendant de configurer le named du serveur
- lignes 39-44: services lancés au démarrage de la jail
- lignes 46-50: configuration réseau de la jail
- lignes 52-54: utilisation du named du serveur
- ligne 56: le sendmail de la jail va utiliser le sendmail du serveur
- ligne 58: heure locale
ks34581# /root/bin/mk_jail.sh toto 4096 toto.mondomaine.tld 172.16.0.1
Je vérifie que tout se passe bien à coup de:
- jls
- jexec <id> /bin/tcsh
- ps
- sockstat -4
- tail /var/log/messages
ks34581# grep jail_list /etc/rc.conf jail_list="toto"Si toto.mondomaine.tld pointe bien vers l'adresse publique du serveur, il ne reste plus que la configuration de pf: ks34581# cat /etc/pf.conf
[ snip ] rdr pass on $ext_if proto tcp to port 65080 -> 172.16.0.1 port ssh rdr pass on $ext_if proto tcp to port http -> 172.16.0.1 port http pass quick on $ext_if inet proto tcp from any to 172.16.0.1 port ssh pass quick on $ext_if inet proto tcp from any to 172.16.0.1 port http [ snip ]
Ici la jail ayant pour ip 172.16.0.1 fait tourner un serveur web et son serveur ssh est accessible depuis ip.publique.du.kimsufi port 65080
A faire
- jouer avec named et les views (publique / jail)
- jail lighttpd + symon
- jail postgresql
- jail smtp+dspam
- jail dev
- limiter la taille des billet :)
- poufiner la conf de nanoblogger
![Validate my Atom 1.0 feed [Valid Atom 1.0]](/valid-atom.png)
![Validate my RSS feed [Valid RSS]](/valid-rss-rogers.png)