commit b3fb2ce6b921687dfc24d443b044b4317e45594b Author: Gregory Colpart Date: Mon Aug 10 19:02:09 2009 +0200 Import files from http://www.gcolpart.com/hacks/ diff --git a/firewall.rc b/firewall.rc new file mode 100644 index 0000000..6f2fe3f --- /dev/null +++ b/firewall.rc @@ -0,0 +1,62 @@ +# Fichier de configuration +# pour minifirewall + +# version 0.1 - 12 juillet 2007 $Id: firewall.rc,v 1.2 2007/07/12 19:08:59 reg Exp $ + +# Interface concernee +INT='eth0' + +# IP associee +INTIP='192.168.0.2' +INTLAN='192.168.0.0/24' + +# trusted ip addresses +TRUSTEDIPS='62.212.121.90 62.212.111.216' + +# privilegied ip addresses +# (trusted ip addresses *are* privilegied) +PRIVILEGIEDIPS='' + +# Services "publics" +SERVICESTCP1='21 25 53 993 995' +SERVICESUDP1='53' + +# Services "semi-publics" +SERVICESTCP2='22 25 53 80 110 143 443' +SERVICESUDP2='' + +# Services "prives" +SERVICESTCP3='636 5666' +SERVICESUDP3='' + +################### SORTANTS + +# DNS +DNSSERVEURS='85.31.205.33 78.153.240.29' + +# HTTP : security.d.o x3, zidane, modsecurity www.debian.org +# /!\ Possibilite d'utiliser des noms de domaines +# mais il est conseiller de placer un rechargement +# du minifirewall en crontab +HTTPSITES='security.debian.org 85.31.205.33 80.25.139.226 www.debian.org' + +# HTTPS +HTTPSSITES='' + +# FTP +FTPSITES='' + +# SSH +SSHOK='0.0.0.0/0' + +# SMTP +SMTPOK='0.0.0.0/0' + +# NTP +NTPOK='78.153.240.29' + + +################### Specific rules +# /sbin/iptables .... +# /sbin/iptables .... +# /sbin/iptables .... diff --git a/minifirewall b/minifirewall new file mode 100644 index 0000000..2d46a7c --- /dev/null +++ b/minifirewall @@ -0,0 +1,305 @@ +#!/bin/sh + +# version 0.1.1 - 13 avril 2009 : firewall.rc est charge un peu plus loin +# version 0.1 - 12 juillet 2007 $Id: minifirewall,v 1.6 2007/07/12 19:08:59 reg Exp $ + +# Copyright (c) 2007 Gregory Colpart +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License. + +# Script netfilter/iptables +# http://netfilter.org/ +# +# Designed for Linux kernel 2.4/2.6 +# http://www.kernel.org/ + +# Description +# script pour machine unique + +### +# Configuration des variables +### + +# chemin iptables +IPT=/sbin/iptables + +# variables TCP/IP +LOOPBACK='127.0.0.0/8' +CLASSA='10.0.0.0/8' +CLASSB='172.16.0.0/12' +CLASSC='192.168.0.0/16' +CLASSD='224.0.0.0/4' +CLASSE='240.0.0.0/5' +ALL='0.0.0.0' +BROAD='255.255.255.255' +PORTSROOT='0:1023' +PORTSUSER='1024:65535' + + +case "$1" in + start) + + echo "Demarrage regles IPTables..." + +# 1.Protections diverses + +# ne pas repondre aux ping broadcast +echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts + +# Ignorer les mauvais messages d'erreurs ICMP +echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses + +# effacer la source des paquets routés +for i in /proc/sys/net/ipv4/conf/*/accept_source_route; do +echo 0 > $i +done + +# activer les TCP SYN cookies evitant des attaques DoS de type TCP-SYN-FLOOD +# cf http://cr.yp.to/syncookies.html +echo 1 > /proc/sys/net/ipv4/tcp_syncookies + +# desactiver les messages ICMP d'information de redirection +# potentiellement dangereux +for i in /proc/sys/net/ipv4/conf/*/accept_redirects; do +echo 0 > $i +done + +for i in /proc/sys/net/ipv4/conf/*/send_redirects; do +echo 0 > $i +done + +# filtrage par chemin inverse: verifie que les reponses sortent bien de l'interface d'arrivee +for i in /proc/sys/net/ipv4/conf/*/rp_filter; do +echo 1 > $i +done + +# log des paquets avec adresse incoherente +for i in /proc/sys/net/ipv4/conf/*/log_martians; do +echo 1 > $i +done + +# 2. Sur la machine + +$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 + +test -f /etc/firewall.rc && . /etc/firewall.rc + +# trusted ip addresses +$IPT -N ONLYTRUSTED +$IPT -A ONLYTRUSTED -j LOG_DROP +for x in $TRUSTEDIPS + do + $IPT -I ONLYTRUSTED -s $x -j ACCEPT + done + +# privilegied ip addresses +# (trusted ip addresses *are* privilegied) +$IPT -N ONLYPRIVILEGIED +$IPT -A ONLYPRIVILEGIED -j ONLYTRUSTED +for x in $PRIVILEGIEDIPS + do + $IPT -I ONLYPRIVILEGIED -s $x -j ACCEPT + done + +# politique + +# par defaut rien ne rentre +$IPT -P INPUT DROP + +# par defaut rien ne transite +$IPT -P FORWARD DROP + +# par defaut tout peut sortir (sinon voir OUTPUTDROP) +$IPT -P OUTPUT ACCEPT + +# On autorise tout sur l'interface loopback +$IPT -A INPUT -i lo -j ACCEPT +# if OUTPUTDROP +#$IPT -A OUTPUT -o lo -j ACCEPT + +# on evite pas mal de paquets "martiens" effet de bord de virus +# notamment W32/Blaster qui attaquait windowsupdate.com +# et dont l'enregistrement DNS a ete change pour 127.0.0.1 +# $IPT -t NAT -I PREROUTING -s $LOOPBACK -i ! lo -j DROP +$IPT -A INPUT -s $LOOPBACK -i ! lo -j DROP + +################################################################# +# Les services accessibles +################################################################# + +# Les services accessibles en local ? +#$IPT -A INPUT -i $INT2 -j ACCEPT +$IPT -A INPUT -s $INTLAN -j ACCEPT + +# Services publics +for x in $SERVICESTCP1 + do + $IPT -A INPUT -p tcp --dport $x -j ACCEPT + done + +for x in $SERVICESUDP1 + do + $IPT -A INPUT -p udp --dport $x -j ACCEPT + done + +# Services semi-publics +for x in $SERVICESTCP2 + do + $IPT -A INPUT -p tcp --dport $x -j ONLYPRIVILEGIED + done + +for x in $SERVICESUDP2 + do + $IPT -A INPUT -p udp --dport $x -j ONLYPRIVILEGIED + done + +# Services prives +for x in $SERVICESTCP3 + do + $IPT -A INPUT -p tcp --dport $x -j ONLYTRUSTED + done + +for x in $SERVICESUDP3 + do + $IPT -A INPUT -p udp --dport $x -j ONLYTRUSTED + done + +################################################################# +# Les services auxquels la machine peut acceder +################################################################# + +# DNS +# autoriser a recevoir des reponses DNS +for x in $DNSSERVEURS + do + $IPT -A INPUT -p tcp ! --syn --sport 53 --dport $PORTSUSER -s $x -j ACCEPT + $IPT -A INPUT -p udp --sport 53 --dport $PORTSUSER -s $x -m state --state ESTABLISHED,RELATED -j ACCEPT + done + +# HTTP +# autoriser a se connecter a certaines IP en http (miroirs debian par exemple) +for x in $HTTPSITES + do + $IPT -A INPUT -p tcp ! --syn --sport 80 --dport $PORTSUSER -s $x -j ACCEPT + done + +# HTTPS +for x in $HTTPSSITES + do + $IPT -A INPUT -p tcp ! --syn --sport 443 --dport $PORTSUSER -s $x -j ACCEPT + done + +# FTP +# autoriser a se connecter a certaines IP en ftp (miroirs debian par exemple) +for x in $FTPSITES + do + # requetes exterieures sur le canal de controle + $IPT -A INPUT -p tcp ! --syn --sport 21 --dport $PORTSUSER -s $x -j ACCEPT + # FTP port-mode sur le canal de donnees + $IPT -A INPUT -p tcp --sport 20 --dport $PORTSUSER -s $x -j ACCEPT + # FTP passive-mode sur le canal de donnees + # ATTENTION, cela active aussi les connexions sur tous les ports TCP > 1024 pour cette machine + $IPT -A INPUT -p tcp ! --syn --sport $PORTSUSER --dport $PORTSUSER -s $x -j ACCEPT + done + +# autoriser a se connecter sur certaines IP par SSH +for x in $SSHOK + do + $IPT -A INPUT -p tcp ! --syn --sport 22 -s $x -j ACCEPT + done + +# SMTP +for x in $SMTPOK + do + $IPT -A INPUT -p tcp ! --syn --sport 25 --dport $PORTSUSER -j ACCEPT + done + +# NTP +# autoriser synchronisation ntpdate +for x in $NTPOK + do + $IPT -A INPUT -p udp --sport 123 -s $x -j ACCEPT + done + +# ICMP +$IPT -N ICMP_STACK +$IPT -A INPUT -p icmp -j ICMP_STACK +# Gestion des Pings de l'exterieur (on autorise 3 Pings/s) +$IPT -A ICMP_STACK -p icmp --icmp-type echo-request -m limit --limit 3/s -i $INT -j ACCEPT +$IPT -A ICMP_STACK -p icmp --icmp-type echo-reply -m limit --limit 3/s -i $INT -j ACCEPT +$IPT -A ICMP_STACK -p icmp --icmp-type echo-request -i $INT -j DROP +$IPT -A ICMP_STACK -p icmp --icmp-type echo-reply -i $INT -j DROP +$IPT -A ICMP_STACK -j ACCEPT + +# 3.Forward + +# On autorise pas le forward a priori +echo 0 > /proc/sys/net/ipv4/ip_forward + + + echo "Fin du chargement des regles... " + ;; + + stop) + + echo "On vide toutes les regles et on accepte tout..." + + # On supprime toutes les regles + $IPT -F + #$IPT -t nat -F + $IPT -t mangle -F + + # On accepte tout + $IPT -P INPUT ACCEPT + $IPT -P OUTPUT ACCEPT + $IPT -P FORWARD ACCEPT + #$IPT -t nat -P PREROUTING ACCEPT + #$IPT -t nat -P POSTROUTING ACCEPT + + # On supprime les tables creees + $IPT -X LOG_DROP + $IPT -X LOG_ACCEPT + $IPT -X ONLYPRIVILEGIED + $IPT -X ONLYTRUSTED + $IPT -X ICMP_STACK + + echo "OK" + ;; + + status) + + $IPT -L -n -v --line-numbers + #$IPT -t nat -L -n -v --line-numbers + $IPT -t mangle -L -n -v --line-numbers + ;; + + reset) + + echo "On remet les compteurs a zero..." + + $IPT -Z + #$IPT -t nat -Z + $IPT -t mangle -Z + ;; + + restart) + + $0 stop + $0 start + ;; + + *) + + echo "Usage: $0 {start|stop|restart|status|reset|squid}" + exit 1 +esac + +exit 0 +