Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
IPTABLES : apache non accessible
Envoyé par: oliveuh

Bonjour,

Je souhaite rendre accessible mon serveur Apache depuis internet. Cela fonctionne très bien à partir d'une machine sur le réseau local et cela fonctionne aussi depuis internet si je flush les règles IPTABLES de mon firewall.

Quelle règle dois-je ajouter pour rendre accessible mon serveur apache depuis internet ?

Pour information, je suis derrière un routeur qui semble faire son boulot puisque, lorsque je flush les règles IPTABLES, cela fonctionne.

Voilà à quoi ressemble mon script créant les règles de mon firewall :
#!/bin/sh

# Activation du forwarding
# C'est pas pour faire joli, on aura des règles
# de forward et il faut bien que les paquets
# traversent la machine, donc on met ce fichier à 1

echo 1 > /proc/sys/net/ipv4/ip_forward

# Alors la, on va appliquer quelques astuces
# pour empêcher les attaques de type spoofing
# et bloquer les réponses ICMP du firewall,
# comme ça c'est très propre. Attention, le
# fait de bloquer le trafic ICMP sur
# le firewall bloque les pings.

# Je veux pas de spoofing

if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]
then
  for filtre in /proc/sys/net/ipv4/conf/*/rp_filter
  do
    echo 1 > $filtre
  done
fi

# pas de icmp

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

# On va utiliser iptables. Si on l'a compilé en module
# dans le kernel, il faut charger le module ip_tables.

modprobe ip_tables

# on va charger quelques modules supplémentaires pour
# gérer la translation d'adresse, l'IRC et le FTP
# Tu me fait 4 pompes. Chef oui chef !

modprobe ip_nat_ftp
modprobe ip_nat_irc
modprobe iptable_filter
modprobe iptable_nat

# Pour faire bien, on va vider toutes les règles
# avant d'appliquer les nouvelles règles de firewall

iptables -F
iptables -X

# On va rajouter 2 nouvelles chaînes.
# Ceci permettra d'ajouter des nouvelles cibles qui
# auront la possibilité de loguer ce qui se passe.

# La on logue et on refuse le paquet,
# on rajoute un préfixe pour pouvoir
# s'y retrouver dans les logs
iptables -N LOG_DROP
iptables -A LOG_DROP -j LOG --log-prefix '[IPTABLES DROP] : '
iptables -A LOG_DROP -j DROP

# ici, on logue et on accepte le paquet,
# on rajoute un préfixe pour pouvoir
# s'y retrouver dans les logs
iptables -N LOG_ACCEPT
iptables -A LOG_ACCEPT -j LOG --log-prefix '[IPTABLES ACCEPT] : '
iptables -A LOG_ACCEPT -j ACCEPT

# On veut faire un firewall efficace,
# donc la politique a appliquer est de tout
# refuser par défaut et rajouter une a une
# les règles que l'on autorise.
# Bien sur, on a RTFM un peu et on a vu que
# l'option -P permet de définir
# la cible par défaut

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Pour éviter les problèmes, on va tout accepter sur
# la machine en local (interface lo).
# Je déconseille de retirer cette règle car
# ça pose pas mal de problèmes et ça peut
# faire perdre la main sur la machine

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

# Bon, la partie initialisation et préparation est
# terminée, passons aux choses sérieuses

#Pour accepter tout ce qui se passe sur le réseau local 192.168.0.0  :
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT

# Pour accepter les résolutions de nom (ie: le dns) :
iptables -A INPUT -i eth1 --protocol udp --source-port 53 -j ACCEPT
iptables -A OUTPUT -o eth1 --protocol udp --destination-port 53 -j ACCEPT
iptables -A INPUT -i eth1 --protocol tcp --source-port 53 -j ACCEPT
iptables -A OUTPUT -o eth1 --protocol tcp --destination-port 53 -j ACCEPT

# Pour accepter le traffic web :
iptables -A INPUT -i eth1 --protocol tcp --source-port 80 -m state --state ESTABLISHED -j LOG_ACCEPT
iptables -A OUTPUT -o eth1 --protocol tcp --destination-port 80 -m state --state NEW,ESTABLISHED -j LOG_ACCEPT

# Pour accepter le traffic https :
iptables -A INPUT -i eth1 --protocol tcp --source-port 443 -m state --state ESTABLISHED -j LOG_ACCEPT
iptables -A OUTPUT -o eth1 --protocol tcp --destination-port 443 -m state --state NEW,ESTABLISHED -j LOG_ACCEPT



# Toutes les règles qui n'ont pas passé les
# règles du firewall seront refusées et loguées...
# facile :

iptables -A FORWARD -j LOG_DROP
iptables -A INPUT -j LOG_DROP
iptables -A OUTPUT -j LOG_DROP

# Pour faire zoli
echo " [Termine]"
#
# c'est enfin fini

Par avance merci.
Oliv'

Poste le Sunday 4 March 2007 19:08:15
Répondre     Citer    
Re: IPTABLES : apache non accessible
Envoyé par: oliveuh

Ok, j'ai résolu mon problème. Finalement, j'ai utilisé le script suiavnt que j'ai adapté à mon besoin :
#!/bin/bash

#Un simple script permettant de spécifier des règles de filtrage
#Il doit bien sûr être adapté aux besoins spécifiques.
#En le lançant avec le paramètre stop, les règles sont supprimées.
#Sans paramètre les règles sont crées.

IF=ppp0

HIGH_PORTS="1024:65535"
FTP_CONTROL_PORT=21
FTP_DATA_PORT=20
SSH_PORTS=80
POP_IN_PORT=8080
POP_OUT_PORT=110
POP_OUT_IP=62.39.122.15
SMTP_IN_PORT=8181
SMTP_OUT_PORT=25
SMTP_OUT_IP=62.39.122.19
HTTP_PORTS=119

export PATH="/bin:/sbin:/usr/sbin"

#Modules necessaires
modprobe ip_tables
modprobe ip_conntrack
modprobe ip_conntrack_ftp

#Vide les regles
iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X

if [ "$1" = "stop" ]
then
    echo "Firewall arrêté"
    exit
fi

echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
for interface in /proc/sys/net/ipv4/conf/*/rp_filter
do
   echo "1" > ${interface}
done
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

#NAT
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $IF -j MASQUERADE

#Autorise les connexions de l'interieur
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#Chaine pour le blacklistage d'IP
iptables -N blacklist

#Cible pour le blacklistage
iptables -N bllogdeny
iptables -t filter -A bllogdeny -j LOG --log-prefix "blacklisted: "
iptables -t filter -A bllogdeny -j DROP

#Faire passer tout ce qui entre par cette chaine
iptables -t filter -A INPUT -j blacklist

#Autorise la connexion FTP
iptables -A INPUT -i $IF -p tcp --dport $FTP_CONTROL_PORT -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o $IF -p tcp --sport $FTP_CONTROL_PORT -m state --state ESTABLISHED -j ACCEPT

#FTP actif
iptables -A INPUT -i $IF -p tcp --dport $FTP_DATA_PORT -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o $IF -p tcp --sport $FTP_DATA_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT

#FTP passif
iptables -A INPUT -i $IF -p tcp --sport $HIGH_PORTS --dport $HIGH_PORTS -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o $IF -p tcp --sport $HIGH_PORTS --dport $HIGH_PORTS -m state --state ESTABLISHED -j ACCEPT

#Autorise SSH
iptables -t filter -A INPUT -p tcp --destination-port $SSH_PORTS -j ACCEPT

#Autorise HTTPD
iptables -t filter -A INPUT -p tcp --destination-port $HTTP_PORTS -j ACCEPT

#Interdire et loger tout le reste
iptables -N logdeny
iptables -t filter -A logdeny -j LOG --log-prefix "iptables: "
iptables -t filter -A logdeny -j DROP

#Autoriser tout ce qui vient de l'interface de boucle locale
iptables -t filter -A INPUT -i lo -j ACCEPT
#Autoriser tout ce qui vient de l'interface vmware
iptables -t filter -A INPUT -i vmnet1 -j ACCEPT
#Interdire le reste
iptables -t filter -A INPUT -m state --state NEW,INVALID -j logdeny

echo "Firewall demarré"

Source : [www.c-sait.net]

Poste le Sunday 4 March 2007 20:59:37
Répondre     Citer    
Re: IPTABLES : apache non accessible
Envoyé par: chromosome

Bon je vais quand meme te donner mes commentaires quand meme.
script 1 :
- J'aime pas trop activer l'ip_forward avant les regles de firewall
- Il te manque des modules importants comme ipconntrack_ftp
- Avec ta solution de faire une seule table avec tous les drop ca va pas etre evidement de savoir sur quoi ca a dropper INPUT OUTPUT ou FOrWARD ?
- Ta machine a visiblement 2 cartes reseau, donc pourquoi ne pas faire le controle sur l'interface plutot que 192.168.1.0/24.
- Du tcp 53 T'es sur ? udp ok, mais l'autre ???
- Et ton probleme dans le premier script est que tu autorises ton firewall a surfer, pas l'inverse. Tu as destination-port 80 sur l'output
- Et ici pas de NAT alors que tu actives ip_forward ? Je pense que dans ton cas il te manque un truc
- Dans ce cas de figure tu sors sur eth1, donc pas ppp0 ? franchement different du script 2.

script 2 :
- Ici tu fais du NAT mais pas de forwarding ???
- Suupppeerr tu crees une regle blacklist, mais elle ne fait rien !!!
- Alors ici la personne qui a fait le script ne sait visiblement pas a quoi sert le ip_conntrack_ftp qu'elle a mis plus haut. Car faire un regle sur ftp passif, puis ftp actif, ne pas mettre de RELATED dans une regle, ...
- Tous le monde a acces en ssh sur ton firewall, why not. (mais alors faudra me dire a quoi sert ton firewall dans ton cas, car tu ouvres ssh, ftp, http. tu as autre choses sur ta machine ?)
- Maintenant tu parles d'une interface VMWARE. Qui permet tout.
- Et la enfin le premier DROP, tu drop tout ce qui est NEW ou INVALID.

Je pense que ni l'un ni l'autre n'est bon. Pour ma part le deuxieme le mettre ou ne rien mettre reviens a la meme chose.

Bref je pense que tu devrais te faire tes propres regles, et donc comprendre ce que tu fais, sinon ne place pas de firewall, c'est encore pire. N'importe qui peut te donner des regles, et toi tu les places simplement en faissant confiance.

Maintenant tu as un router ou un modem ? Si tu as un router (donc l'adresseIP publique se trouve sur le router et pas sur le firewall) alors ca ne sert a rien de mette un firewall, car toute attaque venant de l'exterieures seront a destination du router et pas de tes machines.

Poste le Monday 5 March 2007 00:22:30
Répondre     Citer    
Re: IPTABLES : apache non accessible
Envoyé par: 666

^^D-*^^D-*^^D-*^^D-*^^D-*^^D-*^^D-*^^D-*^^D-*^^D-*

Poste le Friday 6 April 2007 14:53:12
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
IPTABLES : apache non accessible
Posez dans ce forum les questions qui ne trouvent pas place dans les autres...

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons