tian_firewall

#!/bin/bash

#Un simple script permettant de spécifier des règles de filtrage
#Il doit bien sûr être adapté aux besoins spécifiques.
#En le lançant avec le paramètre stop, les règles sont supprimées.
#Sans paramètre les règles sont crées.

IF=ppp0

HIGH_PORTS="1024:65535"
FTP_CONTROL_PORT=21
FTP_DATA_PORT=20
SSH_PORTS=80
POP_IN_PORT=8080
POP_OUT_PORT=110
POP_OUT_IP=62.39.122.15
SMTP_IN_PORT=8181
SMTP_OUT_PORT=25
SMTP_OUT_IP=62.39.122.19
HTTP_PORTS=119

export PATH="/bin:/sbin:/usr/sbin"

#Modules necessaires
modprobe ip_tables
modprobe ip_conntrack
modprobe ip_conntrack_ftp

#Vide les regles
iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X

if [ "$1" = "stop" ]
then
    echo "Firewall arrêté"
    exit
fi

echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
for interface in /proc/sys/net/ipv4/conf/*/rp_filter
do
   echo "1" > ${interface}
done
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

#NAT
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $IF -j MASQUERADE

#Autorise les connexions de l'interieur
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#Chaine pour le blacklistage d'IP
iptables -N blacklist

#Cible pour le blacklistage
iptables -N bllogdeny
iptables -t filter -A bllogdeny -j LOG --log-prefix "blacklisted: "
iptables -t filter -A bllogdeny -j DROP

#Faire passer tout ce qui entre par cette chaine
iptables -t filter -A INPUT -j blacklist

#Autorise la connexion FTP
iptables -A INPUT -i $IF -p tcp --dport $FTP_CONTROL_PORT -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o $IF -p tcp --sport $FTP_CONTROL_PORT -m state --state ESTABLISHED -j ACCEPT

#FTP actif
iptables -A INPUT -i $IF -p tcp --dport $FTP_DATA_PORT -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o $IF -p tcp --sport $FTP_DATA_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT

#FTP passif
iptables -A INPUT -i $IF -p tcp --sport $HIGH_PORTS --dport $HIGH_PORTS -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o $IF -p tcp --sport $HIGH_PORTS --dport $HIGH_PORTS -m state --state ESTABLISHED -j ACCEPT

#Autorise SSH
iptables -t filter -A INPUT -p tcp --destination-port $SSH_PORTS -j ACCEPT

#Autorise HTTPD
iptables -t filter -A INPUT -p tcp --destination-port $HTTP_PORTS -j ACCEPT

#Interdire et loger tout le reste
iptables -N logdeny
iptables -t filter -A logdeny -j LOG --log-prefix "iptables: "
iptables -t filter -A logdeny -j DROP

#Autoriser tout ce qui vient de l'interface de boucle locale
iptables -t filter -A INPUT -i lo -j ACCEPT
#Autoriser tout ce qui vient de l'interface vmware
iptables -t filter -A INPUT -i vmnet1 -j ACCEPT
#Interdire le reste
iptables -t filter -A INPUT -m state --state NEW,INVALID -j logdeny

echo "Firewall demarré"