Salut à tous!
Je dispose d'un intranet avec 15 pc en réseau a travers un switch (192.168.2.0/24 GW 192.168.2.1 )
la connexion à Internet est assurée par un routeur ADSL d'adresse 192.168.2.1 et qui assure la gestion des DNS.
Actuellement je souhaite configurer un PC fedora et y ajouter un pare-feu à l'aide de iptables, ce pc sera utilisé comme passerelle par tout les autres postes avant d'atteindre le routeur ADSL.
Voici une image descriptive de mon réseau:
http://www.box.net/shared/igahvqqazj
Veuillez m'aider à écrire les règles iptables puisque je ne m'y connait pas trop.
Le PC Fedora dispose de 2 interfaces réseau:
eth0 (dans l'intranet) : 192.168.2.2
eth1 (vers le routeur) : 192.168.2.20
J'ai activé le routage au niveau du noyau, et je desire autoriser les connexion vers les serveurs apache, ssh et ftp présents sur le PC Fedora.
Voici les commandes que j'ai déjà entré pour iptables:
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT
iptables -P INPUT DROP
iptables -I INPUT 2 -i lo -j ACCEPT
iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
Ensuite iptables-save > /etc/sysconfig/iptables
Veuillez m'aider à mieux configurer ce pare-feu.
Merci d'avance.
# 2 reseaux distincts
Posté par nono14 (site web personnel) . Évalué à 3.
cad: 192.168.2.0/24 et 192.168.1.0/24 par ex
Si le firewall est un routeur filtrant, il va falloir router les paquets ( cf chaine FORWARD table FILTER)
De plus, si le firewall fait du nat il faudra alterer l'ip source des paquets
traversant celui-ci ( chaine POSTROUTING table NAT)
De la documentation:
http://www.netfilter.org/documentation/index.html#documentation-howto
Système - Réseau - Sécurité Open Source - Ouvert à de nouvelles opportunités
[^] # Re: 2 reseaux distincts
Posté par benoar . Évalué à 3.
Par contre, au lieu de créer un deuxième sous-réseau entre la passerelle et le routeur, ne pourrais-tu pas configurer le modem en PPPoE ? Ça évite de faire deux fois du NAT, et ça facilitera certaines choses.
[^] # Re: 2 reseaux distincts
Posté par Francis Einstein . Évalué à 1.
Quels sont les inconvénients à cet manière d'adresser le réseau?
En fait, la configuration initiale ne comprenait pas le PC Fedora, et puisque les PC utilisent le routeur pour aller vers internet j'ai eu l'idée de mettre eth0 et eth1 dans 192.168.2.0/24 et de tester avec un PC qui a pour passerelle l'adresse de eth1 (192.168.2.2).
De plus je n'ai aucun accès à la configuration du routeur, auquel cas j'aurai créée un sous-réseau entre la passerelle et le routeur.
L'on souhaiterait également bloquer l'accès à certains site web et services (avec squid notamment).
J'ai une autre préoccupation : si je crée un sous-réseau entre la passerelle et le routeur, serait-il possible pour les clients qui se connectent directement sur le routeur en WIFI d'acceder au LAN sur le switch?
Comment pourront-ils être filtrés s'ils n'ont pas comme passerelle le PC Fedora?
Ce sont la mes principales préoccupations.
Merci pour toutes vos suggestions.
[^] # Re: 2 reseaux distincts
Posté par NeoX . Évalué à 3.
ça fait deux fois en pas longtemps que je vois quelqu'un adresser deux segment réseaux différents avec les même préfixes ! Il ne faut surtout pas.
Quels sont les inconvénients à cet manière d'adresser le réseau?
comment veux tu que ta machine sache sur quelle carte reseau il faut envoyer l'information vu que les 2 cartes sont sur le meme reseau (192.168.2.0/24)
il faut donc mettre un plan IP different sur chaque carte reseau afin que le PC fedora sache par quelle carte il doit sortir pour atteindre les machines ou le routeur internet.
Proposition :
tu met la carte reseau qui va vers le switch avec l'ip 192.168.3.1 (vu que tu ne peux pas changer les reglages du routeur) et tu installe un serveur dhcp pour distribuer des ips en 192.168.3.0/24 à tes PCs.
les PCs qui seront en wifi seront toujours en 192.168.2.0/24
il faudra ajouter une route passant par l'ip 192.168.2.Y (le PC) pour aller vers les autres machines.
Les machines en wifi ne passant pas par le PC, elles ne seront pas filtrées.
[^] # Re: 2 reseaux distincts
Posté par Francis Einstein . Évalué à 1.
# exemple de script
Posté par tipmeabout . Évalué à 2.
Tu peux le diffuser, améliorer, bref ce que tu veux.
#! /bin/sh
## Firewall
## DESCRIPTION:
## Firewall for home use, with detailed explanations
########################
## some variables ##
########################
IPTABLES=`which iptables`
MODPROBE=`which modprobe`
verbose=1
LOOP='lo'
LAN='eth0'
NET='eth1'
IP_FORWARD='1'
RP_FILTER='1'
SSH_PORT='22'
TORRENT_PORT='26680'
#EKIGA_PORT='1720'
EMULE_TCP_PORT='14662'
EMULE_UDP_PORT='14672'
#SIP_UDP_PORT='5060'
#RTP_PORT='8000'
# Bacula ports
BACULA_DIR='9101'
BACULA_FD='9102'
BACULA_SD='9103'
# define your range of IPs in your LAN
LOCAL_NETWORK='192.168.0.0'
LOCAL_NETMASK='24'
# ECHO = 'echo' or '#', depending the verbosity you want
ECHO='echo'
# This script use ulogd to log accepted or rejected connexions
# in the default /var/log/ulogd/syslogemu.log file.
# Because of that, you need the ulogd deamon to be installed on your host.
# If you can not have ulogd on your host, replace ULOG by LOG, and all the log
# will be in the /var/log/syslog file
if [ `which ulogd` ] ; then
LOGFILE='ULOG'
else LOGFILE='LOG'
fi
do_start() {
####################
## Default policy ##
####################
if [ $verbose ]; then
$ECHO -n "Setting default policy ... "
fi
# the FILTER table is used to filter, so DROP policy by default
for chain in INPUT FORWARD ; do
$IPTABLES -t filter -P $chain DROP
done
$IPTABLES -t filter -P OUTPUT ACCEPT # except for the OUTPUT chain (adapt it according your needs)
# the NAT table is used to nat packet, it does not work for filtering, so ACCEPT policy by default
for chain in PREROUTING POSTROUTING OUTPUT ; do
$IPTABLES -t nat -P $chain ACCEPT
done
# the MANGLE table is used to make a lot of things (don't know in details - it alters packets, usefull for QoS - and don't used in this firewall configuration)
for chain in PREROUTING FORWARD INPUT OUTPUT POSTROUTING ; do
$IPTABLES -t mangle -P $chain ACCEPT
done
if [ $verbose ] ; then
$ECHO "done"
fi
############################
## Loading needed modules ##
############################
if [ $verbose ] ; then
$ECHO -n "Loading iptables & conntrack modules ... "
fi
kernel_release=`uname -r` # to find the kernel version in use
for i in `ls /lib/modules/$kernel_release/kernel/net/ipv4/netfilter/` ; do # list all modules available
$MODPROBE `basename $i .ko` # extract the name of the module, without the extension .ko
done
if [ $verbose ] ; then
$ECHO "done"
fi
##########################
## Kernel configuration ##
##########################
# IP_FORWARD='1' -> your host is used as a router; 0 if not
if [ $verbose ] ; then
if [ $IP_FORWARD ] ; then
$ECHO -n "Enabling IP forwarding ... "
else $ECHO -n "Disabling IP forwarding ... "
fi
fi
if [ -r /proc/sys/net/ipv4/ip_forward ]; then
echo $IP_FORWARD > /proc/sys/net/ipv4/ip_forward
fi
if [ $verbose ] ; then
$ECHO "done"
fi
# rp_filter prevents from receiving packets from an interface with an IP address not in the range defined in this interface
if [ $verbose ] ; then
if [ $RP_FILTER ] ; then
$ECHO -n "Enabling rp_filter ... "
else $ECHO -n "Disabling rp_filter ... "
fi
fi
if [ -r /proc/sys/net/ipv4/conf/all/rp_filter ] ; then
echo $RP_FILTER > /proc/sys/net/ipv4/conf/all/rp_filter
fi
if [ $verbose ] ; then
$ECHO "done"
fi
#########################
## Clear configuration ##
#########################
if [ $verbose ] ; then
$ECHO -n "Clearing configuration ... "
fi
for table in filter nat mangle ; do
$IPTABLES -t $table -F # clear the predefined chains for the table $table
$IPTABLES -t $table -X # clear the user chains for the table $table
done
if [ $verbose ] ; then
$ECHO "done"
fi
#############################################################
## Creation & configuration of user chains to log packets ##
#############################################################
if [ $verbose ] ; then
$ECHO -n "Creating & configuring user chains ... "
fi
for chain in LOG SSH HTTP ICMP P2P WRONG_PACKET ; do
#echo "create chain" $chain
$IPTABLES -t filter -N ${chain}_ACCEPT # create the accepted packets chain
$IPTABLES -t filter -N ${chain}_DROP # create the dropped packets chain
$IPTABLES -t filter -A ${chain}_ACCEPT -j $LOGFILE --ulog-prefix "[${chain}_ACCEPT]" # first it logs the packet
$IPTABLES -t filter -A ${chain}_ACCEPT -j ACCEPT # then it accepts the packet
$IPTABLES -t filter -A ${chain}_DROP -j $LOGFILE --ulog-prefix "[${chain}_DROP]" # first it logs the packet
$IPTABLES -t filter -A ${chain}_DROP -j DROP # then it drops the packet
done
if [ $verbose ] ; then
$ECHO "done"
fi
###################################################################
# now the tables and the chains are initialized and ready
# we will create the rules for each chain
# the configuration follows the path taken by a packet
###################################################################
#===============================================================#
# PREROUTING chain ... #
#===============================================================#
#############################
## ... of the mangle table ##
#############################
# ...
##########################
## ... of the nat table ##
##########################
# ...
#================================================================#
# INPUT chain ... #
#================================================================#
#############################
## ... of the filter table ##
#############################
$IPTABLES -t filter -A INPUT -i $LOOP -j ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -s 127.0.0.0/8 -j WRONG_PACKET_DROP # packets with IP 127.x.x.x can not come from the $NET interface
$IPTABLES -t filter -A INPUT -i $NET -p udp --sport 67:68 -j ACCEPT # for DHCP packets
$IPTABLES -t filter -A INPUT -p tcp --syn -m multiport --dports $SSH_PORT,$TORRENT_PORT -j LOG_ACCEPT
$IPTABLES -t filter -A INPUT -p tcp --syn --dport $TORRENT_PORT -j P2P_ACCEPT
#$IPTABLES -t filter -A INPUT -p tcp --syn --dport $EKIGA_PORT -j LOG_ACCEPT
$IPTABLES -t filter -A INPUT -p tcp --syn --dport $EMULE_TCP_PORT -j P2P_ACCEPT
$IPTABLES -t filter -A INPUT -p udp --dport $EMULE_UDP_PORT -j P2P_ACCEPT
#$IPTABLES -t filter -A INPUT -p udp --dport $SIP_UDP_PORT -j ACCEPT
#$IPTABLES -t filter -A INPUT -p udp --dport $RTP_PORT -j ACCEPT
#$IPTABLES -t filter -A INPUT -p udp --dport $WENGO_UDP_PORT1 -j ACCEPT
#$IPTABLES -t filter -A INPUT -p udp --dport $WENGO_UDP_PORT2 -j ACCEPT
# Bacula Director daemon access
$IPTABLES -t filter -A INPUT -p tcp --syn -s $PORCINET --dport $BACULA_DIR -j ACCEPT
$IPTABLES -t filter -A INPUT -p tcp --syn -s $TIGROU --dport $BACULA_DIR -j ACCEPT
# Bacula Storage daemon access
$IPTABLES -t filter -A INPUT -p tcp --syn -s $PORCINET --dport $BACULA_SD -j ACCEPT
$IPTABLES -t filter -A INPUT -p tcp --syn -s $TIGROU --dport $BACULA_SD -j ACCEPT
$IPTABLES -t filter -A INPUT -p icmp --icmp-type echo-request -j ICMP_ACCEPT # for incoming ping request
$IPTABLES -t filter -A INPUT -p icmp --icmp-type echo-reply -j ICMP_ACCEPT # for replies from our ping request
$IPTABLES -t filter -A INPUT -d 255.255.255.255 -j DROP
$IPTABLES -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -t filter -A INPUT -m state --state NEW -j LOG_DROP
#############################
## ... of the mangle table ##
#############################
# ...
#================================================================#
# OUTPUT chain ... #
#================================================================#
#############################
## ... of the mangle table ##
#############################
# ...
##########################
## ... of the nat table ##
##########################
# ...
#############################
## ... of the filter table ##
#############################
$IPTABLES -t filter -A OUTPUT -o $LOOP -j ACCEPT
#================================================================#
# FORWARD chain ... #
#================================================================#
#############################
## ... of the mangle table ##
#############################
# ...
#############################
## ... of the filter table ##
#############################
$IPTABLES -t filter -A FORWARD -i $LAN -o $NET -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -t filter -A FORWARD -i $NET -o $LAN -m state --state ESTABLISHED,RELATED -j ACCEPT
#================================================================#
# POSTROUTING chain ... #
#================================================================#
#############################
## ... of the mangle table ##
#############################
# ...
##########################
## ... of the nat table ##
##########################
$IPTABLES -t nat -A POSTROUTING -s $LOCAL_NETWORK/$LOCAL_NETMASK -o $NET -j MASQUERADE
}
do_stop() {
if [ $verbose ] ; then
$ECHO -n "Clearing configuration ... "
fi
for chain in INPUT FORWARD OUTPUT; do
$IPTABLES -t filter -P $chain ACCEPT
done
for chain in PREROUTING POSTROUTING OUTPUT ; do
$IPTABLES -t nat -P $chain ACCEPT
done
for chain in PREROUTING FORWARD INPUT OUTPUT POSTROUTING ; do
$IPTABLES -t mangle -P $chain ACCEPT
done
for table in filter nat mangle ; do
$IPTABLES -t $table -F # clear the predefined chains for the table $table
$IPTABLES -t $table -X # clear the user chains for the table $table
done
if [ $verbose ] ; then
$ECHO "done"
fi
}
case "$1" in
start|"")
do_start
;;
stop)
do_stop
;;
*)
echo "Usage: firewall.sh [start|stop]" >&2
exit
;;
esac
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.