#!/bin/bash
################################################################################
#
# Parametre reseau du kernel
#
################################################################################
# Contre spoofing
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $f
done
# Protection contre les mauvais messages d'erreur
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# pas de icmp (ping)
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Loger les paquets spoofés et redirigés
for f in /proc/sys/net/ipv4/conf/*/log_martians;do
echo 1 > $f
done
################################################################################
#
# Creation de variables d'environement
#
################################################################################
# iptables
IPT="/usr/sbin/iptables"
# interface
# interne
LAN_IFACE=eth1
LAN_IP=192.168.0.1
LAN_IP_RANGE=192.168.1.0/24
LAN_BCAST=192.168.1.255
# externe
INET_IFACE=ppp0
INET_IP=10.0.0.1
ALLNET=0.0.0.0/0
# dns wanadoo
DNS_SERVERS=193.252.19.3/32
DNS_SERVERS1=193.252.19.4/32
# state
NEW_ESTABLISHED_RELATED="-m state --state NEW,ESTABLISHED,RELATED"
NEW="-m state --state NEW"
ESTABLISHED="-m state --state ESTABLISHED"
################################################################################
#
# Initialisation d'iptables
#
################################################################################
# Effacer toutes les regles dans toutes les tables.
$IPT -t filter -F
$IPT -t mangle -F
$IPT -t nat -F
# Effacer toutes les chaines utilisateurs dans toutes les tables.
$IPT -t filter -X
$IPT -t mangle -X
$IPT -t nat -X
# Creation des chaines de LOG
$IPT -N LOG_DROP
$IPT -A LOG_DROP -j LOG --log-prefix '[IPTABLES DROP] : '
$IPT -A LOG_DROP -j DROP
$IPT -N LOG_ACCEPT
$IPT -A LOG_ACCEPT -j LOG --log-prefix '[IPTABLES ACCEPT] : '
$IPT -A LOG_ACCEPT -j ACCEPT
################################################################################
#
# POlices par defaut des tables
#
################################################################################
# Filter
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
# Nat
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
# Mangle
$IPT -t mangle -P PREROUTING ACCEPT
$IPT -t mangle -P POSTROUTING ACCEPT
$IPT -t mangle -P OUTPUT ACCEPT
################################################################################
#
# Regles de la table FILTER
#
################################################################################
############## LAN #################
# Je rejete tout ce qui entre pour le poste firewall qui n'est pas deja connecté
$IPT -A FORWARD $ESTABLISHED -p tcp --syn -j LOG_DROP
$IPT -A FORWARD $ESTABLISHED -j ACCEPT
# Protection contre le syn-flood
$IPT -A FORWARD -s $ALLNET -p TCP --tcp-flags ALL SYN -m limit --limit 1/s -j ACCEPT
# Protection contre le test de port furtif
$IPT -A FORWARD -p TCP --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
# Protection contre le ping de la mort
$IPT -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
# DNS
$IPT -A FORWARD $NEW -o $INET_IFACE -s $LAN_IP_RANGE -d $DNS_SERVERS -p udp --sport 1024: --dport domain -j ACCEPT
$IPT -A FORWARD $NEW -o $INET_IFACE -s $LAN_IP_RANGE -d $DNS_SERVERS -p tcp --tcp-flags ALL SYN --sport 1024: --dport domain -j ACCEPT
# web section
$IPT -A FORWARD $NEW -o $INET_IFACE -s $LAN_IP_RANGE -d $ALLNET -p tcp --tcp-flags ALL SYN --sport 1024: --dport http -j ACCEPT
$IPT -A FORWARD $NEW -o $INET_IFACE -s $LAN_IP_RANGE -d $ALLNET -p tcp --tcp-flags ALL SYN --sport 1024: --dport https -j ACCEPT
# SSH section
$IPT -A FORWARD $NEW -o $INET_IFACE -s $LAN_IP_RANGE -d $ALLNET -p tcp --tcp-flags ALL SYN --sport 1024: --dport ssh -j ACCEPT
# pop3
$IPT -A FORWARD $NEW -o $INET_IFACE -s $LAN_IP_RANGE -d $ALLNET -p tcp --tcp-flags ALL SYN --sport 1024: --dport pop3 -j ACCEPT
# smtp
$IPT -A FORWARD $NEW -o $INET_IFACE -s $LAN_IP_RANGE -d $ALLNET -p tcp --tcp-flags ALL SYN --sport 1024: --dport smtp -j ACCEPT
# FTP Passif
$IPT -A FORWARD $NEW -o $INET_IFACE -s $LAN_IP_RANGE -d $ALLNET -p tcp --sport 1024: --dport 21 --syn -j ACCEPT
$IPT -A FORWARD $ESTABLISHED -o $INET_IFACE -s $LAN_IP_RANGE -d $ALLNET -p tcp --sport 1024: --dport 21 ! --syn -j ACCEPT
# FTP Actif
$IPT -A FORWARD $NEW -o $INET_IFACE -s $LAN_IP_RANGE -d $ALLNET -p tcp --sport 21 --dport 1024: --syn -j ACCEPT
$IPT -A FORWARD $ESTABLISHED -o $INET_IFACE -s $LAN_IP_RANGE -d $ALLNET -p tcp --sport 21 --dport 1024: ! --syn -j ACCEPT
############## FIREWALL #################
# Je rejete tout ce qui entre pour le poste firewall qui n'est pas deja connecté
$IPT -A INPUT $ESTABLISHED -p tcp --syn -j DROP # --syn = --tcp-flags ACK,RST,SYN: match TCP dont flag SYN est 1 et flags ACK, RST 0
$IPT -A INPUT $ESTABLISHED -j ACCEPT # laisse passer les autres connections dejas etablies
# Je rejete tout ce qui sort du poste firewall qui n'est pas deja connecté
$IPT -A OUTPUT $ESTABLISHED -p tcp --syn -j LOG_DROP
$IPT -A OUTPUT $ESTABLISHED -j ACCEPT
# DNS (firewall)
$IPT -A OUTPUT $NEW -o $INET_IFACE -s $INET_IP -d $DNS_SERVERS -p udp --sport 1024: --dport domain -j ACCEPT
$IPT -A OUTPUT $NEW -o $INET_IFACE -s $INET_IP -d $DNS_SERVERS -p tcp --tcp-flags ALL SYN --sport 1024: --dport domain -j ACCEPT
# port 80(http) et 443(https)
$IPT -A OUTPUT -o $INET_IFACE --protocol tcp --dport https -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -o $INET_IFACE --protocol tcp --dport http -m state --state NEW,ESTABLISHED -j ACCEPT
# J'accepte tout ce qui vient de ma machine loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
#################################################################################
#
# Règles du firewall
#
#################################################################################
# Masquerade
$IPT -t nat -A POSTROUTING -s $LAN_IP_RANGE -o $INET_IFACE -j MASQUERADE
# Activer le FORWARDING
echo 1 > /proc/sys/net/ipv4/ip_forward
#########################################################################################################################
#
# Toutes les règles qui n'ont pas passé les regles precedente sont loguer dans syslog puis DROP
#
#########################################################################################################################
iptables -A FORWARD -j LOG_DROP
iptables -A INPUT -j LOG_DROP
iptables -A OUTPUT -j LOG_DROP
|