7,9 → 7,9 |
# 2 for secure admin (ssh); |
# 3 for exterior access attempts. |
|
|
IPTABLES="/sbin/iptables" |
FILTERING="no" |
PROTO_FILTERING="no" |
DNS_FILTERING="no" |
QOS="no" |
EXTIF="eth0" |
INTIF="eth1" |
41,29 → 41,10 |
$IPTABLES -t nat -P POSTROUTING ACCEPT |
$IPTABLES -t nat -P OUTPUT ACCEPT |
|
# Création des chaînes utilisateur |
# User defined chains |
$IPTABLES -N SYN-FLOOD |
|
# Tout passe sur loopback |
# accept all on loopback |
$IPTABLES -A INPUT -i lo -j ACCEPT |
|
# Blocage des tentatives de spoofing de l'adresse de loopback |
# Block all attempts to spoof the loopback address |
$IPTABLES -A INPUT -s 127.0.0.0/8 -j DROP |
$IPTABLES -A INPUT -d 127.0.0.0/8 -j DROP |
|
# Blocage des tentatives de spoofing de l'adresse IP côté interne |
# Block all attempts to spoof the local IP address |
$IPTABLES -A INPUT -s $PRIVATE_IP -j DROP |
|
# Blocage des attaques de type SYN FLOOD |
# Block Syn Flood attacks |
#$IPTABLES -A INPUT -p tcp -m 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 |
|
# On élimine les paquets "NEW not SYN" |
# Ensure that TCP connections start with syn packets |
$IPTABLES -A INPUT -p tcp -m tcp ! --syn -m state --state NEW -j DROP |
94,13 → 75,6 |
# Drop broadcast & multicast |
$IPTABLES -A INPUT -m addrtype --dst-type BROADCAST,MULTICAST -j DROP |
|
# Règles d'antispoofing |
# Antispoofing rules with log |
$IPTABLES -A INPUT -i $TUNIF ! -s $PRIVATE_NETWORK_MASK -j ULOG --ulog-prefix "RULE Antispoof1 -- DENY " |
$IPTABLES -A INPUT -i $TUNIF ! -s $PRIVATE_NETWORK_MASK -j DROP |
$IPTABLES -A INPUT -i $EXTIF -s $PRIVATE_NETWORK_MASK -j ULOG --ulog-prefix "RULE Antispoof2 -- DENY " |
$IPTABLES -A INPUT -i $EXTIF -s $PRIVATE_NETWORK_MASK -j DROP |
|
# On laisse passer les ICMP echo-request et echo-reply en provenance du LAN |
# Allow ping (icmp N°0 & 8) from LAN |
$IPTABLES -A INPUT -i $TUNIF -s $PRIVATE_NETWORK_MASK -p icmp --icmp-type 0 -j ACCEPT |
121,11 → 95,27 |
# Conntrack on forward |
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT |
|
############################### |
# If DNS filter is activate # |
############################### |
# Redirection des flux DNS vers le port 54 (dns+blackhole) sauf pour les IP en exceptions |
if [ $DNS_FILTERING = "yes" ]; then |
# Compute exception IP |
nb_exceptions=`wc -w /usr/local/etc/alcasar-filter-exceptions | cut -d" " -f1` |
if [ $nb_exceptions != "0" ] |
then |
while read ip_exception |
do |
$IPTABLES -A PREROUTING -t nat -i $TUNIF -p udp -s $ip_exception -d $PRIVATE_IP --dport domain -j ACCEPT |
done < /usr/local/etc/alcasar-filter-exceptions |
fi |
$IPTABLES -A PREROUTING -t nat -i $TUNIF -p udp -d $PRIVATE_IP --dport domain -j REDIRECT --to-port 54 |
fi |
##################################### |
# If protocols filter is activate # |
##################################### |
if [ $FILTERING = "yes" ]; then |
# Mise en place des exceptions (adresses IP des machines ne faisant pas l'objet de filtrage) |
# filtrage de protocoles sauf pour les IP en exceptions |
if [ $PROTO_FILTERING = "yes" ]; then |
# Compute exception IP |
nb_exceptions=`wc -w /usr/local/etc/alcasar-filter-exceptions | cut -d" " -f1` |
if [ $nb_exceptions != "0" ] |
134,10 → 124,9 |
do |
$IPTABLES -A FORWARD -i $TUNIF -s $ip_exception -m state --state NEW -j ULOG --ulog-prefix "RULE IP-exception -- ACCEPT " |
$IPTABLES -A FORWARD -i $TUNIF -s $ip_exception -m state --state NEW -j ACCEPT |
$IPTABLES -A PREROUTING -t nat -i $TUNIF -p udp -s $ip_exception -d $PRIVATE_IP --dport domain -j REDIRECT --to-port 54 |
done < /usr/local/etc/alcasar-filter-exceptions |
fi |
# Autorisation de protocoles non commentés |
# Autorisation des protocoles non commentés |
# Allow non comment protocols |
while read svc_line |
do |
178,7 → 167,8 |
########################################################################################### |
# Direct input from local network (dns, ntp, https, http, ssh and 3990 (user disconnect) # |
########################################################################################### |
$IPTABLES -A INPUT -i $TUNIF -d $PRIVATE_IP -p udp --dport domain -j ACCEPT # dnsmasq pour tous |
$IPTABLES -A INPUT -i $TUNIF -d $PRIVATE_IP -p udp --dport domain -j ACCEPT # dnsmasq without forward |
$IPTABLES -A INPUT -i $TUNIF -d $PRIVATE_IP -p udp --dport 54 -j ACCEPT # dnsmasq with blackhole |
$IPTABLES -A INPUT -i $TUNIF -d $PRIVATE_IP -p udp --dport ntp -j ACCEPT |
$IPTABLES -A INPUT -i $TUNIF -d $PRIVATE_IP -p tcp --dport https -j ACCEPT |
$IPTABLES -A INPUT -i $TUNIF -d $PRIVATE_IP -p tcp --dport http -j ACCEPT |
190,17 → 180,15 |
# Conntrack on INPUT |
$IPTABLES -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT |
|
# On interdit les connexions directes au port utilisé par DansGuardian (8080) et par dnsmasq-forward (54) |
# On interdit les connexions directes au port utilisé par DansGuardian (8080) |
# Les packets concernés ont fait l'objet d'un marquage dans la table mangle |
# lors d'une règle de PREROUTING (voir plus bas) |
# Deny direct connections on DansGuardian port (8080) and on dnsmasq-forward port (54) |
# Deny direct connections on DansGuardian port (8080) |
# The concerned paquets are marked by a pre-routing rule (see further) |
$IPTABLES -A INPUT -i $TUNIF -p tcp --dport 8080 -m mark --mark 1 -j DROP |
$IPTABLES -A INPUT -i $TUNIF -p udp --dport 54 -m mark --mark 1 -j DROP |
# Autorisation des connexions à DansGuardian et dnsmasq-forward |
# Allow connections for DansGuardian and forward-mode dnsmasq |
# Autorisation des connexions à DansGuardian |
# Allow connections for DansGuardian |
$IPTABLES -A INPUT -i $TUNIF -p tcp --dport 8080 -m state --state NEW --syn -j ACCEPT |
$IPTABLES -A INPUT -i $TUNIF -p udp --dport 54 -j ACCEPT |
|
# Journalisation des requètes HTTP (seulement des paquets SYN) |
# Log HTTP requests (only syn) |
208,13 → 196,11 |
# On redirige les requêtes HTTP vers DansGuardian (transparent pour les utilisateurs) |
# Redirect HTTP request in DansGuardian (transparent proxy) |
$IPTABLES -A PREROUTING -t nat -i $TUNIF -p tcp ! -d $PRIVATE_IP --dport http -j REDIRECT --to-port 8080 |
# Journalisation et marquage des paquets qui tentent d'accéder directement à DansGuardian et à dnsmasq-forward |
# Journalisation et marquage des paquets qui tentent d'accéder directement à DansGuardian |
# pour pouvoir les supprimer en INPUT (voir plus haut) |
# Mark the dansguardian or dnsmasq bypass attempts |
# Mark the dansguardian bypass attempts |
$IPTABLES -A PREROUTING -t nat -i $TUNIF -p tcp -d $PRIVATE_IP -m tcp --dport 8080 -j ULOG --ulog-prefix "RULE direct-proxy -- DENY " |
$IPTABLES -A PREROUTING -t nat -i $TUNIF -p udp -d $PRIVATE_IP -m udp --dport 54 -j ULOG --ulog-prefix "RULE direct-dns -- DENY " |
$IPTABLES -A PREROUTING -t mangle -i $TUNIF -p tcp -d $PRIVATE_IP -m tcp --dport 8080 -j MARK --set-mark 1 |
$IPTABLES -A PREROUTING -t mangle -i $TUNIF -p udp -d $PRIVATE_IP -m udp --dport 54 -j MARK --set-mark 1 |
|
# Journalisation et rejet des connexions (autres que celles autorisées) effectuées depuis le LAN |
# Deny and log on INPUT from the LAN |
232,6 → 218,7 |
# On laisse tout sortir sur toutes les cartes sauf celle qui est connectée sur l'extérieur |
# Everything is allowed but traffic through outside network interface |
$IPTABLES -A OUTPUT ! -o $EXTIF -j ACCEPT |
|
# On autorise les requêtes DNS vers les serveurs DNS identifiés |
# Allow DNS requests to identified DNS servers |
$IPTABLES -A OUTPUT -o $EXTIF -d $DNSSERVERS -p udp --dport domain -m state --state NEW -j ACCEPT |