#1 Le 10/09/2005, à 12:22
- Gillaume
[ Résolu ] besoin d'être éclairer à propos de firewall Iptables ....
Salut à tous,
j'espere que je vais etre clair ...
Voilà, j'ai chopé un bon script, je crois sur trustonme, pour parametrer mon firewall.
J'ai sur ma machine, un serveur ssh et ftp ( vsftp ).
voici le script iptables :
#!/bin/sh
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net>
# this script is free software according to the GNU General Public License (see http://www.gnu.org/licenses/gpl.html)
# Start/stop/restart/status firewall:firewall_start() {
echo "[Démarrage du firewall]"
############################### REGLES PAR DEFAUT ###########################
echo "[Initialisation de la table filter]"
iptables -F
iptables -Xecho "[Politique par défaut de la table filter]"
# On ignore tout ce qui entre ou transite par la passerelle
iptables -P INPUT DROP
iptables -P FORWARD DROP# On accepte, ce qui sort
iptables -P OUTPUT ACCEPT# Pour éviter les mauvaises suprises, on va
# autoriser l'accès à la loopback, c'est vital !
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT############################### LOCAL-INTERNET ###########################
echo "[On autorise les clients à accéder à internet ]"
#On créé une nouvelle chaîne, le nom est indifférent
# appelons-la "local-internet"
iptables -N local-internet# On définit le profil de ceux qui appartiendront à "local-internet"
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer
# et faire des petits :-)
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT# On termine en indiquant que les connections appartenant à "local-internet"
# accèdent à internet de manière transparente.
iptables -A INPUT -j local-internet
iptables -A FORWARD -j local-internet############################### LES TABLES NAT ET MANGLE #############################
echo "[Initialisation des tables nat et mangle]"
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 ACCEPTiptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT#################################### LE MASQUERADING #################################
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)
# echo "[Mise en place du masquerading]"
# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE################################# ACTIVATION DE LA PASSERELLE ##################
echo "[Activation de la passerelle]"
echo 1 > /proc/sys/net/ipv4/ip_forward################################# PAS DE SPOOFING ############################
echo "[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 SYNFLOOD ####################
echo "[Pas de synflood]"
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
fi################################## PAS DE PING ###############################
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle
echo "[Pas ping]"
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
fi############################ Fonctionnalités serveurs ##############################
echo "[Etude des fonctionalités serveurs, visibles depuis internet ]"
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,
# en décommentant les 2 ou 3 lignes correspondantes.echo "[autorisation du serveur ssh(22) ...]"
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -I INPUT -p tcp --dport ssh -i ppp0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport ssh -i ppp0 -m state --state NEW -m recent --update --seconds 60 --hitcount 2 -j DROP#echo "[autorisation du serveur smtp(25) ...]"
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT#echo "[autorisation du serveur http(80) ...]"
#iptables -A INPUT -p tcp --dport www -j ACCEPT#echo "[autorisation du serveur https(443) ...]"
#iptables -A INPUT -p tcp --dport https -j ACCEPT#echo "[autorisation du serveur DNS(53) ...]"
#iptables -A INPUT -p udp --dport domain -j ACCEPT
#iptables -A INPUT -p tcp --dport domain -j ACCEPT#echo "[autorisation du serveur irc(6667) ...]"
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT#echo "[autorisation du serveur cvs (2401) ...]"
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPTecho "[autorisation du serveur FTP(21 et 20) ...]"
iptables -A INPUT -p tcp --dport ftp -j ACCEPT
iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT# Ne pas décommenter les 3 lignes qui suivent.
# Plus généralement :
#echo "[autorisation du serveur Mon_truc(10584) ...]"
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT#iptables -A INPUT -j ACCEPT
echo "[firewall activé !]"
}firewall_stop() {
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPTiptables -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 ACCEPTecho " [firewall descativé! ]"
}firewall_restart() {
firewall_stop
sleep 2
firewall_start
}case "$1" in
'start')
firewall_start
;;
'stop')
firewall_stop
;;
'restart')
firewall_restart
;;
'status')
iptables -L
iptables -t nat -L
iptables -t mangle -L
;;
*)
echo "Usage: firewall {start|stop|restart|status}"
esac
j'ai vraiment été conquis par ce script simple, et l'air d'être efficace.
le probleme est que, mon serveur ftp, avec cette config, n'est pas joignable.
je m'y connecte presque ...
mais impossible d'y voir le contenu...
si part contre, je change le mode de connection de gftp ou leechftp, que j'enleve le mode "PASV", là ça marche.
Mais les liens sur mon site web pointant sur mon site ftp, ça ne marche plus.
qd je fais un test de mon firewall, en ligne sur le site : http://scan.sygate.com/prequickscan.html
tous mes ports sont bloqué, sauf le 22, le 20 et 21. ce qui est normal.
les autres sont "Blocked" ==> ce qui est nickel.
mais mon serveur ftp est inaccessible.
si par contre, j'enleve le # devant :
iptables -A INPUT -j ACCEPT
là mon site ftp est accessible en mode PASV.
mais, c'est comme si je n'avais plus de firewall ...
en testant sur http://scan.sygate.com/prequickscan.html
j'attends vos conseils...
merci
Dernière modification par Gillaume (Le 23/09/2005, à 17:25)
Guili Guili
Hors ligne
#2 Le 10/09/2005, à 18:47
- Gillaume
Re : [ Résolu ] besoin d'être éclairer à propos de firewall Iptables ....
ça n'inspire pas grand monde je sens ...
Guili Guili
Hors ligne
#3 Le 11/09/2005, à 17:17
- Uggy
Re : [ Résolu ] besoin d'être éclairer à propos de firewall Iptables ....
C'est "normal"..
En actif, ca marche car pour le canal data, c'est le serveur qui se connecte vers le client (le client est actif)..
En passif ca marche pas car c'est le client qui ouvre une 2eme connexion vers le serveur pour le canal data.. et le pb c'est que ce port est choisi dynamiquement par le serveur... il faut donc que le fw soit capable de lire dans le paquet qui part vers le client, quel est le port choisi.. et l'ouvrir dynamiquement..
Je ne m'y connait pas assez en NetFilter pour savoir comment faire ça..
Sinon, pour moi, il n'y a pas besoin d'ouvrir le port 20... en effet le port 20 est le port source (et non pas destination!!) du canal Data en mode Actif..
Dernière modification par Uggy (Le 11/09/2005, à 17:19)
Hors ligne
#4 Le 12/09/2005, à 08:18
- Gillaume
Re : [ Résolu ] besoin d'être éclairer à propos de firewall Iptables ....
Outch ................
je sais pas si j'ai tout compris ....
je vais suivre ton conseil, je vais fermer le port 20 sur le fw.
j'ai trouvé une ligne à rajouter Uggy.
par ce que, dans la config du server ftp, il y a
passv_mode_min=50000 et max=60000
j'ai donc rajouter ces 2 parametres dans iptables.
ce qui est bizarre, c'est que, maintenant, le server ssh est indispo .....
je vais essayer ce que tu proposes !
merci bcp
Gui
Guili Guili
Hors ligne
#5 Le 12/09/2005, à 11:59
- arvin
Re : [ Résolu ] besoin d'être éclairer à propos de firewall Iptables ....
http://www.trustonme.net/scripts/index.php pour ceux que ça intéressent
Mon blog pour Linux: http://jujuseb.com
Hors ligne
#6 Le 12/09/2005, à 13:20
- Gillaume
Re : [ Résolu ] besoin d'être éclairer à propos de firewall Iptables ....
merci arvin !
le script vient justement de trustonme !! site que je recommande à tous les linuxiens !
gui
Guili Guili
Hors ligne
#7 Le 22/09/2005, à 19:13
- arvin
Re : [ Résolu ] besoin d'être éclairer à propos de firewall Iptables ....
commentaire de : Quentin ( q-dogg@netcourrier.com ), posté le : 2004-01-14 à 23:20
Très bon firewall !!!
IL manque juste une petite ligne...
Lors de la connexion FTP sur certains serveurs, la commande LIST ne marche pas et on ne peut se connecter au serveur.
Il suffit de rajouter :
modprobe ip_nat_ftp
Mon blog pour Linux: http://jujuseb.com
Hors ligne
#8 Le 23/09/2005, à 17:23
- Gillaume
Re : [ Résolu ] besoin d'être éclairer à propos de firewall Iptables ....
mon script firewall si ça interesse ...
serveur ssh, avec 2 tentatives max, apres le serveur ssh est indispo pendant 60 secondes
==> cela evite les tentatives d'intrusion en boucle !!
et serveur ftp mode passif.
ppp0 est l'interface connectée au web. Si c'est avec la carte réseau, mettre eth0 .....etc ....
j'ai mis ce script au démarrage de la machine.
En plus, il fait serveur NAT !!
j'ai pas trouvé mieux et aussi simple comme script, merci trustonme.net
#!/bin/sh
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel <kernel@trustonme.net>
# this script is free software according to the GNU General Public License (see http://www.gnu.org/licenses/gpl.html)
# Start/stop/restart/status firewall:firewall_start() {
echo "[Démarrage du firewall]"
############################### REGLES PAR DEFAUT ###########################
echo "[Initialisation de la table filter]"
iptables -F
iptables -Xecho "[Politique par défaut de la table filter]"
# On ignore tout ce qui entre ou transite par la passerelle
iptables -P INPUT DROP
iptables -P FORWARD DROP# On accepte, ce qui sort
iptables -P OUTPUT ACCEPT
# Pour éviter les mauvaises suprises, on va
# autoriser l'accès à la loopback, c'est vital !
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT############################### LOCAL-INTERNET ###########################
echo "[On autorise les clients à accéder à internet ]"
#On créé une nouvelle chaîne, le nom est indifférent
# appelons-la "local-internet"
iptables -N local-internet# On définit le profil de ceux qui appartiendront à "local-internet"
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer
# et faire des petits :-)
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT# On termine en indiquant que les connections appartenant à "local-internet"
# accèdent à internet de manière transparente.
iptables -A INPUT -j local-internet
iptables -A FORWARD -j local-internet############################# LES TABLES NAT ET MANGLE #############################
echo "[Initialisation des tables nat et mangle]"
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 ACCEPTiptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT#################################### LE MASQUERADING #################################
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)
echo "[Mise en place du masquerading]"
# ppp0 est l'interface connectée à l'internet.
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE################################# ACTIVATION DE LA PASSERELLE ##################
echo "[Activation de la passerelle]"
echo 1 > /proc/sys/net/ipv4/ip_forward################################# PAS DE SPOOFING ############################
echo "[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 SYNFLOOD ####################
echo "[Pas de synflood]"
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
fi################################## PAS DE PING ###############################
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle
echo "[Pas ping]"
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
fi############################ Fonctionnalités serveurs ##############################
echo "[Etude des fonctionalités serveurs, visibles depuis internet ]"
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne
# depuis internet ne peux accéder à l'un des serveurs que vous hébergez.# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,
# en décommentant les 2 ou 3 lignes correspondantes.echo "[autorisation du serveur ssh(22) ...]"
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -I INPUT -p tcp --dport ssh -i ppp0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport ssh -i ppp0 -m state --state NEW -m recent --update --seconds 60 --hitcount 2 -j DROP#echo "[autorisation du serveur smtp(25) ...]"
#iptables -A INPUT -p tcp --dport smtp -j ACCEPT#echo "[autorisation du serveur http(80) ...]"
#iptables -A INPUT -p tcp --dport www -j ACCEPT#echo "[autorisation du serveur https(443) ...]"
#iptables -A INPUT -p tcp --dport https -j ACCEPT#echo "[autorisation du serveur DNS(53) ...]"
#iptables -A INPUT -p udp --dport domain -j ACCEPT
#iptables -A INPUT -p tcp --dport domain -j ACCEPT#echo "[autorisation du serveur irc(6667) ...]"
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT#echo "[autorisation du serveur cvs (2401) ...]"
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPTecho "[autorisation du serveur FTP(21 et 20) ...]"
iptables -A INPUT -p tcp --dport ftp -j ACCEPT
iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT
iptables -A INPUT -p tcp --dport 50000:60000 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT# Ne pas décommenter les 3 lignes qui suivent.
# Plus généralement :
#echo "[autorisation du serveur Mon_truc(10584) ...]"
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPTecho "[firewall activé !]"
}firewall_stop() {
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPTiptables -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 ACCEPTecho " [firewall descativé! ]"
}firewall_restart() {
firewall_stop
sleep 2
firewall_start
}case "$1" in
'start')
firewall_start
;;
'stop')
firewall_stop
;;
'restart')
firewall_restart
;;
'status')
iptables -L
iptables -t nat -L
iptables -t mangle -L
;;
*)
echo "Usage: firewall {start|stop|restart|status}"
esac
Guili Guili
Hors ligne
#9 Le 08/11/2005, à 23:16
- arvin
Re : [ Résolu ] besoin d'être éclairer à propos de firewall Iptables ....
J'ai trouvé le script de Firewalling iptables ci-dessous sur le site http://www.nbs-system.com/article/iptables_howto
A stocker dans /etc/init.d/firewall
#!/bin/sh
case "$1" in
start)
date=`date +'%b %d %k:%M:%S'`;
echo " "
echo -e "-----------> \033[40m\033[1;32mADSL Firewalling Script V1.9\033[0m <--------------"
echo -e "---------> \033[40m\033[1;32mLast Updated on 02/01/2005\033[0m <----------"
echo -e "---------> \033[40m\033[1;33mStarting on $date \033[0m <----------"
echo "-> <-"
echo -e "-> \033[40m\033[1;34mSetting UP variables \033[0m <-"
LOOSE_UDP_PATCH=1
MODEM_IP="`route -n | grep "0.0.0.0" | grep "UG" | awk '{print $2}'`" #[ou remplacer directement par l’IP ADSL de la machine]
FIREWALL_LOG=/var/log/firewall
LOOSE_UDP_PATCH=1
LAN_BCAST_ADDRESS="192.168.0.255/32"
INET_IFACE="eth0" #[remplacer par la bonne interface Internet ou ppp0 si besoin]
LAN_IFACE="eth1" #[remplacer par l’interface du LAN]
IPTABLES="/sbin/iptables"
TRUSTED_IP="0.0.0.0 " #remplacer par une IP de confiance
MYLAN_IP="0.0.0.0" #remplacer par une IP d ans le lan nécessitant un DNAT/SNAT (prise de contrôle VNC par exemple) FIREWALL_IP="192.168.0.254" #remplacer par l’IP du firewall dans le LAN
LANNET="192.168.0.0/24" #votre réseau et masque de sous réseau du LAN
if [ "$FIREWALL_LOG" == "" ]; then FIREWALL_LOG="/dev/null"; fi
echo "$date -- Starting Firewall --" >> $FIREWALL_LOG KERNELMAJ=`uname -r | sed -e 's,\..*,,'` KERNELMIN=`uname -r | sed -e 's,[^\.]*\.,,' -e 's,\..*,,'`
if [ "$KERNELMAJ" -lt 2 ] || [ "$KERNELMAJ" -eq 2 -a "$KERNELMIN" -lt 3 ]; then
echo -e "\033[40m\033[1;31mWARNING: Your kernel version is older than 2.4!\033[0m"
echo -e "\033[40m\033[1;31mYour kernel probably doesn't support IPTABLES unless an IPTABLES patch is compiled in it.\033[0m"
fi
echo -e "-> \033[40m\033[1;31mSetting UP Banned IP variable \033[0m <-"
BANNED_IP="12.13.14.15/24 15.16.17.18/28 19.20.21.22"
echo -e "-> \033[40m\033[1;31mSetting UP Reserved IP variable \033[0m <-"
RESERVED_NET="0.0.0.0/8 1.0.0.0/8 2.0.0.0/8 3.0.0.0/8 4.0.0.0/8 5.0.0.0/8 7.0.0.0/8 10.0.0.0/8 14.0.0.0/8
23.0.0.0/8 27.0.0.0/8 31.0.0.0/8 36.0.0.0/8 37.0.0.0/8 39.0.0.0/8 41.0.0.0/8 42.0.0.0/8 58.0.0.0/8 59.0.0.0/8
60.0.0.0/8 70.0.0.0/8 71.0.0.0/8 72.0.0.0/8 73.0.0.0/8 74.0.0.0/8 75.0.0.0/8 76.0.0.0/8 77.0.0.0/8 78.0.0.0/8
79.0.0.0/8 83.0.0.0/8 84.0.0.0/8 85.0.0.0/8 86.0.0.0/8 87.0.0.0/8 88.0.0.0/8 89.0.0.0/8 90.0.0.0/8 91.0.0.0/8
92.0.0.0/8 93.0.0.0/8 94.0.0.0/8 95.0.0.0/8 96.0.0.0/8 97.0.0.0/8 98.0.0.0/8 99.0.0.0/8 100.0.0.0/8 101.0.0.0/8
102.0.0.0/8 103.0.0.0/8 104.0.0.0/8 105.0.0.0/8 106.0.0.0/8 107.0.0.0/8 108.0.0.0/8 109.0.0.0/8 110.0.0.0/8
111.0.0.0/8 112.0.0.0/8 113.0.0.0/8 114.0.0.0/8 115.0.0.0/8 116.0.0.0/8 117.0.0.0/8 118.0.0.0/8 119.0.0.0/8
120.0.0.0/8 121.0.0.0/8 122.0.0.0/8 123.0.0.0/8 124.0.0.0/8 125.0.0.0/8 126.0.0.0/8 197.0.0.0/8 222.0.0.0/8
223.0.0.0/8 224.0.0.0/8 225.0.0.0/8 226.0.0.0/8 227.0.0.0/8 228.0.0.0/8 229.0.0.0/8 230.0.0.0/8 231.0.0.0/8
232.0.0.0/8 233.0.0.0/8 234.0.0.0/8 235.0.0.0/8 236.0.0.0/8 237.0.0.0/8 238.0.0.0/8 239.0.0.0/8 240.0.0.0/8
241.0.0.0/8 242.0.0.0/8 243.0.0.0/8 244.0.0.0/8 245.0.0.0/8 246.0.0.0/8 247.0.0.0/8 248.0.0.0/8 249.0.0.0/8
250.0.0.0/8 251.0.0.0/8 252.0.0.0/8 253.0.0.0/8 254.0.0.0/8 255.0.0.0/8 169.254.0.0/16 172.16.0.0/12 173.0.0.0/8
174.0.0.0/8 175.0.0.0/8 176.0.0.0/8 177.0.0.0/8 178.0.0.0/8 179.0.0.0/8 180.0.0.0/8 181.0.0.0/8 182.0.0.0/8
183.0.0.0/8 184.0.0.0/8 185.0.0.0/8 186.0.0.0/8 187.0.0.0/8 189.0.0.0/8 190.0.0.0/8"echo -e "-> \033[40m\033[1;31mSetting Default Policies to DROP \033[0m <-"
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
echo -e "-> \033[40m\033[1;33mFlushing all rules & tables \033[0m <-"
$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD
$IPTABLES -t nat -F
$IPTABLES -t nat -Z
$IPTABLES -t nat -X
$IPTABLES -t mangle -Z
$IPTABLES -t mangle -F
$IPTABLES -t mangle –X $IPTABLES -N LOG_DROP
$IPTABLES -A LOG_DROP -m limit --limit 6/h --limit-burst 1 -j LOG --log-tcp-options --log-prefix 'Drop Res/Ban address: '
$IPTABLES -A LOG_DROP -j DROP
echo -e "-> \033[40m\033[1;34m Set kernel networking tweaks \033[0m <-"
echo "0" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "0" > /proc/sys/net/ipv4/tcp_timestamps
#echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
echo "2" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo "8192" > /proc/sys/net/ipv4/ip_conntrack_max
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout
echo "2400" > /proc/sys/net/ipv4/tcp_keepalive_time
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
echo "0" > /proc/sys/kernel/printk
echo -e "-> \033[40m\033[1;34m Enabling reduction of the DoS'ing ability \033[0m <-"
echo "10" > /proc/sys/net/ipv4/tcp_fin_timeout
echo "1800" > /proc/sys/net/ipv4/tcp_keepalive_time
echo "0" > /proc/sys/net/ipv4/tcp_window_scaling
echo "0" > /proc/sys/net/ipv4/tcp_sack
echo "64" > /proc/sys/net/ipv4/ip_default_ttl
echo "2048" > /proc/sys/net/ipv4/ip_queue_maxlen
if [ -e /proc/sys/net/ipv4/ip_masq_udp_dloose ]; then
if [ "$LOOSE_UDP_PATCH" == "1" ]; then
echo -e "-> \033[40m\033[1;31mEnabling the LOOSE_UDP_PATCH (for some games, less secure!) \033[0m <-"
echo "1" > /proc/sys/net/ipv4/ip_masq_udp_dloose
else
echo -e "-> \033[40m\033[1;34m Disabling the LOOSE_UDP_PATCH (more secure) \033[0m <-"
echo "0" > /proc/sys/net/ipv4/ip_masq_udp_dloose
fi
fi
#if [ -e /proc/sys/net/ipv4/ip_local_port_range ]; then
#echo "32768 61000" > /proc/sys/net/ipv4/ip_local_port_range
#fi if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ]; then
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
fi
if [ -e /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts ]; then
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
fi echo "0" > /proc/sys/net/ipv4/conf/eth0/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo "1" > /proc/sys/net/ipv4/conf/eth0/rp_filter
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
echo 0 > /proc/sys/net/ipv4/tcp_sack
if [ -e /proc/sys/net/ipv4/tcp_ecn ]; then
echo -e "-> \033[40m\033[1;34mEnabling ECN (Explicit Congestion Notification) \033[0m <-"
echo "1" > /proc/sys/net/ipv4/tcp_ecn
fi
echo -e "-> <-"
echo -e "-> \033[40m\033[1;33m Logging some stuffs \033[0m <-"
echo -e "-> <-"
$IPTABLES -A INPUT -i $INET_IFACE -s $LANNET -m limit --limit 3/m -j LOG --log-prefix "Spoofed packet: "
$IPTABLES -A INPUT -f -m limit --limit 3/m --limit-burst 1 -j LOG --log-prefix "Frag packet: "
$IPTABLES -A INPUT -s 10.0.0.0/8 -m limit --limit 60/h --limit-burst 1 -j LOG --log-prefix "Class A address: "
$IPTABLES -A INPUT -s 172.16.0.0/12 -m limit --limit 60/h --limit-burst 1 -j LOG --log-prefix "Class B address: "
#$IPTABLES -A INPUT -i $INET_IFACE -s $LANNET -m limit --limit 60/h --limit-burst 1 -j LOG --log-prefix "Class C address: "
$IPTABLES -A INPUT -s 169.254.0.0/16 -m limit --limit 60/h --limit-burst 1 -j LOG --log-prefix "Class M$ address: "
$IPTABLES -A INPUT -i $INET_IFACE -p icmp -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "ICMP flood: "
#$IPTABLES -A INPUT -i ! $INET_IFACE -s $MODEM_IP/24 -m limit --limit 3/m -j LOG --log-level $LOGLEVEL --log-prefix "Spoofed (MODEM) packet: "
#$IPTABLES -A INPUT -i $INET_IFACE -m limit --limit 6/h -j LOG --log-prefix "Drop Spoofed MODEM packet:"
#$IPTABLES -A INPUT -i $INET_IFACE -m limit --limit 6/h -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES DROP] : '
$IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/m --limit-burst 2 -j LOG --log-prefix "Watched INPUT packet: "
#$IPTABLES -A INPUT -m limit --limit 6/h -j LOG --log-prefix "Dropped INPUT packet: "
$IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 3/m --limit-burst 5 -j LOG --log-prefix "Stealth XMAS scan: "
$IPTABLES -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -m limit --limit 3/m --limit-burst 5 -j LOG --log-prefix "Stealth XMAS-PSH scan: "
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -m limit --limit 3/m --limit-burst 5 -j LOG --log-prefix "Stealth XMAS-ALL scan: "
$IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN -m limit --limit 3/m --limit-burst 5 -j LOG --log-prefix "Stealth FIN scan: "
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 3/m --limit-burst 5 -j LOG --log-prefix "Stealth SYN/RST scan: "
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 3/m --limit-burst 5 -j LOG --log-prefix "Stealth SYN/FIN scan(?): "
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -m limit --limit 3/m --limit-burst 5 -j LOG --log-prefix "Stealth Null scan: "
$IPTABLES -A INPUT -p tcp --dport 0 -m limit --limit 6/h --limit-burst 1 -j LOG --log-prefix "Port 0 OS fingerprint: "
$IPTABLES -A INPUT -p udp --dport 0 -m limit --limit 6/h --limit-burst 1 -j LOG --log-prefix "UDP port 0 OS fingerprint: "
$IPTABLES -A INPUT -p tcp --sport 0 -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "TCP source port 0: "
$IPTABLES -A INPUT -p udp --sport 0 -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "UDP source port 0: "
$IPTABLES -A INPUT -p tcp -m multiport --sports 20,21,22,23,80,110,143,443,993,995 -m limit --limit 6/h --limit-burst 1 -j LOG --log-prefix "Possible DRDOS attempt: "
$IPTABLES -A FORWARD -f -o $LAN_IFACE -m limit --limit 3/m -j LOG --log-prefix "FRAGMENTED PACKET (FWD): "
$IPTABLES -A FORWARD -i $INET_IFACE -s $LANNET -m limit --limit 3/m -j LOG --log-prefix "Spoofed packet: "
$IPTABLES -A OUTPUT -o $INET_IFACE -p tcp -m limit --limit 6/h --limit-burst 1 -j LOG --log-prefix "Watched OUTPUT packet: "
$IPTABLES -A OUTPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/m --limit-burst 2 -j LOG --log-prefix "Watched OUTPUT packet: " echo -e "-> \033[40m\033[1;32m PreRouting rules \033[0m <-"
$IPTABLES -A PREROUTING -t nat -p tcp -i $INET_IFACE -s $ TRUSTED_IP -d $MODEM_IP --dport 5900 -j DNAT --to $MYLAN_IP:8192
$IPTABLES -A PREROUTING -t nat -p tcp -i $INET_IFACE -s $TRUSTED_IP -d $MODEM_IP --dport 3389 -j DNAT --to $MYLAN_IP:3389
echo -e "-> <-"
echo -e "-> \033[40m\033[1;33m Enabling \033[0m <-"
echo -e "-> \033[40m\033[1;34m Generic protection Rules \033[0m <-"
echo -e "-> \033[40m\033[1;34m AntiSpoofing Rule \033[0m <-"
echo -e "-> \033[40m\033[1;34m SYN-Flooding Protection \033[0m <-"
#echo -e "-> \033[40m\033[1;34m Drop Fragmented packets \033[0m <-"
echo -e "-> \033[40m\033[1;34m Anti Loopback spoofing \033[0m <-"
echo -e "-> <-"
echo -e "-> \033[40m\033[1;32m INPUT RULING (accept) \033[0m <-" $IPTABLES -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
#$IPTABLES -A INPUT -i $INET_IFACE -s "$MODEM_IF" -d "$MODEM_IF_IP" -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -s 14.15.16.21 -j ACCEPT
$IPTABLES -I INPUT -p TCP -s $MYLAN_IP -d $FIREWALL_IP --dport 80 -j ACCEPT
$IPTABLES -A INPUT -p TCP -s 14.15.16.18/32 --dport 53 -j ACCEPT
$IPTABLES -A INPUT -p UDP -s 0.0.0.0/0 --dport 53 -j ACCEPT
$IPTABLES -A INPUT -p UDP -i eth0 -s 212.27.32.5 -d 22.23.24.144 --sport 53 -j ACCEPT
$IPTABLES -A INPUT -p TCP -s 14.15.16.21/32 --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p TCP -i $LAN_IFACE -s 192.168.0.2/32 --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p UDP -s 0.0.0.0/0 --dport 53 -j ACCEPT
$IPTABLES -A INPUT -p TCP -s 0.0.0.0/0 --dport 53 -j ACCEPT
$IPTABLES -A INPUT -p ICMP -s 192.134.4.20/32 -j ACCEPT # AFNIC Zonecheck Fix
$IPTABLES -A INPUT -p ICMP -s 14.15.16.18/29 -j ACCEPT # Ping from NBS Network
$IPTABLES -A INPUT -p ICMP -s $MYLAN -j ACCEPT # Ping from LAN
echo -e "-> \033[40m\033[1;32mBroadcast and loopback INPUT RULING (accept) \033[0m <-"
$IPTABLES -A INPUT -i $INET_IFACE -d 255.255.255.255 -p udp --sport 67 --dport 68 -j ACCEPT
$IPTABLES -A INPUT -p ICMP -i lo -j ACCEPT
$IPTABLES -A INPUT -i eth1 -p ALL -d $LAN_BCAST_ADDRESS -j ACCEPT
$IPTABLES -A INPUT -i lo -s 127.0.0.1 -j ACCEPT echo -e "-> \033[40m\033[1;31mINPUT RULING (drop) \033[0m <-"
#$IPTABLES -A INPUT -f -j DROP # drop fragemented packet
$IPTABLES -A INPUT -m state --state INVALID -j DROP # drop invalid paclet
$IPTABLES -A INPUT -i $INET_IFACE -p tcp ! --syn -m state --state NEW -j DROP #drop connexion wich doesn't start by a syn
$IPTABLES -A INPUT -p tcp --tcp-option 64 -j DROP
$IPTABLES -A INPUT -p tcp --tcp-option 128 -j DROP
#$IPTABLES -A INPUT -i ! $INET_IFACE -s "$MODEM_IP" -j DROP
$IPTABLES -A INPUT -i $INET_IFACE -d 127.0.0.0/8 -j DROP
$IPTABLES -A INPUT -i $INET_IFACE -d 192.168.0.255 -j DROP
$IPTABLES -A INPUT -i $INET_IFACE -d 255.255.255.255 -j DROP echo -e "-> \033[40m\033[1;34mANTI SCAN (drop) \033[0m <-"
$IPTABLES -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
echo -e "-> \033[40m\033[1;34m NAPTA/SYN FLOOD SMURFING/DRDoSing Protection \033[0m <-"
$IPTABLES -A INPUT -p tcp -m multiport --sports 20,21,22,23,80,110,143,443,993,995 -j DROP
$IPTABLES -A INPUT -p tcp --sport 0 -j DROP
$IPTABLES -A INPUT -p udp --sport 0 -j DROP
$IPTABLES -A INPUT -p tcp --dport 0 -j DROP
$IPTABLES -A INPUT -p udp --dport 0 -j DROP
$IPTABLES -A INPUT -i $INET_IFACE -s $LANNET -j DROP
$IPTABLES -A INPUT -i $INET_IFACE -j DROP
$IPTABLES -N syn-flood
$IPTABLES -A INPUT -i $INET_IFACE -p tcp --syn -j syn-flood
$IPTABLES -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPTABLES -A syn-flood -j DROP
echo -e "-> <-"
echo -e "-> \033[40m\033[1;32m FORWARD RULING (accept) \033[0m <-"
$IPTABLES -A FORWARD -i eth1 -o eth0 -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -s 14.15.16.21/32 -p tcp -i $INET_IFACE --dport 3389 -j ACCEPT
$IPTABLES -A FORWARD -s 14.15.16.21/32 -p tcp -i $INET_IFACE --dport 5900 -j ACCEPT
$IPTABLES -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
$IPTABLES -A FORWARD -i eth1 -o eth0 -j ACCEPT
$IPTABLES -A FORWARD -i $INET_IFACE -o $LAN_IFACE -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
echo -e "-> \033[40m\033[1;31mFORWARD RULING (drop) \033[0m <-"
$IPTABLES -A FORWARD -m state --state INVALID -j DROP
#$IPTABLES -A FORWARD -i ! $INET_IFACE -s "$MODEM_IF_IP/24" -j DROP
$IPTABLES -A FORWARD -i $INET_IFACE -s 192.168.0.0/24 -j DROP
$IPTABLES -A FORWARD -p tcp --dport 135:139 -j DROP #Droping Samba
$IPTABLES -A FORWARD -p udp --dport 135:139 -j DROP #Droping Samba
$IPTABLES -A FORWARD -p tcp --dport 445 -j DROP #Droping Samba
$IPTABLES -A FORWARD -i $INET_IFACE -o $LAN_IFACE -j DROP
echo -e "-> <-"
echo -e "-> \033[40m\033[1;32m OUTPUT RULING (accept) \033[0m <-"
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
$IPTABLES -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p ICMP -j ACCEPT
$IPTABLES -A OUTPUT -p TCP --dport 20 -j ACCEPT
$IPTABLES -A OUTPUT -p TCP --dport 21 -j ACCEPT
$IPTABLES -A OUTPUT -p TCP --dport 22 -j ACCEPT
$IPTABLES -A OUTPUT -p TCP --dport 25 -j ACCEPT
$IPTABLES -A OUTPUT -p UDP --dport 53 -j ACCEPT
$IPTABLES -A OUTPUT -p UDP --dport 123 -j ACCEPT
$IPTABLES -A OUTPUT -p TCP --dport 123 -j ACCEPT
$IPTABLES -A OUTPUT -p UDP -s 22.23.24.144 -d 0.0.0.0/0 --sport 53 -j ACCEPT
$IPTABLES -A OUTPUT -p TCP -s 22.23.24.144 -d 14.15.16.18 --dport 53 -j ACCEPT
$IPTABLES -A OUTPUT -p UDP -o $INET_IFACE --sport 53 -j ACCEPT
$IPTABLES -A OUTPUT -p TCP -d 0/0 --dport 80 -j ACCEPT
$IPTABLES -A OUTPUT -p TCP -d 0/0 --dport 443 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -d 192.168.0.2 --dport 6000 -j ACCEPT
$IPTABLES -A OUTPUT -p UDP -s 22.23.24.144 --sport 53 -j ACCEPT echo -e "-> \033[40m\033[1;31mOUTPUT RULING (drop) \033[0m <-"
$IPTABLES -A OUTPUT -p tcp -d 0/0 --sport 135:139 -j DROP
$IPTABLES -A OUTPUT -p udp -d 0/0 --sport 135:139 -j DROP
$IPTABLES -A OUTPUT -p udp -d 0/0 --sport 445 -j DROP
#$IPTABLES -A OUTPUT -p all -d 0/0 -j DROP
echo -e "-> <-"
echo -e "-> \033[40m\033[1;33m ADSL connexion clamping & Masquerading \033[0m <-"
$IPTABLES -t nat -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE echo "-> <-"
echo -e "-> \033[40m\033[1;31mBANNING INPUT & FORWARD FOR RESERVED & EVIL IPs \033[0m <-"
for net in $RESERVED_NET; do
$IPTABLES -A INPUT -i $INET_IFACE -s $net -j LOG_DROP
$IPTABLES -A FORWARD -i $INET_IFACE -s $net -j LOG_DROP
done
#for banned in $BANNED_IP; do
#$IPTABLES -A INPUT -i $INET_IFACE -s $banned -m limit --limit 6/h --limit-burst 1 -j LOG --log-prefix "Banned IP: "
#$IPTABLES -A INPUT -i $INET_IFACE -s $banned -j DROP
#$IPTABLES -A FORWARD -i $INET_IFACE -s $banned -m limit --limit 6/h --limit-burst 1 -j LOG --log-prefix "Drop fwd of Banned IP: "
#$IPTABLES -A FORWARD -i $INET_IFACE -s $banned -j DROP
#done echo -e "-> \033[40m\033[1;32m Activating Forward \033[0m <-"
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "-> <-"
echo -e "------------------------> \033[40m\033[1;32mEOF : End of Firewall \033[0m<-----------------------"
echo -e "-> <-"
echo -e "-> \033[40m\033[1;32m Spawning log console to $DISPLAY \033[0m<-"
echo -e "-> <-"
echo -e "------------------------>\033[40m\033[1;32m ALL DONE ! \033[0m<------------------------"
echo " "
;;
stop)
echo -e "\033[40m\033[1;31m----------------------> Shutting down Firewall ! <----------------------\033[0m"
echo " "
IPTABLES="/sbin/iptables"
$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD
$IPTABLES -t nat -F
$IPTABLES -t nat -Z
$IPTABLES -t nat -X
#$IPTABLES -t mangle -Z
#$IPTABLES -t mangle -F
#$IPTABLES -t mangle -X
echo 0 > /proc/sys/net/ipv4/ip_forward
echo " "
echo "-> DONE ! <-"
;;
*)
echo "Usage: /etc/init.d/firewall {start|stop}"
exit 1
;;
esac
exit 0
Mon blog pour Linux: http://jujuseb.com
Hors ligne
#10 Le 09/11/2005, à 12:27
- Gillaume
Re : [ Résolu ] besoin d'être éclairer à propos de firewall Iptables ....
merci Arvin
tres complet ce script, mais trop compliqué pour moi, là ...
du mal à voir ce qu'il fait ...
Guili Guili
Hors ligne
#11 Le 09/11/2005, à 12:45
- arvin
Re : [ Résolu ] besoin d'être éclairer à propos de firewall Iptables ....
Il y a des explications sur le script sur le site http://www.nbs-system.com/article/iptables_howto
Je suis d'accord avec toi, il faut mettre la main dans le cambouis .
Je cherche avec iptable un moyen de mieux protéger mon serveur sftp.
D'après http://forum.ubuntu-fr.org/viewtopic.ph … 99#p122199 la protection du serveur passerai déja par un bonne configuration de ssh.
Mon blog pour Linux: http://jujuseb.com
Hors ligne
#12 Le 09/11/2005, à 13:55
- Gillaume
Re : [ Résolu ] besoin d'être éclairer à propos de firewall Iptables ....
et le script de trustonme, il te plait pas trop ???
sur ton server, quels ports dois etre ouvert ?
Apres tu geres ......
Guili Guili
Hors ligne
#13 Le 17/11/2005, à 07:18
- arvin
Re : [ Résolu ] besoin d'être éclairer à propos de firewall Iptables ....
Pour info, j'utilise ubuntu-firewall
http://forum.ubuntu-fr.org/viewtopic.php?pid=127224#p127224
Mon blog pour Linux: http://jujuseb.com
Hors ligne