Serveur web derrière iptables

salut!
j’ai un serveur web monté derrière un firewall iptables et squid3 transparent

internet–>routeur(192.168.0.1)–>eth1(192.168.0.2)firewall(eth0)(192.168.1.1)—>eth0(192.168.1.2)serveur web

comment le mettre accessible depuis internet

voici config routeur


et iptables

[code]
#!/bin/sh
INTERNET=eth1
LAN=eth0
INTERNET_IP=192.168.0.1
LAN_IP=192.168.1.2
LAN_NETWORK=192.168.1.0/24
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -s $LAN_NETWORK -j ACCEPT
iptables -A OUTPUT -d $LAN_NETWORK -j ACCEPT

On refuse certaines requetes

iptables -N SCANS
iptables -A SCANS -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP
iptables -A SCANS -p tcp --tcp-flags ALL ALL -j DROP
iptables -A SCANS -p tcp --tcp-flags ALL NONE -j DROP
iptables -A SCANS -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A INPUT -p udp --dport 33434:33523 -j DROP
iptables -A OUTPUT -p tcp --dport telnet -j DROP
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP

On autorise le PC a faire des pings sur des IP externes et à répondre aux requêtes “ping”

On autorise les pings

iptables -A OUTPUT -p icmp --icmp-type 8 -s $INTERNET_IP -d 0/0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 0 -s 0/0 -d $INTERNET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT

#Flood TCP&UDP
iptables -A INPUT -i $INTERNET -p tcp --syn -m limit --limit 3/s -j ACCEPT
iptables -A INPUT -i $INTERNET -p udp -m limit --limit 10/s -j ACCEPT
iptables -A INPUT -i $INTERNET -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -i $INTERNET -p icmp --icmp-type echo-reply -m limit --limit 1/s -j ACCEPT

On accepte la sortie de certains protocoles

iptables -A OUTPUT -o $INTERNET -p UDP --dport domain -j ACCEPT # Port 53 (DNS)
iptables -A OUTPUT -o $INTERNET -p TCP --dport domain -j ACCEPT # Port 53 (DNS)
iptables -A OUTPUT -o $INTERNET -p TCP --dport http -j ACCEPT # Port 80 (Http)
iptables -A OUTPUT -o $INTERNET -p TCP --dport https -j ACCEPT # Port 443 (Https)
iptables -A OUTPUT -o $INTERNET -p TCP --dport pop3 -j ACCEPT # Port 110 (Pop3)
iptables -A OUTPUT -o $INTERNET -p TCP --dport 993 -j ACCEPT # Port 993 (auth.SSL)
iptables -A OUTPUT -o $INTERNET -p TCP --dport 995 -j ACCEPT # Port 995 (auth.SSL)
iptables -A OUTPUT -o $INTERNET -p TCP --dport smtp -j ACCEPT # Port 25 (Smtp)
iptables -A OUTPUT -o $INTERNET -p TCP --dport ftp-data -j ACCEPT # Port 20 (Ftp Data)
iptables -A OUTPUT -o $INTERNET -p TCP --dport ftp -j ACCEPT # Port 21 (Ftp)
iptables -A OUTPUT -o $INTERNET -p TCP --dport 1863 -j ACCEPT #PORT 1863 (MSN)

On autorise les connexions deja etablies a entrer

iptables -A INPUT -i $INTERNET --match state --state ESTABLISHED,RELATED -j ACCEPT

Ignore ‘ICMP Redirects’ message

echo “0” > /proc/sys/net/ipv4/conf/all/accept_redirects

Ignore ‘ICMP Echo Request’ message

echo “1” > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo “1” > /proc/sys/net/ipv4/icmp_echo_ignore_all

Ignore ‘ICMP Bogus Response’ message

echo “1” > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

Interdire ‘Source Routing’

echo “0” > /proc/sys/net/ipv4/conf/all/accept_source_route

Surveiller ‘martians’ (adresse source falsifée ou non routable)

echo “1” > /proc/sys/net/ipv4/conf/all/log_martians

Se protéger de l’IP Spoofing bis

echo “1” > /proc/sys/net/ipv4/conf/all/rp_filter

Se protéger des attaques ‘SYN Flood’

echo “1” > /proc/sys/net/ipv4/tcp_syncookies

#forward
echo “1” > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
#squid
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

REJECT all other traffic

iptables -A INPUT -j LOG --log-prefix "iptables: "
iptables -A INPUT -j REJECT[/code]

Avis personnel : c’est mauvais. Très mauvais.

Pour répondre à la question,

iptables -t nat -A PREROUTING -i $INTERNET -p tcp --dport 80 -j DNAT --to 192.168.1.2 iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i $INTERNET -o $LAN -d 192.168.1.2 -p tcp --dport 80 -m state --state NEW -j ACCEPT

PascalHambourg
merci pour la réponse.

j’ai appliqué vos règle iptables mais ça ne marche pas

[b]ERROR

The requested URL could not be retrieved [/b]

est ce que la config du routeur est bonne

toute vos conseille sera le bienvenue

Oui, la configuration du routeur a l’air correcte.
Qu’est-ce qui renvoie ce message d’erreur ? Ce ne serait pas le proxy squid ?
Mes règles permettent l’accès au serveur depuis l’extérieur (ce qui était demandé), pas depuis le proxy du firewall.

Concernant le script, ce serait un peu long de détailler toutes les erreurs et incohérences. Peut-être plus tard quand j’aurai plus de temps.


ci dessus l’erreur lorsque j’accède au serveur web. même erreur si accé par IP

C’est bien un message de squid. Si c’est depuis un poste situé derrière le proxy-firewall, c’est normal. Visiblement la redirection du routeur ne fonctionne que depuis internet. Essayer d’ajouter la ligne suivante dans le fichier /etc/hosts du proxy-firewall.

route serveur web

destination passerelle genmask iface
192.168.1.0 0.0.0.0 255.255.255.0 eth0
0.0.0.0 192.168.1.1 0.0.0.0 eth0

route firewall

192.168.0.0 0.0.0.0 255.255.255.0 eth1
192.168.1.0 0 0 0 0 255.255.255.0 eth0
0.0.0.0 192.168.1.1 0.0.0.0 eth1

Tu es sûr de la dernière ligne (route par défaut du firewall) ? D’après ton schéma l’adresse de passerelle devrait être 192.168.0.1, l’adresse du routeur.

oui chez vrai
(faute de frappe)
la route par défaut est 192.168.0.1

( tout est accepté sur serveur web. )