Partage connexion
Un article de Linuxette.
De temps en temps, j'ai besoin de connecter un ordinateur à l'Internet, via mon portable. J'utilise donc, sur celui-ci, un script pour faire un partage de connexion. A lancer sous root, bien sur.
#!/bin/sh
IPTABLES=/sbin/iptables
# définition de l'interface ayant la connexion vers l'Internet:
EXT_HARD="eth1"
# interface pour le réseau local (du portable vers la machine à connecter au Net):
LAN_HARD="eth0"
# adresse du réseau entre le portable et la machine à connecter au Net:
LAN_NETWORK="192.168.5.0/255.255.255.0"
pf_init() {
#### Initialisations
# Initialisation de la table FILTER
$IPTABLES -t filter -F
$IPTABLES -t filter -X
$IPTABLES -t filter -P INPUT DROP
$IPTABLES -t filter -P OUTPUT DROP
$IPTABLES -t filter -P FORWARD DROP
# Initialisation de la table NAT
$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
# Initialisation de la table MANGLE
$IPTABLES -t mangle -F
$IPTABLES -t mangle -X
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P INPUT ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -t mangle -P FORWARD ACCEPT
$IPTABLES -t mangle -P POSTROUTING ACCEPT
# Jusqu'ici, rien ne passe, dans aucun sens
# on autorise la boucle locale
$IPTABLES -t filter -A OUTPUT -o lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
$IPTABLES -t filter -A INPUT -i lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
}
pf_start() {
# on autorise tout le trafic pour le reseau local vers l'Internet
$IPTABLES -t filter -A OUTPUT -o $LAN_HARD -s $LAN_NETWORK -d $LAN_NETWORK -j ACCEPT
$IPTABLES -t filter -A INPUT -i $LAN_HARD -s $LAN_NETWORK -d $LAN_NETWORK -j ACCEPT
# on autorise tout le trafic pour le reseau local vers le serveur
$IPTABLES -A INPUT -i $LAN_HARD -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_HARD -j ACCEPT
$IPTABLES -A FORWARD -i $LAN_HARD -j ACCEPT
$IPTABLES -A FORWARD -o $LAN_HARD -j ACCEPT
#----------------------------------------------
# on autorise les connexions avec internet uniquement si elles sont initialisees par les process locaux
$IPTABLES -t filter -A OUTPUT -o $EXT_HARD -s 0.0.0.0/0 -d 0.0.0.0/0 -p all -m state --state ! INVALID -j ACCEPT
$IPTABLES -t filter -A INPUT -i $EXT_HARD -s 0.0.0.0/0 -d 0.0.0.0/0 -p all -m state --state RELATED,ESTABLISHED -j ACCEPT
# on autorise le connexions venant du reseau local vers le net
$IPTABLES -t filter -A FORWARD -i $LAN_HARD -o $EXT_HARD -s $LAN_NETWORK -d 0.0.0.0/0 -m state --state ! INVALID -j ACCEPT
$IPTABLES -t filter -A FORWARD -i $EXT_HARD -o $LAN_HARD -s 0.0.0.0/0 -d $LAN_NETWORK -m state --state ESTABLISHED,RELATED -j ACCEPT
# Et on masque les adresses du reseau local par celle de la "machine pare-feu"
$IPTABLES -t nat -A POSTROUTING -o $EXT_HARD -s $LAN_NETWORK -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
# Autorisation de connexion ssh sur la machine
/sbin/iptables -A INPUT -p tcp --dport 22 -i eth0 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --sport 22 -o eth0 -j ACCEPT
}
# --------------------------------------------
#
pf_restart() {
pf_init
sleep 2
pf_start
}
pf_status() {
$IPTABLES -L -v -t filter
$IPTABLES -L -v -t nat
$IPTABLES -L -v -t mangle
$IPTABLES -t nat -L PREROUTING
$IPTABLES -L FORWARD
}
# fin des fonctions, debut du script
case "$1" in
'start')
pf_start
;;
'stop')
pf_init
;;
'restart')
pf_restart
;;
'status')
pf_status
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
esac

