Subversion Repositories ALCASAR

Compare Revisions

Ignore whitespace Rev 519 → Rev 520

/scripts/alcasar-iptables.sh
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
/scripts/alcasar-conf.sh
3,7 → 3,6
# $Author$
# by rexy
# Ce script permet de créer ou de charger l'archive des fichiers de configuration (/tmp/alcasar-conf.tar.gz)
 
DIR_UPDATE="/tmp/conf" # répertoire de stockage des fichier de conf pour une mise à jour
DIR_WEB="/var/www/html" # répertoire du centre de gestion
DIR_BIN="/usr/local/bin" # répertoire des scripts d'admin
111,7 → 110,7
else $DIR_SBIN/alcasar-bl.sh --on
fi
# Récupération des paramêtres locaux (règles de filtrage, fichiers d'exception, comptes de gestion, etc.)
[ -d $DIR_UPDATE/etc ] cp -rf $DIR_UPDATE/etc/* $DIR_ETC/
[ -d $DIR_UPDATE/etc ] && cp -rf $DIR_UPDATE/etc/* $DIR_ETC/
# Prise en compte des comptes de gestion (admin + manager + backup)
$DIR_SBIN/alcasar-profil.sh --list
# On active/désactive le filtrage de protocoles
/scripts/sbin/alcasar-nf.sh
1,8 → 1,10
#/bin/sh
# $Id$
 
# active ou desactive le filtrage réseau
# active ou desactive le filtrage de protocoles réseau
# enable or disable the network protocols filter
# by rexy
 
SED="/bin/sed -i"
FIC_SERVICES="/usr/local/etc/alcasar-services"
FIC_EXCEPTIONS="/usr/local/etc/alcasar-filter-exceptions"
22,7 → 24,7
;;
-on|-on)
# activation du filtrage réseau
$SED "s?^FILTERING.*?FILTERING=\"yes\"?g" /usr/local/bin/alcasar-iptables.sh
$SED "s?^PROTO_FILTERING.*?PROTO_FILTERING=\"yes\"?g" /usr/local/bin/alcasar-iptables.sh
# tri du fichier de services
$SED "/^$/d" $FIC_SERVICES # suppression lignes vides
sort -k2n $FIC_SERVICES > /tmp/alcasar-services-sort
37,7 → 39,7
;;
--off|-off)
# désactivation du filtrage réseau
$SED "s?^FILTERING.*?FILTERING=\"no\"?g" /usr/local/bin/alcasar-iptables.sh
$SED "s?^PROTO_FILTERING.*?PROTO_FILTERING=\"no\"?g" /usr/local/bin/alcasar-iptables.sh
/usr/local/bin/alcasar-iptables.sh
;;
*)
/scripts/sbin/alcasar-bl.sh
15,7 → 15,6
IP_RETOUR="192.168.182.1"
BL_SERVER="cri.univ-tlse1.fr"
SED="/bin/sed -i"
 
# Récupération de l'archive de la BL Toulouse
function transfert () {
mkdir -p $DIR_tmp
96,12 → 95,11
cat_choice
$SED "s/^reportinglevel =.*/reportinglevel = 3/g" /etc/dansguardian/dansguardian.conf
$SED "s?^#\"?\"?g" $DIR_DG/urlregexplist # Enable 'safesearch'
if [ "$PARENT_SCRIPT" != "/usr/local/bin/alcasar-conf.sh" ] # on ne relance pas les processus lors d'une install
$SED "s?^DNS_FILTERING.*?DNS_FILTERING=\"yes\"?g" /usr/local/bin/alcasar-iptables.sh
if [ "$PARENT_SCRIPT" != "/usr/local/bin/alcasar-conf.sh" ] # on ne relance lors d'une install
then
service dansguardian restart
service dnsmasq stop
sleep 1
service dnsmasq start
/usr/local/bin/alcasar-iptables.sh
fi
;;
# désactivation du filtrage
109,12 → 107,11
rm -rf $DIR_DNS_FILTER_ENABLED/*
$SED "s/^reportinglevel =.*/reportinglevel = -1/g" /etc/dansguardian/dansguardian.conf
$SED "s?^[^#]?#&?g" $DIR_DG/urlregexplist # Disable 'safesearch'
if [ "$PARENT_SCRIPT" != "/usr/local/bin/alcasar-conf.sh" ] # on ne relance pas les processus lors d'une install
$SED "s?^DNS_FILTERING.*?DNS_FILTERING=\"no\"?g" /usr/local/bin/alcasar-iptables.sh
if [ "$PARENT_SCRIPT" != "/usr/local/bin/alcasar-conf.sh" ] # on ne relance lors d'une install
then
service dansguardian restart
service dnsmasq stop
sleep 1
service dnsmasq start
/usr/local/bin/alcasar-iptables.sh
fi
;;
# Mise a jour de la blacklist 'Toulouse' et adaptation à dansguardian et dnsmasq
/scripts/alcasar-watchdog.sh
18,7 → 18,7
IFS=$'\n'
 
# Fonction appelée si un Pb de connectivité Internet
# On fait pointer les usagers sur une page d'erreur
# On fait pointer les usagers sur l'adresse locale
function ext_down_alert ()
{
case $EXT_DOWN in
35,11 → 35,12
/bin/sed -i "s?diagnostic =.*?diagnostic = \"can't contact the Internet DNS\";?g" $Index_Page
;;
esac
net_pb=`cat /etc/dnsmasq.d/alcasar-dnsmasq.conf|grep "address=/#/"|wc -l`
if [ $net_pb != "1" ]
net_pb=`cat /etc/dnsmasq.conf|grep "address=/#/"|wc -l`
if [ $net_pb = "0" ] # on alerte les usagers (si ce n'est pas déjà le cas).
then
/bin/sed -i "s?^\$network_pb.*?\$network_pb = True;?g" $Index_Page
/bin/sed -i "s?^conf-dir=.*?address=\/#\/$PRIVATE_IP?g" /etc/dnsmasq.d/alcasar-dnsmasq.conf
/bin/sed -i "s?^conf-dir=.*?address=\/#\/$PRIVATE_IP?g" /etc/dnsmasq-blackhole.conf
/bin/sed -i "1i\address=\/#\/$PRIVATE_IP" /etc/dnsmasq.conf
/etc/init.d/dnsmasq restart
fi
}
68,12 → 69,13
then
ext_down_alert
else
# sinon, on rebascule en mode normal
net_pb=`cat /etc/dnsmasq.d/alcasar-dnsmasq.conf|grep "address=/#/"|wc -l`
if [ $net_pb -eq "1" ]
# sinon, le cas échéant, on rebascule en mode normal
net_pb=`cat /etc/dnsmasq.conf|grep "address=/#/"|wc -l`
if [ $net_pb != "0" ]
then
/bin/sed -i "s?^\$network_pb.*?\$network_pb = False;?g" $Index_Page
/bin/sed -i "s?^address=\/#\/.*?conf-dir=/usr/local/etc/alcasar-dnsfilter-enabled?g" /etc/dnsmasq.d/alcasar-dnsmasq.conf
/bin/sed -i "s?^address=\/#\/.*?conf-dir=/usr/local/etc/alcasar-dnsfilter-enabled?g" /etc/dnsmasq-blackhole.conf
/bin/sed -i "/^address=/d" /etc/dnsmasq.conf
/etc/init.d/dnsmasq restart
fi
fi
93,7 → 95,7
rm $tmp_file
fi
# on traite chaque équipements connus de chilli
for system in `/usr/sbin/chilli_query list`
for system in `/usr/sbin/chilli_query list |grep -v "\.0\.0\.0"`
do
active_ip=`echo $system |cut -d" " -f2`
active_session=`echo $system |cut -d" " -f5`