Règles de firewall pour un accès public Apache [RÉSOLU]

Bonjour à tous,

Je rencontre un souci au niveau de l’accès à mon serveur Web depuis un poste distant.

Mon pare-feu et ce serveur Web sont sur la même machine.

ppp0 => Modem

eth1 => subnet 192.168.0.0

eth2 => subnet 192.168.1.0

Mes règles actuelles:

modprobe ip_tables
modprobe ip_nat_ftp
modprobe ip_nat_irc
modprobe iptable_filter
modprobe iptable_nat

iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP

# AUTH LOCAL ALL

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# EXT HTTP

iptables -A OUTPUT -o ppp0 -m state --state NEW,ESTABLISHED -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i ppp0 -m state --state ESTABLISHED -p tcp --sport 80 -j ACCEPT

# FORWARD HTTP

iptables -A FORWARD -i eth2 -o ppp0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A FORWARD -o eth2 -i ppp0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

# APACHE LOCAL

iptables -A INPUT -i eth2 -p tcp -s 192.168.1.0/24 --sport 1024:65535 -d 192.168.0.0/24 --dport 80 -j ACCEPT
iptables -A OUTPUT -o eth2 -p tcp -s 192.168.0.0/24 --sport 80 -d 192.168.1.0/24 --dport 1024:65535 -j ACCEPT

# APACHE WAN

iptables -t nat -A PREROUTING -d $WAN_IP -p tcp --dport 80 -j DNAT --to-destination 192.168.0.1:80
iptables -A FORWARD -i ppp0 -o eth1 -p tcp --destination-port 80 -j ACCEPT
iptables -A FORWARD -o ppp0 -i eth1 -p tcp --source-port 80 -j ACCEPT

# MASQUERADING

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

# DROP

iptables -A INPUT -j LOG --log-prefix '[FW_DROP]'

# KERNEL FORWARD

echo 1 > /proc/sys/net/ipv4/ip_forward[/code]

Lorsque je fais un requête Web d'un poste distant, on voit bien que netfilter intercepte:

[code]Jul 26 15:40:33 osiris kernel: [15326.486246] [FW_DROP]IN=ppp0 OUT= MAC= SRC=y.y.y.y DST=192.168.0.1 LEN=48 TOS=0x00 PREC=0x00 TTL=123 ID=19183 DF PROTO=TCP SPT=1072 DPT=80 WINDOW=16384 RES=0x00 SYN URGP=0

Je vous remercie d’avance pour vos suggestions. Pour information, mon Apache répond très bien aux requêtes des postes sur mon LAN.

Ben ça, c’est comme tu as décidé de le configurer, et je ne vois pas immédiatement ce qui peut clocher, mais en regardant ce que ça produit au final comme config, avec le resultat d’iptables-save, je verrais peut être mieux ?

Sinon, pourquoi tu forwardes les clients http wan vers 192.168.0.1:0 si c’est sur le même serveur ?
Tu es sur q
Ca ne serait pas plus simple de faire écouter le serveur sur toutes les interfaces, et autoriser juste l’input en 80 partout ?
Si c’est parceque l’adresse 192.168.0.1 est destinée à être donnée à un futur webserver autonome plus tard, autant attendre plus tard pour ajuster la config en faisant le forwarding seulement à ce moment là, non ?

[edit:]ayé, j’ai trouvé !
tu n’a pas autorisé le forward vers eth2 (ou se trouve si j’ai bien compris 192.168.0.1), mais vers eth1…
Mais mes remarques sont quand même valables.

Voici le résultat d’iptables-save:

[code]# Generated by iptables-save v1.3.6 on Sat Jul 26 16:46:26 2008
*nat
:PREROUTING ACCEPT [253:16887]
:POSTROUTING ACCEPT [10:635]
:OUTPUT ACCEPT [117:13963]
-A PREROUTING -d 42.42.42.42 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.1:80
-A POSTROUTING -s 192.168.1.0/255.255.255.0 -j MASQUERADE
-A POSTROUTING -s 192.168.0.0/255.255.255.0 -j MASQUERADE
-A POSTROUTING -o ppp0 -j MASQUERADE
COMMIT

Completed on Sat Jul 26 16:46:26 2008

Generated by iptables-save v1.3.6 on Sat Jul 26 16:46:26 2008

*filter
:INPUT DROP [1:40]
:FORWARD ACCEPT [276:49613]
:OUTPUT DROP [6:552]
-A INPUT -i lo -j ACCEPT
-A INPUT -i ppp0 -p tcp -m state --state ESTABLISHED -m tcp --sport 80 -j ACCEPT
-A INPUT -s 192.168.1.0/255.255.255.0 -d 192.168.0.0/255.255.255.0 -i eth2 -p tcp -m tcp --sport 1024:65535 --dport 80 -j ACCEPT
-A INPUT -j LOG --log-prefix “[FW_DROP]”
-A FORWARD -i eth2 -o ppp0 -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A FORWARD -i ppp0 -o eth2 -p tcp -m tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
-A FORWARD -i ppp0 -o eth1 -p tcp -m tcp --dport 80 -j ACCEPT
-A FORWARD -i eth1 -o ppp0 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o ppp0 -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 80 -j ACCEPT
-A OUTPUT -s 192.168.0.0/255.255.255.0 -d 192.168.1.0/255.255.255.0 -o eth2 -p tcp -m tcp --sport 80 --dport 1024:65535 -j ACCEPT
COMMIT

Completed on Sat Jul 26 16:46:26 2008

Generated by iptables-save v1.3.6 on Sat Jul 26 16:46:26 2008

*mangle
:PREROUTING ACCEPT [14737:9357048]
:INPUT ACCEPT [12143:8412713]
:FORWARD ACCEPT [2524:839335]
:OUTPUT ACCEPT [9923:1254940]
:POSTROUTING ACCEPT [12450:2063740]
-A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu
COMMIT

Completed on Sat Jul 26 16:46:26 2008

[/code]

42.42.42.42 est bien entendu une IP publique fictive.

Non, eth2 c’est 192.168.1.1 (cf lignes du haut de mon premier post) En ce qui concerne le forward sur la même machine, j’ai voulu l’affecter spécifiquement là dessus, en attendant comme tu dis un hypothétique Apache autonome. Cela ferait une grande différence en changeant cette cible?

Tu devrais accepter le forward des RELATED là ou il y a des ESTABLISHED: en plus du flux ftp-data qui répond en RELATED à une communication ESTABLISHED qui se fait par le port ftp, il y a aussi les paquets ICMP d’erreur en retour qui ne sont pas en ESTABLISHED.

Bon, je n’ai plus l’ordre de passage dans les chaines, mais le paquet venant de l’exterieur vers l’adresse 42.42.42.42:80 n’a peut être pas encore été naté vers le lan au moment de la chaine filter/INPUT, non ?
Donc en acceptant juste ce qui vient vers le 42.42.42.42:80 au lieu de ce qui va vers le lan dans le filter/INPUT, ça marcherait p.e. mieux ?

Je n’ai pas intégralement compris le dernier point. Par quelle règle iptables se matérialiserait ce que tu me conseilles? Cela me serait plus parlant pour comprendre ce qui n’a pas été si cela règle le problème.

Merci à toi :slightly_smiling:

Bon, je ne sais plus du tout ce que je voulais dire, parceque je ne vois pas de trace d’une règle autorisant le filter/INPUT par adresse pour ce qui va vers le lan. :unamused:

Par contre, il me semble (une troisiême fois :mrgreen: ) avoir trouvé:
je crois que tu a un peu trop limité ce que tu acceptes en filter/INPUT, qui ne permet pas à un client d’initier une connection http vers ton serveur. En plus de: iptables -A INPUT -i ppp0 -m state --state ESTABLISHED -p tcp --sport 80 -j ACCEPT il faudrait ajouter me semble t il: iptables -A INPUT -i ppp0 -m state --state [u]NEW,[/u]ESTABLISHED -p tcp --[u]d[/u]port 80 -j ACCEPT

Ou alors, refaire la même chose que pour ce qui vient d’eth2 en ajoutant les deux lignes:

iptables -A INPUT -i ppp0 -p tcp --sport 1024:65535 -d 192.168.0.1/32 --dport 80 -j ACCEPT iptables -A OUTPUT -o ppp0 -p tcp -s 192.168.0.1/32 --sport 80 --dport 1024:65535 -j ACCEPT Notes que j’ai conservé ta restriction aux ports non privilégiés: si c’est suffisant de limiter à ça pour eth2, autant restreindre aussi pour ce qui arrive par ppp0.
[edit:]Notes aussi que j’ai limité l’autorisation à 192.168.0.1/32, parcequ’il n’y a pas de raison qu’ils essayent de l’exterieur d’atteindre autre chose sur la même frange.

Alors là je te remercie énormément car ça m’a permis de comprendre ce que j’avais omis de faire. Effectivement, c’était parfaitement logique. J’aurai dû voir ça rapidement. Les vacances vont me faire du bien.

Très bon week-end à toi :wink:

Merci toi aussi.
Sinon, si tu as le temps: viewtopic.php?f=3&t=14665

Sorry, je fais ça tout de suite :slightly_smiling: