Iptables j'en ai marre!


#1

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
  1. Je ne suis pas certain que mon script sois bien sécurisé!
  2. Le proxy en transparent fonctionne pas, j’y comprend pas grand chose!
  3. 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.


#2

Déjà, pour ton probléme de proy transparent, il te manque une régle pour que ton serveur accepte les paquets que tu as redirigé :

iptables -A INPUT --proto tcp --dport $PROXYP -i ! $EXTERNE -j ACCEPT

Ou une rêgle dans le genre.
Pour ton port forwarding, je sais pas trop, mais de toute façon tu ne pourras pas avoir des redirections différentes selon le nom de domaine si les deu noms renvoient la même IP.
Et j’aimerais bien savoir à quoi servent tes rêgles de FORWARD? N’est ce pas plutôt des rêgles d’INPUT qu’il te faudrait?


#3

[quote]# Configuration des interfaces
EXTERNE="ppp0"
INTERNE1=“eth1” # Parents
INTERNE2=“eth2” # Régis [/quote]
La premiere carte réseau ne devrait elle pas s’appeller “Eth0” et la seconde “Eth1” ?


#4

D’accord, mais on peut mettre plusieur nom de domaine sur paache avec une seule addresse ip, je ne vois pas pourquoi sa ne fonctionnerai pas avec le port forwarding…

[quote=“BobX”]
Et j’aimerais bien savoir à quoi servent tes rêgles de FORWARD? N’est ce pas plutôt des rêgles d’INPUT qu’il te faudrait?[/quote]
Oui en effet, je vient de m’apercevoir après une nuit de sommeil que j’aurais du mettre INPUT au lieu de FORWARD! :wink:

Merci :d


#5

[quote=“fabrozor”][quote]# Configuration des interfaces
EXTERNE="ppp0"
INTERNE1=“eth1” # Parents
INTERNE2=“eth2” # Régis [/quote]
La premiere carte réseau ne devrait elle pas s’appeller “Eth0” et la seconde “Eth1” ?[/quote]

J’ai 3 interfaces réseau, par défault ma sarge à reconnu la eth1, puis j’ai ensuite mis mon réseau sur la eth2. Et d’ici quelque jour mon eth0 sera pour internet.


#6

[quote=“paflechien”][quote=“BobX”]
Pour ton port forwarding, je sais pas trop, mais de toute façon tu ne pourras pas avoir des redirections différentes selon le nom de domaine si les deu noms renvoient la même IP.
[/quote]

D’accord, mais on peut mettre plusieur nom de domaine sur paache avec une seule addresse ip, je ne vois pas pourquoi sa ne fonctionnerai pas avec le port forwarding…
[/quote]

Tout simplement parce que ça n’a rien à voir. Iptables ne voit que les infos de couche 3 et 4, c’est à dire IP et TCP/UDP.
Pour les virtualhosts, apache utilise des infos des couches supérieures, et qui sont inclues dans le protocole http, donc invisibles pour iptables. Il n’y a d’ailleurs que les serveurs web qui sont capables de tenir compte du nom de domaine par lequel ils ont été appelés.


#7

Humm d’accord.

Bon, ben je vais y réfléchir. Sinon le script semble fiable?