Bonsoir,
Me revoilà encore avec iptables…
Voilà, j’ai ma passerelle, avec apache, et le serveur de mail dessus.
j’ai un deuxième serveur avec apache, serveur ftp, bref, ce qui faut pour héberger.
Puis deux lan, celui de mes parents, et le mien, un p’tit schéma pour voir un peu plus clair
ppp0 --> passerelle --> lan parents
|–> lan regis avec le deuxième serveur
Mon script iptables est celui ci:
#!/bin/sh
#
# /etc/init.d/iptables.sh
IPTABLES=/sbin/iptables
# Configuration des interfaces
EXTERNE="ppp0"
INTERNE1="eth1" # Parents
INTERNE2="eth2" # Régis
# Configuration des reseaux et des serveurs locaux
SUB1="192.168.20.0/24"
SUB2="192.168.77.0/24"
SERV1a="192.168.20.1" # Serveur01 eth2
SERV1b="192.168.77.1" # Serveur01 eth1
SERV2="192.168.77.2" # Serveur02
# Configuration proxy
PROXYP="8080" # Port du proxy
#-------------------- */ FIN DE CONFIGURATION */ --------------------#
start() {
# On efface les règles existantes
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
# Je bloque tout
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT
# Autorise le loopback
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
# Autorise les connexions établies et ceux du reseau interne
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -m state --state NEW -i ! $EXTERNE -j ACCEPT
$IPTABLES -A FORWARD -i $EXTERNE -o $INTERNE1 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $EXTERNE -o $INTERNE2 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Autorise le reseau interne a sortir sur le net
$IPTABLES -A FORWARD -i $INTERNE1 -o $EXTERNE -j ACCEPT
$IPTABLES -A FORWARD -i $INTERNE2 -o $EXTERNE -j ACCEPT
# Masquerade
$IPTABLES -t nat -A POSTROUTING -s $SUB1 -o $EXTERNE -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -s $SUB2 -o $EXTERNE -j MASQUERADE
# Proxy en transparence
$IPTABLES -A INPUT --proto tcp --dport $PROXYP -i ! $EXTERNE -j ACCEPT
$IPTABLES -t nat -A PREROUTING -i $INTERNE1 -p tcp --dport 80 -j DNAT --to-destination $SERV1a:$PROXYP
#$IPTABLES -t nat -A PREROUTING -i $INTERNE2 -p tcp --dport 80 -j DNAT --to-destination $SERV1b:$PROXYP
# Service autorises
$IPTABLES -A INPUT -p tcp -i $EXTERNE --dport 20 -j ACCEPT
$IPTABLES -A INPUT -p tcp -i $EXTERNE --dport 21 -j ACCEPT
$IPTABLES -A INPUT -p tcp -i $EXTERNE --sport 1024:65535 --dport 21 -j ACCEPT
$IPTABLES -A INPUT -p tcp -i $EXTERNE --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -i $EXTERNE --dport 25 -j ACCEPT
$IPTABLES -A INPUT -p tcp -i $EXTERNE --dport 53 -j ACCEPT
$IPTABLES -A INPUT -p udp -i $EXTERNE --dport 53 -j ACCEPT
$IPTABLES -A INPUT -p tcp -i $EXTERNE --dport 80 -j ACCEPT
$IPTABLES -A INPUT -p tcp -i $EXTERNE --dport 110 -j ACCEPT
$IPTABLES -A INPUT -p tcp -i $EXTERNE --dport 123 -j ACCEPT
$IPTABLES -A INPUT -p tcp -i $EXTERNE --dport 143 -j ACCEPT
$IPTABLES -A INPUT -p tcp -i $EXTERNE --dport 443 -j ACCEPT
$IPTABLES -A INPUT -p tcp -i $EXTERNE --dport 993 -j ACCEPT
$IPTABLES -A INPUT -p tcp -i $EXTERNE --dport 995 -j ACCEPT
# Ne route pas de l'exterieur vers le reseau interne
# A desactiver pour active le port forwarding
#$IPTABLES -A FORWARD -i $EXTERNE -o $EXTERNE -j REJECT
$IPTABLES -t nat -A PREROUTING -i $EXTERNE -p tcp --dport 22 -j DNAT --to-destination $SERV2:22
$IPTABLES -t nat -A PREROUTING -i $EXTERNE -p tcp --dport 80 -j DNAT --to-destination $SERV2:80
$IPTABLES -t nat -A PREROUTING -i $EXTERNE -p tcp --dport 443 -j DNAT --to-destination $SERV2:443
# J'autorise le ping pour 5 secondes
$IPTABLES -A INPUT -p icmp -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p icmp -m state --state NEW -m limit --limit 5/s -j ACCEPT
echo "1" > /proc/sys/net/ipv4/ip_forward # Activation du routage
echo "1" > /proc/sys/net/ipv4/conf/$INTERNE1/rp_filter # Pas de spoofing
echo "1" > /proc/sys/net/ipv4/conf/$INTERNE2/rp_filter # Pas de spoofing
echo "0" > /proc/sys/net/ipv4/conf/lo/rp_filter
echo "1" > /proc/sys/net/ipv4/tcp_syncookies # Pas de synflood
echo -e "\033[1;32m [Firewall ON] \033[0m\n"
}
stop() {
echo 0 >/proc/sys/net/ipv4/ip_forward
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
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
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
echo -e "\033[1;31m [Firewall OFF] \033[0m\n"
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop && start
;;
status)
iptables -v -L
iptables -v -L -t nat
iptables -t mangle -L
;;
*)
echo "Utilisation: /etc/init.d/iptables.sh {start|stop|restart|status}"
exit 1
esac
exit 0
- Je ne suis pas certain que mon script sois bien sécurisé!
- Le proxy en transparent fonctionne pas, j’y comprend pas grand chose!
- Le port forwarding n’a pas l’air de fonctionner, car à chaque fois que je tape nomdedomaine1.dyn.org
Avant je tournais avec des exemples que je modifias, mais j’ai décider de mettres les mains dans le camboui, sa fais un moment que je lis les docs, mais c’est trop complexe je trouve! Donc, je laisse place au experts si il peuvent m’aider.
Merci.