Tags

arm arpaname bin_sh blocage blosxom bsd bsdfrance cblog certification chroot cluster dg834 dhcp dns dnsmasq domU dovecot fail-over fail2ban firefox freebsd ftp git guruplug install ipv6 jail kernel kimsufi lex libre linutop makefile ml150 mohawk netbook netbsd nginx ntp ntp.org openbsd openntpd openrd openwrt orke pkgng poudriere proxy python rescue reverse rmll route rrdcgi sendmail sieve sl2009 ssd symon update usb var_empty vimperator world xen yacc zfs

Powered by

blOg
maRkdown
awK
shEll

31/03/2013

[ arpaname reverse ipv6 ]

201303311315 arpaname reverse ipv6

arpaname et la résolution de nom inverse

C'est à la lecture d'un article de sieur iMil 'master prosel NetBSD' himself, paru dans le Gnu Linux Magazine France n° 159 que j'ai découvert la commande arpaname. Faisant partie du projet Bind, livrée de base avec FreeBSD et NetBSD (les utilisateurs d'OpenBSD peuvent installer net/isc-bind), cette commande traduit une adresse ip en version arpa:

$ dig ipv6.l.google.com AAAA +short
2a00:1450:4007:804::1011
$ arpaname 2a00:1450:4007:804::1011
1.1.0.1.0.0.0.0.0.0.0.0.0.0.0.0.4.0.8.0.7.0.0.4.0.5.4.1.0.0.A.2.IP6.ARPA

Mais dites donc, ça ne ressemblerait pas aux enregistrements PTR des fichiers de résolution de nom inverse ipv6 ? Vous savez, les trucs super chiants où au mieux on oublie un zéro et au pire on le place mal ? Je ne sais pas si des outils existent pour faciliter la création de ces fichiers et je n'ai pas beaucoup cherché, je l'avoue :). Aussi je me suis fendu d'un petit script sans prétention que je vous livre :

 1	#!/bin/sh
 2	
 3	DEFAULT_DOMAIN=example.com
 4	LOWER=0
 5	NETMASK="/48"
 6	VERBOSE=0
 7	
 8	DEFAULT_HOSTS="www mail imap"
 9	SCRITP_NAME=$(basename $0)
10	
11	usage() {
12		echo "Usage: ${SCRITP_NAME} [-d domain.tld] [-l] [-n (/48 | /64)] [-v] [host | host.domain.tld ...] 
13	-d domain.tld   add domain.tld if needed
14	-l              lower form
15	-n /netmask     netmask (default /48)
16	-v              verbose mode
17	"
18	}
19	
20	ARPANAME=$(/usr/bin/which arpaname)
21	if [ $? -ne 0 ]; then
22		echo "Can't find arpaname"
23		exit 1
24	fi
25	
26	args=$(getopt d:ln:hv $*)
27	if [ $? -ne 0 ]; then
28		usage
29		exit 2
30	fi
31	
32	set -- $args
33	while [ $# -ge 0 ]; do
34		case "$1" in
35		-d)
36			DEFAULT_DOMAIN="$2"; shift; shift;;
37		-l)
38			LOWER=1; shift;;
39		-n)
40			NETMASK="$2"; shift; shift;;
41		-h)
42			usage; exit;;
43		-v)
44			VERBOSE=1; shift;;
45		--)
46			shift; break;;
47		esac
48	done
49	
50	LEN=
51	case "${NETMASK}" in
52	*48)
53		LEN=39; break;;
54	*64)
55		LEN=29; break;;
56	*)
57		echo "'${NETMASK}': invalid value"; usage; exit 1;;
58	esac
59	
60	for host in ${DEFAULT_HOSTS} $@; do
61	
62		case ${host} in
63		*.*.*) ;;
64		*)
65			host="${host}.${DEFAULT_DOMAIN}";;
66		esac
67	
68		IPV6=$(dig ${host} AAAA +short)
69		if [ "X${IPV6}" = "X" ]; then
70			echo ";Can't resolv '${host}'"
71			continue
72		fi
73	
74		if [ $VERBOSE -eq 1 ]; then
75			echo ";${host} ${IPV6}"
76		fi
77		IPV6=$(${ARPANAME} ${IPV6} | cut -c 1-${LEN})
78		if [ $LOWER -eq 1 ]; then
79			IPV6=$(echo ${IPV6} | tr '[A-Z]' '[a-z]')
80		fi
81		printf "%s\tIN\tPTR\t%s.\n\n" ${IPV6} ${host}
82	
83	done

Pour utiliser ce script, il faut:

Un exemple pour la route:

$ ./reverse_ipv6.sh -d google.com -n /64 ipv6.l
1.1.0.1.0.0.0.0.0.0.0.0.0.0.0   IN      PTR     ipv6.l.google.com.

$ .reverse_ipv6.sh -d google.com -n /48 -v ipv6.l blog.bsdsx.fr
;ipv6.l.google.com 2a00:1450:4007:803::1011
1.1.0.1.0.0.0.0.0.0.0.0.0.0.0.0.3.0.8.0 IN      PTR     ipv6.l.google.com.

;blog.bsdsx.fr 2a02:27d0:100:f205:a642::80
0.8.0.0.0.0.0.0.0.0.0.0.2.4.6.A.5.0.2.F IN      PTR     blog.bsdsx.fr.

Si vous avez des enregistrements AAAA dans vos fichiers de zone, plus d'excuse pour ne pas faire le reverse :)


Lien vers ce billet

28/03/2010

[ cblog chroot nginx reverse proxy ]

201003282136 cblog chroot nginx reverse proxy

cblog et chroot

Pour ceux qui ne connaissent pas, cblog est un moteur de blog écrit en C. J'y contribue un peu et je vais donc décrire comment je l'utilise.

Une fois les dépendances installées (clearsilver, fcgi-devkit et tinycdb), on peut récupérer cblog:

dsx@devel> git clone git://brokk.etoilebsd.net/CBlog.git
dsx@devel> cd CBlog
dsx@devel> make

On peut définir le chemin vers le fichier cblog.cdb:

dsx@devel> make CDB_PATH=/var/db

Pour vérifier ce chemin (utile pour le chroot):

dsx@devel> ./cli/cblogctl path
/var/db/cblog.cdb

Les chroot c'est bien mais il est très facile d'oublier un fichier. Pas de soucis ici:

dsx@devel> sudo ./chroot_cblog.sh

chroot_cblog.tgz contient tout ce qu'il nous faut. On ne peut pas utiliser Freebsd et zfs sans faire de jail. J'utilise pour ce faire deux petits scripts de ma composition:

root@kimsufi# ./mk_template medium
root@kimsufi# ./mk_template large
root@kimsufi# ./mk_jail medium proxy 'lo1|172.16.0.1'
root@kimsufi# ./mk_jail large blog 'lo1|172.16.0.2'

Une jail 'proxy' avec un nginx servira de reverse proxy tandis qu'une jail 'blog' fera tourner cblog dans un chroot.

Je commence par faire mon package 'nginx':

dsx@compil> cd /usr/ports/www/nginx-devel
dsx@compil> sudo make config
  [x] ipv6
  [x] http_module
  [x] http_cache_module
  [x] http_rewrite_module
  [x] http_ssl_module
  [x] www
dsx@compil> sudo make
dsx@compil> sudo make package

Je configure mon reverse proxy:

dsx@proxy> sudo pkg_add /tmp/nginx-devel-0.8.34.tbz
dsx@proxy> sudoedit /usr/local/etc/nginx/nginx.conf
[ snip ]
server {
    listen 80;
    server_name blog.bsdsx.fr;
    access_log off;
    location / {
        proxy_pass http://172.16.0.2/;
        proxy_set_header Host $host;
    }
}

Attention au access_log à off, c'est uniquement pour ne pas logguer plusieurs fois les requêtes. On passera à off une fois le reverse proxy correctement configuré (chemin, adresse ip...). Pour ceux qui se demande pourquoi un reverse proxy la réponse est simple: si je peux multiplier les jails, il n'en est pas de même avec mes ipv4. Tout le traffic http sur ipv4 arrive sur le reverse proxy qui dispatche vers la bonne jail (qui elle est accessible aussi en ipv6). De plus si un jour le besoin de cache se fait sentir, quelques directives proxy_cache_ et fastcgi_cache_ et le tour est joué.

Pour finir le gros morceau: la jail 'blog' avec son chroot.

root@blog# pkg_add -r spawn-fcgi
Fetching ftp://ftp.fr.freebsd.org/pub/FreeBSD/ports/amd64/packages-8.0-release/Latest/spawn-fcgi.tbz... Done.
root@blog# mkdir /usr/local/chroot/bsdsx
root@blog# tar xzvf /tmp/chroot_cblog.tgz -C /usr/local/chroot/bsdsx

Et c'est parti pour la lecture de chroot.txt.


Lien vers ce billet