Partager sa connexion internet ADSL avec OpenBSD et protéger l

Transcription

Partager sa connexion internet ADSL avec OpenBSD et protéger l
Partager sa connexion internet ADSL avec OpenBSD et protéger l'accès
en Wifi avec Authpf
Tout est dans le titre, cette doc devrait vous permettre de protéger vos
ordinateurs d'internet, de contrôler l'accès des clients Wifi, et de
séparer votre Lan privé du Wlan (Wireless lan ou réseau wifi).
Cette doc fonctionne avec OpenBSD 3,3 voir 3,4.
Pré requis: savoir installer OpenBSD et manipuler l'éditeur Vi.
1) Le réseau avec tout d'
abord un shéma:
Nous avons donc 3 interfaces sur la machine, rl0, rl1, rl2.
rl0 est l'interface relié au modem ethernet, elle est juste active donc
paramétré comme suit dans le fichier /etc/hostname.rl0 :
up
rl1 est l'interface relié au LAN, son adresse ip est 192.168.0.1, le LAN
étant le réseau 192.168.0.*, le fichier /etc/hostname.rl1:
inet 192.168.0.1 255.255.255.0 NONE
rl2 est l'interface relié au Wlan, son adresse ip est 192.168.1.1, le
Wlan étant le réseau 192.168.1.*, le fichier /etc/hostname.rl2 :
inet 192.168.0.1 255.255.255.0 NONE
2) La configuration de la connexion au net:
Le fichier de configuration du compte adsl (protocole pppoe) ppp.conf
dans /etc/ppp se présente comme suit:
default:
set log Phase Chat LCP IPCP CCP tun command
set redial 15 0
set reconnect 15 10000
pppoe:
set device "!/usr/sbin/pppoe -i rl0"
disable acfcomp protocomp
deny acfcomp
set mtu max 1492
set speed sync
enable lqr
set lqrperiod 5
set cd 5
set dial
set login
set timeout 0
set authname Monlogin
set authke Monpass
enable dns
enable mssfixup
Noter bien qu'il faut remplacer Monlogin par le votre, idem pour le pass,
et dans le set device:
rl0 correspond à notre interface relié au modem ethernet si votre
interface se nomme autrement
à vous de changer cette ligne.
Quand la connexion se met en route ppp.linkup s'éxécute , voici le
contenu de ce fichier
(dans /etc/ppp/):
MYADDR:
! sh -c "/sbin/route del default"
! sh -c "/sbin/route add default HISADDR -mtu 1492"
! sh -c "/sbin/pfctl -f /etc/pf.conf -e"
# ! sh -c "/usr/local/sbin/ntpd -p /var/run/ntpd.pid"
Quand la connexion s'arrète ppp.linkdown s'éxécute, voici le contenu de
ce fichier (dans /etc/ppp/):
MYADDR:
! sh -c "/sbin/pfctl -d"
On verra plus tard qu'en fait on active et on désactive dans ces fichiers
le firewall pf, en utilisant la commande pfctl.
3) Lancement de la connexion:
Ajouter ceci dans /etc/netstart:
echo -n "Trying to establish PPPoE DSL"; ppp -ddial pppoe
for i in 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0; do
sleep 5
echo -n.$i"
if /usr/local/sbin/adsl-status>/dev/null; then
break
fi
done
echo
/usr/local/sbin/adsl-status
Qui lance donc le script adsl-status à mettre dans /usr/local/sbin/ avec
le droit d'éxécution, voici ce que contient adsl-status:
#!/bin/sh
IP=$(/sbin/ifconfig tun0 | awk '/netmask/{print $2}')
if [ -z "$IP" ]; then
echo "ADSL link is down."
exit 1
else
echo "ADSL is up, IP address $IP"
exit 0
fi
4) Le parefeu ou firewall:
Il faut tout d'abord activer le forwarding (transfert) pour faire
fonctionner le parefeu, pour cela décommenter la ligne:
net.inet.ip.forwarding=1
dans le fichier /etc/sysctl.conf.(c'est à dire enlever le petit # au
début de la ligne).
Puis paramétré votre fichier de configuration du firewall comme suit,
pf.conf dans /etc:
(j'ai volontairement enlever des parties inutiles pour la compréhension à
vous d'incorporer ces lignes dans votre pf.conf)
#
$OpenBSD: pf.conf,v 1.19 2003/03/24 01:47:28 ian Exp $
#
# See pf.conf(5) and /usr/share/pf for syntax and examples.
# Required order: options, normalization, queueing, translation, filtering.
# Macros and tables may be defined and used anywhere.
# Note that translation rules are first match while filter rules are last match.
# Macros: je déclare mes interfaces et mes réseaux.
ext_if="tun0"
int_if="rl1"
int_if2="rl2"
internal_net="192.168.0.1/24"
internal_net2="192.168.1.1/24"
# Normalization: je normalise.
scrub in all
# Translation: je fais du NAT, network adress translation, obligatoire !!
nat on $ext_if from $internal_net to any -> ($ext_if)
nat on $ext_if from $internal_net2 to any -> ($ext_if)
# Filtering: filrage implicite.
pass in all
pass out all
#smtp local....pas forcément utile...
pass in quick on lo0 all
pass out quick on lo0 all
# bloque certains paquets et laisser passer pour me connecter en ssh de l'extérieur
#et sur l'interface du wlan pour authpf.
block in log all
pass in on $ext_if proto tcp from any to any port 22 keep state
pass out on $ext_if proto { tcp, udp, icmp } all keep state
pass in on $int_if proto { tcp, udp, icmp } all keep state
pass in on $int_if2 proto tcp from $internal_net2 to $int_if2 port 22 keep state
#je déclare authpf sur l'interface du wlan
anchor authpf in on $int_if2
Maintenant pour lancer le parefeu pf au démarrage éditer /etc/rc.conf et
mettre YES à la ligne adéquate:
pf=YES
# Packet filter / NAT
Quelques commandes utiles:
Pour couper le parefeu,
pftcl -d
Pour le relancer en suivant les règles de /etc/pf.conf,
pfctl -e -f /etc/pf.conf
5) Et voilà enfin authpf:
La définition que j'avais donné pour l'ebook:
http://www.nantes-wireless.org/pages/wiki/index.php/Authpf
« Qu'est ce que Authpf?
C'est une application qui tourne sur le système OpenBSD
(www.openbsd.org), authpf est donc le diminutif de authentification + pf,
pf étant le Firewall d'OpenBSD.
Quel est son utilité ?
Toute personne qui se logge et s'authentifie avec SSH, le système
détermine des règles de Firewall personnalisées à cette utilisateur
connecté , tout ceci grâce à Authpf. Ce qui veut dire que par la gestion
d'Authpf nous pouvons par exemple interdire ou autoriser un utilisateur à
surfer si OpenBSD et Authpf sont sur la passerelle. C'est une sorte de
gestion dynamique du Firewall, c'est donc un moyen efficace de sécuriser
sa passerelle sans fil relié à Internet Ou tout autre réseau. »
La page du manuel relative d'authpf pour tout aprofondissement:
http://www.openbsd.org/cgibin/man.cgi?query=authpf&apropos=0&sektion=0&manpath=OpenBSD+Current&arch
=i386&format=html
Tout d'abord pour sécuriser un peu plus, éditer votre /
etc/ssh/sshd_config pour y faire apparaître ces paramêtres:
Protocol 2
ClientAliveInterval 15
ClientAliveCountMax 3
Maintenant éditer authpf.rules dans /etc/autphf pour les règles
spécifiques du parefeu pour les utilisateurs connectés, par défaut on
bloque tout sauf ssh dans pf.conf sur l'interface du réseau wifi, une
fois connecté c'est les règles d'authpf.rules qui comptent.
ext_if="tun0"
int_if="rl1"
int_if2="rl2"
internal_net="192.168.0.1/24"
internal_net2="192.168.1.1/24"
pass in on $int_if2 proto { tcp, udp, icmp } from $user_ip keep state
Voilà il ne reste plus qu'a déclarer authpf comme shell, créer les
utilisateurs et les autorisés.
On rajoute le shell dans /etc/shells:
#
$OpenBSD: shells,v 1.5 1997/05/28 21:42:20 deraadt Exp $
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.
/bin/sh
/bin/csh
/bin/ksh
/usr/bin/false
/usr/sbin/authpf
On creait un user avec la commande adduser, à la fin vous devez avoir une
proposition de ce style
avec comme shell authpf:
Name:
Password:
Fullname:
Uid:
Gid:
Groups:
HOME:
Shell:
OK? (y/n)
lisa
****
lisa
1005
1005 (lisa)
lisa
/home/lisa
/usr/sbin/authpf
[y]:
Autoriser lisa dans /etc/authpf/authpf.allow :
herbert
johnny
lisa
et faire un message «sympathique» de bienvenue dans
/etc/authpf/authpf.message :
***********************************************************
Hello
Bienvenue sur cette passerelle,
ne faites pas de bétises sous peine de privations ;-)
L'admin
**********************************************************
Si vous avez des remarques, si cette doc vous a été utile merci de
m'envoyer un petit mail à
[email protected]
Les liens pour aprofondir ou s'
aider:
Quelques fichiers de conf zippés:
http://earxtacy.free.fr/authpf.tar.gz
Comment se connecter en ssh sur la passerelle:
http://earxtacy.free.fr/comment-se-connecter.pdf
Un super site sur l'installation et la configuration d'OpenBSD, à lire
avant de se plaindre ;-) :
http://www.openbsd-edu.net/
La FAQ officiel sur pf:
http://www.openbsd.org/faq/pf/
et bien sur google est ton ami:
http://www.google.fr