From 7345882d8afd79f84dc0551c2a8a3a9db82ed04c Mon Sep 17 00:00:00 2001 From: kueller Date: Mon, 3 Jan 2011 10:48:06 +0000 Subject: [PATCH] Neue Version V963 git-svn-id: svn://svn.compuextreme.de/Viitor/V963/Viitor_iptables@5933 504e572c-2e33-0410-9681-be2bf7408885 --- etc/init.d/.firewallfunc | 1226 ++++++++++++++++++++++++++++++ etc/init.d/firewall | 461 +++++++++++ etc/init/iptables.conf | 20 + etc/sysconfig/templates/firewall | 266 +++++++ init/genpkg | 40 + 5 files changed, 2013 insertions(+) create mode 100755 etc/init.d/.firewallfunc create mode 100644 etc/init.d/firewall create mode 100644 etc/init/iptables.conf create mode 100644 etc/sysconfig/templates/firewall create mode 100644 init/genpkg diff --git a/etc/init.d/.firewallfunc b/etc/init.d/.firewallfunc new file mode 100755 index 0000000..f27ddae --- /dev/null +++ b/etc/init.d/.firewallfunc @@ -0,0 +1,1226 @@ +#!/bin/bash +#Framework, welches ein komplettes Linux System aus den Sourcen erstellt +# +#Lage dieser Datei im Archiv: $Source$ +# +#(c) 2004-2006, Harald Kueller, CompuExtreme +#This program is free software; you can redistribute it and/or +#modify ist under the terms of the GNU General Public License +#as published by the Free Software Foundation; either version +#2 of the License, or (at your option) any later version. +# +#This program is distributed in the hope that it will be useful, +#but WITHOUT ANY WARRANTY; without even the implied warranty of +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +#See the GNU General Public License for more details. +# +#You should have received a copy of the GNU General Public License +#along with this program; if not write to the Free Software Foundation, +#Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +#Beschreibung: +#Initialisierungsscript fuer die Firewall einrichtung mit IPTables. +#Verwendet das Konfigurationsfile /etc/sysconfig/firewall zur Konfiguration +#der Firewall +# +#Enthaltene Funktionen: +# +#FindIP(): Gibt die IP Adresse der konfigurierten Interfaces zurück. +# Wird als Argument ein Netwerk Device uebergeben, so wird nur +# dessen IP Zurückgegeben. +# +#FindNet(): Benoetigt als Argument eine IP Adresse. Gibt die Netzwerk- +# Adresse und die zugehoerige Netmask in "Short" notation zurueck. +# +#LoadDevArray(): Laed die Konfiguration (IP, NetIP, Mask) in ein Array (DEVICE). +# Hierbei erfolgt die Indizierung mit dreistelligen nummern: +# 1. Nummer = Interface Adressierung +# 2. Nummer = Informationstyp +# (1=Devicename, 2. IP Adresse, 3. Net/Mask) +# 3. Nummer = Zugehoerige Information (bei #1# immer 1) +# Damit koennen auch bei einer Konfiguration mit mehreren +# IP Adressen pro Interface diese dem Array entnommen werden. +# +#DefaultRule(): Setzt die Default Rule fuer die INPUT, FORWARD und OUTPUT Table +# auf drop +# +#AllowLoopback(): Schaltet die Komplette LoopBack Kommunikation frei +# Diese wird von vielen diensten innerhalb UNIX benoetigt, +# und sollte daher nicht von der firewall blockiert werden! +# +#AllowInternRouting(): Benoetigt eine Regel sowie ein oder mehrere Devices. +# Das routing zwischen den Angegebenen Devices wird in +# jeder Richtung mit der angegebenen Regel versehen +# (idR. ACCEPT) +# + +# +#Letzte Änderung von: $Author$ +#Datum der letzten Änderung: $Date$ +#Version der Datei: $Revision$ +# +#$Log$ +#Revision 1.8 2007/03/23 11:25:32 kueller +#Neue Funktionen und bugfixes eingepflegt. (Diese laufen auf skylla und sphinx stabil) +# +#Revision 1.7 2006/08/24 21:19:41 kueller +#Viele Funktionen ueberarbeitet. Erkennung der incomming devices optimiert. +#Wird nicht mehr ueber das DEVICES Array mit verschachtelten schleifen gemacht, +#sondern ueber ausgaben von netstat -rn mit zugehoerigen netzadressen -> +#das ist deutlich schneller. +#Ausserdem ausbau und verbesserung diverser Firewall einstellungen. Weiter +#entwicklung des port forwardings auf interne Server -> dem scheint jetzt +#auch mit MASQUERADE zu funktionieren. +#Weiterhin die entschluesselung von "Portnummer;tcp" aufgehoben. dafuer +#werden jetzt jeweils 2 Variablen (1x udp, 1x tcp) definiert, und deren +#inhalte mit -m multiport auf einen schlag uebergeben. Das spart einiges +#an Schleifen und beschleunigt das script emminent. +# +#Revision 1.6 2006/06/30 09:33:02 kueller +#Sonderbehandlung fuer localen zugriff auf syslog eingebaut +# +#Revision 1.5 2004/11/23 19:46:07 kueller +#Debuging und neue Funktionalität der Firewall. Mit der Zeit weiter gewachsen +#im CompuExtreme Netzwerk. +# +#Revision 1.1 2002/11/04 12:03:01 kueller +#Fehlende Funktionssammlung .firewallfunc hinzugefügt. Erweiterung der Firewall +#um MARK Funktionalitaet, sowie Freischaltung von Getunnelten Netzen (letzteres +#ist in der DEBUG Phase und funktioniert noch nicht komplett!) +# +# + +source /etc/init.d/functions + +#Definition von einigen hilfreichen Funktionen + +FindIP() { + DEVICE=$1 + + $IPCFG addr list $DEVICE|awk '{print $1, $2}'\ + |awk '{ if ( $1 == "inet" ) print $2 }'\ + |awk -F / '{ print $1 }' + } + +FindNet() { + IP=$1 + + NETMASK=`getmask $IP` + NETADDR=`getnetaddr $IP $NETMASK` + SHMASK=`GetShortMask $NETMASK` + + echo $NETADDR/$SHMASK + } + +LoadDevArray() { + devzahler=1 + ipzahler=1 + + for i in `$IFCONFIG -a|sed -e "/^ /d"|sed -e "/^$/d"|awk '{ print $1 }'`; do + DEVICE[`echo $devzahler`11]=$i + for j in `FindIP $i`; do + DEVICE[`echo $devzahler`2`echo $ipzahler`]=$j + DEVICE[`echo $devzahler`3`echo $ipzahler`]=`FindNet $j` + (( ipzahler = $ipzahler + 1 )) + done + (( ipzahler = $ipzahler - 1 )) + DEVICE[`echo $devzahler`12]=$ipzahler + (( devzahler = $devzahler + 1 )) + ipzahler=1 + done + } + +FindInDevice() { + IPADDR=$1 + + NETMSK=`getmask $IPADDR` + NETADDR=`getnetaddr $IPADDR $NETMSK` + DEVICE=`netstat -rn|grep $NETADDR|sed -e "/^0.0.0.0/d"|awk '{print $8}'` + if [ ! "$DEVICE" ]; then + DEVICE=`netstat -rn|grep "^0.0.0.0"|awk '{print $8}'` + fi + echo $DEVICE +} + +DefaultRule() { + echo $DEBUG $IPTABLES -P INPUT DROP >>$TMPSCRIPT + echo $DEBUG $IPTABLES -P FORWARD DROP >>$TMPSCRIPT + echo $DEBUG $IPTABLES -P OUTPUT DROP >>$TMPSCRIPT + } + +AllowLoopBack() { + echo $DEBUG $IPTABLES -A INPUT -i lo -j ACCEPT >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A OUTPUT -o lo -j ACCEPT >>$TMPSCRIPT + } + +AllowInternRouting() { + RULE=$1 + shift + zahler=0 + NumDev=1 + unset LOCAL_NET + for k in $*; do + if [ "$k" == "lo" ]; then + LOCAL_NET[$zahler]="127.0.0.0/8" + (( zahler++ )) + else + for l in `netstat -rn|\ + grep $k|\ + sed -e "/^0.0.0.0/d"|\ + awk '{print $1}'`; do + NETMASK=`getmask $l` + SHORTMASK=`GetShortMask $NETMASK` + LOCAL_NET[$zahler]="$l/$SHORTMASK" + (( zahler++ )) + done + fi + done + anznet=$zahler + zahler=0 + + while [ ! $zahler = $anznet ]; do + zahler_dest=0 + while [ ! $zahler_dest = $anznet ]; do + echo $DEBUG $IPTABLES -A FORWARD -s ${LOCAL_NET[$zahler]} -d ${LOCAL_NET[$zahler_dest]} -j $RULE >>$TMPSCRIPT + (( zahler_dest = $zahler_dest + 1 )) + done + (( zahler = $zahler + 1 )) + done + } + +AllowAllDefault() { + SOURCENET=$1 + OUTDEV=$2 + RULE=$3 + + echo $DEBUG $IPTABLES -A FORWARD -s $SOURCENET -o $OUTDEV -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD -d $SOURCENET -i $OUTDEV -j $RULE >>$TMPSCRIPT + } + +ActivateMasq() { + OUTDEV=$1 + MASQNET=$2 + + echo $DEBUG $IPTABLES -t nat \ + -A POSTROUTING \ + -s $MASQNET \ + -o $OUTDEV \ + -j MASQUERADE >>$TMPSCRIPT + } + +AllowLocalServer() { + SERVER=$1 + CLIENT=$2 + PORT=$3 + PROT=$4 + RULE=ACCEPT + + echo $DEBUG $IPTABLES -A FORWARD \ + -s $CLIENT \ + -d $SERVER \ + -p $PROT \ + --dport $PORT \ + -j $RULE >>$TMPSCRIPT +} + +AllowDMZServiceAccess() { + SRVIP=$1 + UDPPORTS=$2 + TCPPORTS=$3 + SRVNETMASK=`getmask $SRVIP` + SRVNET=`getnetaddr $SRVIP $SRVNETMASK` + OUTDEV=`netstat -rn| \ + grep $SRVNET| \ + sed -e "/^0.0.0.0/d" |\ + awk '{print $8}'` + for k in `netstat -rn|\ + sed -e "/$SRVNET/d"|\ + sed -e "/^0.0.0.0/d"|\ + sed -e "/^[A-Z]/d"|\ + awk '{print $8}'`; do + for l in `netstat -rn|\ + grep $k|\ + sed -e "/^0.0.0.0/d"|\ + awk '{print $1}'`; do + NETMASK=`getmask $l` + SHORTMASK=`GetShortMask $NETMASK` + for m in $UDPPORTS; do + echo $DEBUG $IPTABLES -A FORWARD \ + -i $k \ + -o $OUTDEV \ + -d $SRVIP \ + -s $l/$SHORTMASK \ + -p udp \ + -m multiport \ + --destination-ports $m \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -i $OUTDEV \ + -o $k \ + -s $SRVIP \ + -d $l/$SHORTMASK \ + -p udp \ + -m multiport \ + --source-ports $m \ + -j $RULE >>$TMPSCRIPT + done + for m in $TCPPORTS; do + echo $DEBUG $IPTABLES -A FORWARD \ + -i $k \ + -o $OUTDEV \ + -d $SRVIP \ + -s $l/$SHORTMASK \ + -p tcp \ + -m multiport \ + --destination-ports $m \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -o $k \ + -i $OUTDEV \ + -s $SRVIP \ + -d $l/$SHORTMASK \ + -p tcp \ + -m multiport \ + --source-ports $m \ + -j $RULE >>$TMPSCRIPT + done + done + done +} + +LocalAllowWSAll() { + echo + WSIP=`echo $1|sed -e "s/\/.*$//"` + DESTNET=$1 + + WSMASK=`getmask $WSIP` + WSNET=`getnetaddr $WSIP $WSMASK` + NETDEV=`netstat -rn| \ + grep $WSNET| \ + sed -e "/^0.0.0.0/d" | \ + awk '{print $8}'` + if [ ! "$NETDEV" ]; then + WSNET="0.0.0.0" + NETDEV=`netstat -rn|grep "^$WSNET"|awk '{print $8}'` + RIP=`netstat -rn|grep "^$WSNET"|awk '{print $2}'` + WSMASK=`getmask $RIP` + WSNET=`getnetaddr $RIP $WSMASK` + fi + NETBCAST=`getbroadcast $WSNET $WSMASK` + for k in `ip addr list dev $NETDEV|grep $NETBCAST|awk '{print $2}'|sed -e "s/\/.*$//"`; do + for m in tcp udp; do + echo $DEBUG $IPTABLES -A INPUT \ + -p $m \ + -s $DESTNET \ + -d $k \ + -i $NETDEV \ + -j ACCEPT >> $TMPSCRIPT + echo $DEBUG $IPTABLES -A OUTPUT \ + -p $m \ + -s $k \ + -d $DESTNET \ + -o $NETDEV \ + -j ACCEPT >>$TMPSCRIPT + done + done +} + +AllowIntranetService() { + WSIP=$1 + WSPORT=$2 + WSPROT=$3 + + WSMASK=`getmask $WSIP` + WSNET=`getnetaddr $WSIP $WSMASK` + NETDEV=`netstat -rn| \ + grep $WSNET| \ + sed -e "/^0.0.0.0/d" | \ + awk '{print $8}'` + LOCIP=`ifconfig $NETDEV|grep inet|awk '{print $2}'|cut -d":" -f 2` + echo "AllowIntanetService $NETDEV , $LOCIP" + echo $DEBUG $IPTABLES -A OUTPUT \ + -p $WSPROT \ + -d $WSIP \ + -s $LOCIP \ + -o $NETDEV \ + --dport $WSPORT \ + -j ACCEPT >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A INPUT \ + -p $WSPROT \ + -s $WSIP \ + -d $LOCIP \ + -i $NETDEV \ + --sport $WSPORT \ + -j ACCEPT >>$TMPSCRIPT +} + +LocalAllowPortIN() { + UDP=$1 + TCP=$2 + shift + shift + zahler=0 + NumDev=1 + for k in $*; do + while [ "${DEVICE[`echo $NumDev`11]}" ] && [ ! "${DEVICE[`echo $NumDev`11]}" = "$k" ]; do + (( NumDev = $NumDev + 1 )) + done + NumIP=0 + while [ ! "$NumIP" = "${DEVICE[`echo $NumDev`12]}" ]; do + (( NumIP = $NumIP + 1 )) + LOCAL_NET[$zahler]=${DEVICE[`echo $NumDev`3`echo $NumIP`]} + INIP[$zahler]=${DEVICE[`echo $NumDev`2`echo $NumIP`]} + INDEV[$zahler]=${DEVICE[`echo $NumDev`11]} + (( zahler = $zahler + 1 )) + done + NumDev=1 + done + anznet=$zahler + zahler=0 + + while [ ! $zahler = $anznet ]; do + for m in $UDP; do + echo $DEBUG $IPTABLES -A INPUT \ + -p udp \ + -s ${LOCAL_NET[$zahler]} \ + -d ${INIP[$zahler]} \ + -i ${INDEV[$zahler]} \ + --sport 1024: \ + -m multiport \ + --destination-ports $m \ + -j ACCEPT >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A OUTPUT \ + -p udp \ + -s ${INIP[$zahler]} \ + -d ${LOCAL_NET[$zahler]} \ + -o ${INDEV[$zahler]} \ + --dport 1024: \ + -m multiport \ + --source-ports $m \ + -j ACCEPT >>$TMPSCRIPT + done + for m in $TCP; do + echo $DEBUG $IPTABLES -A INPUT \ + -p tcp \ + -s ${LOCAL_NET[$zahler]} \ + -d ${INIP[$zahler]} \ + -i ${INDEV[$zahler]} \ + --sport 1024: \ + -m multiport \ + --destination-ports $m \ + -j ACCEPT >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A OUTPUT \ + -p tcp \ + -s ${INIP[$zahler]} \ + -d ${LOCAL_NET[$zahler]} \ + -o ${INDEV[$zahler]} \ + --dport 1024: \ + -m multiport \ + --source-ports $m \ + -j ACCEPT >>$TMPSCRIPT + done + (( zahler = $zahler + 1 )) + done + } + +AllowWSPortOUT() { + OUTDEV=$1 + WSIP=$2 + UDPPORTS=$3 + TCPPORTS=$4 + RULE=$5 + + INDEV=`FindInDevice $WSIP` + for m in $UDPPORTS; do + echo $DEBUG $IPTABLES -A FORWARD \ + -p udp \ + -s $WSIP \ + --sport 1024: \ + -o $OUTDEV \ + -i $INDEV \ + -m multiport \ + --destination-ports $m \ + -m state \ + --state NEW,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p udp \ + -d $WSIP \ + --dport 1024: \ + -o $INDEV \ + -i $OUTDEV \ + -m multiport \ + --source-ports $m \ + -m state \ + --state ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + done + for m in $TCPPORTS; do + echo $DEBUG $IPTABLES -A FORWARD \ + -p tcp \ + -s $WSIP \ + --sport 1024: \ + -o $OUTDEV \ + -i $INDEV \ + -m multiport \ + --destination-ports $m \ + -m state \ + --state NEW,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p tcp \ + -d $WSIP \ + --dport 1024: \ + -o $INDEV \ + -i $OUTDEV \ + -m multiport \ + --source-ports $m \ + -m state \ + --state ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + done +} + +AllowRouteNetOut() { + RNET=$1 + OUTDEV=$2 + UDPPORTS=$3 + TCPPORTS=$4 + RULE=$5 + + RNETIP=`echo $RNET|sed -e "s/\/.*$//"` + INDEV=`FindInDevice $RNETIP` + for m in $UDPPORTS; do + echo $DEBUG $IPTABLES -A FORWARD \ + -p udp \ + -i $INDEV \ + -o $OUTDEV \ + -s $RNET \ + --sport 1024: \ + -m multiport \ + --destination-ports $m \ + -m state \ + --state NEW,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p udp \ + -i $OUTDEV \ + -o $INDEV \ + -d $RNET \ + --dport 1024: \ + -m multiport \ + --source-ports $m \ + -m state \ + --state ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + done + for m in $TCPPORTS; do + echo $DEBUG $IPTABLES -A FORWARD \ + -p tcp \ + -i $INDEV \ + -o $OUTDEV \ + -s $RNET \ + --sport 1024: \ + -m multiport \ + --destination-ports $m \ + -m state \ + --state NEW,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p tcp \ + -i $OUTDEV \ + -o $INDEV \ + -d $RNET \ + --dport 1024: \ + -m multiport \ + --source-ports $m \ + -m state \ + --state ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + done +} + +AllowRouteNetSwitch() { + BGNET=$1 + OUTDEV=$2 + PROT=$3 + RULE=$4 + + BGNETIP=`echo $BGNET|sed -e "s/\/.*$//"` + INDEV=`FindInDevice $BGNETIP` + echo $DEBUG $IPTABLES -A FORWARD \ + -p $PROT \ + -d $BGNET \ + --dport 1024: \ + -o $INDEV \ + -i $OUTDEV \ + -m state \ + --state RELATED,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p $PROT \ + -s $BGNET \ + --sport 1024: \ + -o $OUTDEV \ + -i $INDEV \ + -m state \ + --state RELATED,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT +} + +AllowRouteNetNTP() { + BGNET=$1 + OUTDEV=$2 + RULE=$3 + BGNETIP=`echo $BGNET|sed -e "s/\/.*$//"` + INDEV=`FindInDevice $BGNETIP` + echo $DEBUG $IPTABLES -A FORWARD \ + -p tcp \ + -s $BGNET \ + --dport 123 \ + --sport 123 \ + -i $INDEV \ + -o $OUTDEV \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p tcp \ + -d $BGNET \ + --sport 123 \ + --dport 123 \ + -i $OUTDEV \ + -o $INDEV \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p udp \ + -s $BGNET \ + --dport 123 \ + --sport 123 \ + -i $INDEV \ + -o $OUTDEV \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p udp \ + -d $BGNET \ + --sport 123 \ + --dport 123 \ + -i $OUTDEV \ + -o $INDEV \ + -j $RULE >>$TMPSCRIPT +} + +ChangeWSOutRule () { + WSREMOVE=$1 + FW_PORT=$2 + FW_PROT=$3 + RULE=$4 + + + if ! LINE=`iptables -v -n -L FORWARD|sed -e "/Chain/d"|sed -e "/pkts/d"|grep -n $WSREMOVE|grep dpt:$FW_PORT|grep spts:1024:65535|grep $FW_PROT|grep "state NEW,ESTABLISHED"`; then + LINE=`iptables -v -n -L FORWARD|sed -e "/Chain/d"|sed -e "/pkts/d"|grep -n $WSREMOVE|grep dpts:$FW_PORT|grep spts:1024:65535|grep $FW_PROT|grep "state NEW,ESTABLISHED"` + fi + + OUTDEV=`echo "$LINE"|awk '{print $8}'` + LNUM=`echo "$LINE"|cut -d ":" -f 1` + + echo $DEBUG $IPTABLES -R FORWARD $LNUM -p $FW_PROT -s $WSREMOVE \ + --sport 1024: --dport $FW_PORT -o $OUTDEV \ + -m state --state NEW,ESTABLISHED -j $RULE >>$TMPSCRIPT + + if ! LINE=`iptables -v -n -L FORWARD|sed -e "/Chain/d"|sed -e "/pkts/d"|grep -n $WSREMOVE|grep spt:$FW_PORT|grep dpts:1024:65535|grep $FW_PROT|grep "state ESTABLISHED"`; then + LINE=`iptables -v -n -L FORWARD|sed -e "/Chain/d"|sed -e "/pkts/d"|grep -n $WSREMOVE|grep spts:$FW_PORT|grep dpts:1024:65535|grep $FW_PROT|grep "state ESTABLISHED"` + fi + + + OUTDEV=`echo "$LINE"|awk '{print $8}'` + LNUM=`echo "$LINE"|cut -d ":" -f 1` + + echo $DEBUG $IPTABLES -R FORWARD $LNUM -p $FW_PROT -s $WSREMOVE \ + --sport $FW_PORT --dport 1024: -o $OUTDEV \ + -m state --state ESTABLISHED -j $RULE >>$TMPSCRIPT + +} + +AllowWSSwitchPort() { + WSIP=$1 + PROT=$2 + OUTDEV=$3 + RULE=$4 + + WSIPADDR=`echo $WSIP|sed -e "s/\/.*$//"` + INDEV=`FindInDevice $WSIPADDR` + + echo $DEBUG $IPTABLES -A FORWARD \ + -p $PROT \ + -d $WSIP \ + --dport 1024: \ + -o $INDEV \ + -i $OUTDEV \ + -m state \ + --state RELATED,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p $PROT \ + -s $WSIP \ + --sport 1024: \ + -o $OUTDEV \ + -i $INDEV \ + -m state \ + --state RELATED,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + } + +AllowWSntpSync() { + OUTDEV=$1 + WSIP=$2 + RULE=$3 + + WSIPADDR=`echo $WSIP|sed -e "s/\/.*$//"` + INDEV=`FindInDevice $WSIPADDR` + + echo $DEBUG $IPTABLES -A FORWARD \ + -p tcp \ + -s $WSIP \ + --sport 123 \ + --dport 123 \ + -o $OUTDEV \ + -i $INDEV \ + -m state \ + --state NEW,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p tcp \ + -d $WSIP \ + --sport 123 \ + --dport 123 \ + -o $INDEV \ + -i $OUTDEV \ + -m state \ + --state ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p udp \ + -s $WSIP\ + --sport 123 \ + --dport 123 \ + -o $OUTDEV \ + -i $INDEV \ + -m state \ + --state NEW,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p udp \ + -d $WSIP \ + --sport 123 \ + --dport 123 \ + -o $INDEV \ + -i $OUTDEV \ + -m state \ + --state ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + } + +AllowNetBios() { + OUTDEV=$1 + WSIP=$2 + RULE=$3 + echo >&2 "Executing AllowNetBios with \"$1\" \"$2\" \"$3\"" + WSIPADDR=`echo $WSIP|sed -e "s/\/.*$//"` + INDEV=`FindInDevice $WSIPADDR` + for i in 137 138 139; do + echo $DEBUG $IPTABLES -A FORWARD \ + -p tcp \ + -s $WSIP \ + --sport $i \ + --dport $i \ + -o $OUTDEV \ + -i $INDEV \ + -m state \ + --state NEW,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p tcp \ + -d $WSIP \ + --sport $i \ + --dport $i \ + -o $INDEV \ + -i $OUTDEV \ + -m state \ + --state ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p udp \ + -s $WSIP\ + --sport $i \ + --dport $i \ + -o $OUTDEV \ + -i $INDEV \ + -m state \ + --state NEW,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p udp \ + -d $WSIP \ + --sport $i \ + --dport $i \ + -o $INDEV \ + -i $OUTDEV \ + -m state \ + --state ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + done +} + +AllowDHCPRelay() { + SERVERIP=$1 + + OUTDEV=`FindInDevice $SERVERIP` + + echo $DEBUG $IPTABLES -A OUTPUT \ + -p udp \ + -o $OUTDEV \ + --dport 67 \ + -m multiport \ + --source-ports 67,68 \ + -m state \ + --state NEW,ESTABLISHED \ + -j ACCEPT >>$TMPSCRIPT + + echo $DEBUG $IPTABLES -A INPUT \ + -p udp \ + -i $OUTDEV \ + --sport 67 \ + -m multiport \ + --destination-ports 67,68 \ + -m state \ + --state ESTABLISHED \ + -j ACCEPT >>$TMPSCRIPT +} + +AllowNetPortIN() { + ALLOWNET=$3 + UDPPORTS=$1 + TCPPORTS=$2 + + NETIP=`echo $ALLOWNET|sed -e "s/\/.*$//"` + SHMASK=`echo $ALLOWNET|sed -e "s/^.*\///"` + NETMSK=`GetLongMask $SHMASK` + INDEV=`netstat -rn| \ + grep $NETIP| \ + sed -e "/^0.0.0.0/d"| \ + awk '{print $8}'` + if [ ! "$INDEV" ]; then + INDEV=`netstat -rn|grep "^0.0.0.0"|awk '{print $8}'` + RIP=`netstat -rn|grep "^0.0.0.0"|awk '{print $2}'` + NETMSK=`getmask $RIP` + NETIP=`getnetaddr $RIP $NETMSK` + fi + NETBCAST=`getbroadcast $NETIP $NETMSK` + for k in `ip addr list dev $INDEV|grep $NETBCAST|awk '{print $2}'|sed -e "s/\/.*$//"`; do + for m in $UDPPORTS; do + echo $DEBUG $IPTABLES -A INPUT \ + -p udp \ + -s $ALLOWNET \ + -d $k \ + -i $INDEV \ + --sport 0: \ + -m multiport \ + --source-ports $m \ + -j ACCEPT >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A OUTPUT \ + -p udp \ + -s $k \ + -d $ALLOWNET \ + -o $INDEV \ + --dport 0: \ + -m multiport \ + --destination-ports $m \ + -j ACCEPT >>$TMPSCRIPT + done + for m in $TCPPORTS; do + echo $DEBUG $IPTABLES -A INPUT \ + -p tcp \ + -s $ALLOWNET \ + -d $k \ + -i $INDEV \ + --sport 0: \ + -m multiport \ + --source-ports $m \ + -j ACCEPT >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A OUTPUT \ + -p tcp \ + -s $k \ + -d $ALLOWNET \ + -o $INDEV \ + --dport 0: \ + -m multiport \ + --destination-ports $m \ + -j ACCEPT >>$TMPSCRIPT + done + done +} + +AllowLocalSwitchPort() { + PROT=$1 + DEVICE=$2 + RULE=$3 + + echo $DEBUG $IPTABLES -A INPUT \ + -p $PROT \ + -i $DEVICE \ + -m state \ + --state RELATED,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A OUTPUT \ + -p $PROT -o $DEVICE \ + -m state \ + --state RELATED,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + } + +ExternAllowPortIn() { + UDPPORTS=$1 + TCPPORTS=$2 + OUTDEV=$3 + RULE=$4 + + for m in $UDPPORTS; do + echo $DEBUG $IPTABLES -A INPUT \ + -p udp \ + -i $OUTDEV \ + --sport 1024: \ + -m multiport \ + --destination-ports $m \ + -m state \ + --state NEW,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A OUTPUT \ + -p udp \ + -o $OUTDEV \ + --dport 1024: \ + -m multiport \ + --source-ports $m \ + -m state \ + --state ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + done + for m in $TCPPORTS; do + echo $DEBUG $IPTABLES -A INPUT \ + -p tcp \ + -i $OUTDEV \ + --sport 1024: \ + -m multiport \ + --destination-ports $m \ + -m state \ + --state NEW,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A OUTPUT \ + -p tcp \ + -o $OUTDEV \ + --dport 1024: \ + -m multiport \ + --source-ports $m \ + -m state \ + --state ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + done + } + +ExternAllowPortOut() { + UDPPORTS=$1 + TCPPORTS=$2 + OUTDEV=$3 + RULE=$4 + + for m in $UDPPORTS; do + echo $DEBUG $IPTABLES -A INPUT \ + -p udp \ + -i $OUTDEV \ + --dport 1024: \ + -m multiport \ + --source-ports $m \ + -m state \ + --state ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A OUTPUT \ + -p udp \ + -o $OUTDEV \ + --sport 1024: \ + -m multiport \ + --destination-ports $m \ + -m state \ + --state NEW,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + done + for m in $TCPPORTS; do + echo $DEBUG $IPTABLES -A INPUT \ + -p tcp \ + -i $OUTDEV \ + --dport 1024: \ + -m multiport \ + --source-ports $m \ + -m state \ + --state ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A OUTPUT \ + -p tcp \ + -o $OUTDEV \ + --sport 1024: \ + -m multiport \ + --destination-ports $m \ + -m state \ + --state NEW,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + done +} + +LocalAllowntpSync() { + OUTDEV=$1 + RULE=$2 + + echo $DEBUG $IPTABLES -A INPUT \ + -p tcp \ + -i $OUTDEV \ + --sport 123 \ + --dport 123 \ + -m state \ + --state ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A OUTPUT \ + -p tcp \ + -o $OUTDEV \ + --sport 123 \ + --dport 123 \ + -m state \ + --state NEW,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A INPUT \ + -p udp \ + -i $OUTDEV \ + --sport 123 \ + --dport 123 \ + -m state \ + --state ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A OUTPUT \ + -p udp \ + -o $OUTDEV \ + --sport 123 \ + --dport 123 \ + -m state \ + --state NEW,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + } + +ExternAllowSyslog() { + INIP=$1 + RULE=$2 + + INIPADDR=`echo $INIP|sed -e "s/\/.*$//"` + INDEV=`FindInDevice $INIPADDR` + + echo $DEBUG $IPTABLES -A INPUT \ + -p udp \ + -i $INDEV \ + -s $INIP \ + --sport 514 \ + --dport 514 \ + -m state \ + --state NEW,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A OUTPUT \ + -p udp \ + -o $INDEV \ + -d $INIP \ + --sport 514 \ + --dport 514 \ + -m state \ + --state ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + } + +LocalAllowSyslog() { + OUTIP=$1 + RULE=$2 + + OUTDEV=`FindInDevice $OUTIP` + + echo $DEBUG $IPTABLES -A OUTPUT \ + -p udp \ + -o $OUTDEV \ + -d $OUTIP \ + --sport 514 \ + --dport 514 \ + -m state \ + --state NEW,ESTABLISHED \ + -j $RULE >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A INPUT \ + -p udp \ + -i $OUTDEV \ + -s $OUTIP \ + --dport 514 \ + --sport 514 \ + -m state \ + --state ESTABLISHED \ + -j $RULE >>$TMPSCRIPT +} + +InternMarkNet() { + NET=$1 + VALUE=$2 + + echo $DEBUG $IPTABLES -t mangle \ + -A PREROUTING \ + -s $NET \ + -j MARK \ + --set-mark $VALUE >>$TMPSCRIPT + } + +ExtForwardPorts() { + DSTSRVIP=$1 + DSTUDPPORT=$2 + DSTTCPPORT=$3 + INDEV=$4 + + OUTDEV=`FindInDevice $DSTSRVIP` + for m in $DSTTCPPORT; do + echo $DEBUG $IPTABLES -t nat \ + -A PREROUTING \ + -p tcp \ + -i $INDEV \ + -m multiport \ + --dports $m \ + -j DNAT \ + --to $DSTSRVIP >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p tcp \ + -i $INDEV \ + -o $OUTDEV \ + -d $DSTSRVIP \ + -m multiport \ + --dports $m \ + -j ACCEPT >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p tcp \ + -o $INDEV \ + -i $OUTDEV \ + -s $DSTSRVIP \ + -m multiport \ + --sports $m \ + -j ACCEPT >>$TMPSCRIPT + done + for m in $DSTUDPPORT; do + echo $DEBUG $IPTABLES -t nat \ + -A PREROUTING \ + -p udp \ + -i $INDEV \ + -m multiport \ + --dports $m \ + -j DNAT \ + --to $DSTSRVIP >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p udp \ + -i $INDEV \ + -o $OUTDEV \ + -d $DSTSRVIP \ + -m multiport \ + --dports $m \ + -j ACCEPT >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p udp \ + -o $INDEV \ + -i $OUTDEV \ + -s $DSTSRVIP \ + -m multiport \ + --sports $m \ + -j ACCEPT >>$TMPSCRIPT + done +} + +ExtForwardPort() { + DSTSRVIP=$1 + PROT=$2 + SRCPORT=$3 + DSTPORT=$4 + INDEV=$5 + + OUTDEV=`FindInDevice $DSTSRVIP` + echo $DEBUG $IPTABLES -t nat \ + -A PREROUTING \ + -p $PROT \ + --dport $SRCPORT \ + -i $INDEV \ + -j DNAT \ + --to $DSTSRVIP:$DSTPORT >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p $PROT \ + -i $INDEV \ + -o $OUTDEV \ + -d $DSTSRVIP \ + --dport $DSTPORT \ + -j ACCEPT >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p $PROT \ + -o $INDEV \ + -i $OUTDEV \ + -s $DSTSRVIP \ + --sport $DSTPORT \ + -j ACCEPT >>$TMPSCRIPT +} + +CreateLogTable() { + echo $DEBUG $IPTABLES -N reject-log >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A reject-log -j LOG --log-prefix "Firewall:\"rejected\"" >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A reject-log -j REJECT >>$TMPSCRIPT + } + +CreateAccountingTable() { + echo $DEBUG $IPTABLES -N account-log >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A account-log \ + -j LOG --log-prefix "FIREWALL: allowed" >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A account-log \ + -j ACCEPT >>$TMPSCRIPT + } + + +CreateICMPTable() { + echo $DEBUG $IPTABLES -N icmp-rules >>$TMPSCRIPT + for p in destination-unreachable \ + source-quench \ + time-exceeded \ + parameter-problem \ + echo-request \ + echo-reply; do + echo $DEBUG $IPTABLES -A icmp-rules \ + -p icmp \ + --icmp-type $p \ + -j $ACCEPTRULE >>$TMPSCRIPT + done + echo $DEBUG $IPTABLES -A icmp-rules \ + -m limit \ + --limit 6/m \ + -j LOG \ + --limit-burst 10 \ + --log-prefix "FIREWALL:icmp-drop" >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A icmp-rules -j DROP >>$TMPSCRIPT + } + +ActivateICMPRules() { + echo $DEBUG $IPTABLES -A INPUT \ + -p icmp \ + -j icmp-rules >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD \ + -p icmp \ + -j icmp-rules >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A OUTPUT \ + -p icmp \ + -j icmp-rules >>$TMPSCRIPT + } + +CloseLast() { + CLOSE_ACTION=$1 + + echo $DEBUG $IPTABLES -A INPUT -j $CLOSE_ACTION >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A FORWARD -j $CLOSE_ACTION >>$TMPSCRIPT + echo $DEBUG $IPTABLES -A OUTPUT -j $CLOSE_ACTION >>$TMPSCRIPT + } + diff --git a/etc/init.d/firewall b/etc/init.d/firewall new file mode 100644 index 0000000..873ae1c --- /dev/null +++ b/etc/init.d/firewall @@ -0,0 +1,461 @@ +#!/bin/bash +#Framework, welches ein komplettes Linux System aus den Sourcen erstellt +#dieses Framework wird im CVS Repository +#:pserver:cvs.rainmaker-mm.de/RMM/cvs zur Verfügung gestellt +# +#Lage dieser Datei im Archiv: $Source$ +# +#(c) Rainmaker MultiMedia OHG +#This program is free software; you can redistribute it and/or +#modify ist under the terms of the GNU General Public License +#as published by the Free Software Foundation; either version +#2 of the License, or (at your option) any later version. +# +#This program is distributed in the hope that it will be useful, +#but WITHOUT ANY WARRANTY; without even the implied warranty of +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +#See the GNU General Public License for more details. +# +#You should have received a copy of the GNU General Public License +#along with this program; if not write to the Free Software Foundation, +#Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +#Beschreibung: +#Neues Firewall Script für MonsumLinux. Dieses Script arbeitet +#in Verbindung mit /etc/init.d/functions und /etc/init.d/.firewallfunc +#Durch einfache Konfiguration über die Datei /etc/sysconfig/firewall +#kann die Firewall eingestellt werden. Es wird dediziert angegeben +#welche Systeme durch die Firewall das Angeschlossene Internet mit +#Dynamischer IP Nutzen können. Zugriff auf den Router selber, sowie +#das Routing durch den Router für die Local angeschlossenen Netze +#kann getrennt gesteuert werden. +#Die Firewall arbeitet nach der Regel: Alles was nicht explizit erlaubt +#ist, ist verboten. +# +#Aufrufparameter: +#Es handelt sich um ein System V Init script. Entsprechend die Optionen +#start und stop +# +#Letzte Änderung von: $Author$ +#Datum der letzten Änderung: $Date$ +#Version der Datei: $Revision$ +# +#$Log$ +#Revision 1.20 2007/05/09 12:03:06 segler +#firewall.template has moved to etc/sysconfig/net +# +#Revision 1.19 2007/05/02 12:07:35 segler +#iptables resides in /usr/sbin, not /sbin +# +#Revision 1.18 2007/03/23 11:25:32 kueller +#Neue Funktionen und bugfixes eingepflegt. (Diese laufen auf skylla und sphinx stabil) +# +#Revision 1.17 2006/08/24 21:19:41 kueller +#Viele Funktionen ueberarbeitet. Erkennung der incomming devices optimiert. +#Wird nicht mehr ueber das DEVICES Array mit verschachtelten schleifen gemacht, +#sondern ueber ausgaben von netstat -rn mit zugehoerigen netzadressen -> +#das ist deutlich schneller. +#Ausserdem ausbau und verbesserung diverser Firewall einstellungen. Weiter +#entwicklung des port forwardings auf interne Server -> dem scheint jetzt +#auch mit MASQUERADE zu funktionieren. +#Weiterhin die entschluesselung von "Portnummer;tcp" aufgehoben. dafuer +#werden jetzt jeweils 2 Variablen (1x udp, 1x tcp) definiert, und deren +#inhalte mit -m multiport auf einen schlag uebergeben. Das spart einiges +#an Schleifen und beschleunigt das script emminent. +# +#Revision 1.16 2006/06/30 09:33:02 kueller +#Sonderbehandlung fuer localen zugriff auf syslog eingebaut +# +#Revision 1.15 2006/02/21 14:42:35 kueller +#Korrektur im Aufruf der LocalServices Function - sollte jetzt fuer alle richtig functionieren. +#Weiterhin beschleunigung beim startup wenn /etc/sysconfig/firewall nicht veraendert wurde. +#Nach dem Aufbau der Firewall tables wird ein iptables-save in /var/state/iptables.state gemacht. +#Diese kann, sofern /etc/sysconfig/firewall unveraendert ist, mit iptables-restore wieder +#geladen werden - was wesentlich schneller als das parsen der configfiles geht. +# +#Revision 1.14 2004/11/23 19:46:07 kueller +#Debuging und neue Funktionalität der Firewall. Mit der Zeit weiter gewachsen +#im CompuExtreme Netzwerk. +# +#Revision 1.9 2002/11/04 12:03:01 kueller +#Fehlende Funktionssammlung .firewallfunc hinzugefügt. Erweiterung der Firewall +#um MARK Funktionalitaet, sowie Freischaltung von Getunnelten Netzen (letzteres +#ist in der DEBUG Phase und funktioniert noch nicht komplett!) +# +#Revision 1.8 2002/10/14 12:36:45 kueller +#Firewall Script komplett neu erstellt. Es wird nun mit den Unterschiedlichen +#Chains (INPUT, FORWARD, OUTPUT) gearbeitet. Die Firewall lässt sich so +#wesentlich feiner abstimmen, und arbeitet sicherer. +# +# + +CFGFILE=/etc/sysconfig/net/firewall +SYSFUNCTIONS=/etc/init.d/functions +FIREWALLFUNC=/etc/init.d/.firewallfunc +TMPSCRIPT=/var/tmp/firewall_reconfig$$ + +source $SYSFUNCTIONS +source $FIREWALLFUNC +IPTABLES="/usr/sbin/iptables" +IPCFG=/sbin/ip +IFCONFIG=/sbin/ifconfig +#DEBUG=echo + +if [ -f "$CFGFILE" ]; then + source $CFGFILE + case $1 in + start) + if [ -f /var/state/iptables.state ]; then + echo -n "Disabling Kernel Console Output" + echo "0" >/proc/sys/kernel/printk + evaluate_retval + echo -n "Restoring Firewall Table" + cat /var/state/iptables.state|iptables-restore + evaluate_retval + else + echo "No saved configuration. please generate new config" + echo "Use $0 configure to generate new config" + fi + ;; + configure) + if [ -f "$TMPSCRIPT" ]; then + rm $TMPSCRIPT + fi + touch $TMPSCRIPT + chmod 755 $TMPSCRIPT + echo -n "Firewall: loads network informations" + LoadDevArray + evaluate_retval + echo -n "Firewall: Setting default rule DROP " + DefaultRule + evaluate_retval + echo -n "Firewall: Opening loopback Communication" + AllowLoopBack + evaluate_retval + ACCEPTRULE=ACCEPT + REJECTRULE=REJECT + if [ "$ACCOUNTING" == "yes" ]; then + echo -n "Activate ACCOUNTING LOG" + echo "#ACCOUNTING Table erstellen" >>$TMPSCRIPT + CreateAccountingTable + ACCEPTRULE=account-log + evaluate_retval + fi + if [ "$LOG_REJECTED" == "yes" ]; then + echo -n "Activate REJECT LOG" + echo "#LOG_REJECT einrichten" >>$TMPSCRIPT + CreateLogTable + REJECTRULE=reject-log + evaluate_retval + fi + if [ "$ICMP" == "yes" ]; then + echo -n "Activate ICMP Rules" + echo "#ICM Rules" >>$TMPSCRIPT + CreateICMPTable + ActivateICMPRules + evaluate_retval + else + echo -n "Opening ICMP" + echo "#ICM Ohne einschraenkung zulassen" >>$TMPSCRIPT + for i in FORWARD \ + INPUT \ + OUTPUT; do + echo "$DEBUG $IPTABLES -A $i \ + -p icmp \ + -j ACCEPT" >>$TMPSCRIPT + done + evaluate_retval + fi + if [ "$INTERNROUTING" ]; then + echo -n "Activate Local Routing for $INTERNROUTING" + echo "#Firewalling fuer interne Ports deaktivieren" >>$TMPSCRIPT + AllowInternRouting ACCEPT $INTERNROUTING + evaluate_retval + fi + y=0 + while [ "${LOCALSERVER[$y]}" ]; do + echo -n "Activating allow for localserver ${LOCALSERVER[$y]}" + LOCSERVER=`echo ${LOCALSERVER[$y]}|cut -d":" -f 2` + DMZCLIENT=`echo ${LOCALSERVER[$y]}|cut -d":" -f 1` + LOCPORT=`echo ${LOCALSERVER[$y]}|cut -d":" -f 3` + LOCPROT=`echo ${LOCALSERVER[$y]}|cut -d":" -f 4` + AllowLocalServer $LOCSERVER \ + $DMZCLIENT \ + $LOCPORT \ + $LOCPROT + evaluate_retval + (( y++ )) + done + if [ "$ALLOWNET" ]; then + echo -n "Allowing routing for NET=$ALLOWNET over $TUNDEV" + echo "#Netz $ALLOWNET komplett freischalten" >>$TMPSCRIPT + AllowAllDefault $ALLOWNET $TUNDEV ACCEPT + evaluate_retval + fi + for i in $MASQNET; do + echo -n "Activate Masquerading for $i" + echo "#Masquerade einrichten" >>$TMPSCRIPT + ActivateMasq $OUTDEVICE $MASQNET + evaluate_retval + done + y=0 + while [ ${DMZSERVER[$y]} ]; do + echo "Allow Access to ${DMZSERVER[$y]}" + echo "for UDP Ports: ${UDPDMZPORTS[$y]}" + echo -n "for TCP Ports: ${TCPDMZPORTS[$y]}" + echo "#DMZServer ${DMZSERVER[$y]} freigeben" >>$TMPSCRIPT + AllowDMZServiceAccess ${DMZSERVER[$y]} \ + "${UDPDMZPORTS[$y]}" \ + "${TCPDMZPORTS[$y]}" + evaluate_retval + (( y++ )) + done + y=0 + while [ ${INSERVER[$y]} ]; do + echo "Allow Access to Intranet Service ${INSERVER[$y]}" + IP=`echo ${INSERVER[$y]}|awk -F":" '{print $1}'` + PORT=`echo ${INSERVER[$y]}|awk -F":" '{print $2}'` + PROT=`echo ${INSERVER[$y]}|awk -F":" '{print $3}'` + AllowIntranetService ${IP} \ + ${PORT} \ + ${PROT} + evaluate_retval + (( y++ )) + done + for i in $GLOBALSERVER; do + echo -n "Allow Access to Server $i" + echo "#Zugriff auf server $i freigeben" >>$TMPSCRIPT + LocalAllowWSAll $i + evaluate_retval + done + if [ "$LOCALDEVICES" ]; then + if [ "$LOCALUDP" ] || [ "$LOCALTCP" ]; then + echo "#Zugriff auf Firewall fuer locale Netze freigeben" >>$TMPSCRIPT + LocalAllowPortIN "$LOCALUDP" "$LOCALTCP" "$LOCALDEVICES" + evaluate_retval + fi + fi + wszahler=0 + while [ "${ALLOWEDNETWORK[$wszahler]}" ]; do + echo "Allow Local Access for Network ${ALLOWEDNETWORK[$wszahler]}" + echo "#Eingeschr. Zugriff fuer Netz ${ALLOWEDNETWORK[$wszahler]} einrichten" >>$TMPSCRIPT + AllowNetPortIN "${NETUDPSERVICES[$wszahler]}" \ + "${NETTCPSERVICES[$wszahler]}" \ + ${ALLOWEDNETWORK[$wszahler]} + (( wszahler = $wszahler + 1 )) + done + wszahler=0 + while [ "${LOCALWS[$wszahler]}" ]; do + echo "Internet Access for ${LOCALWS[$wszahler]}" + echo "UDP: ${ROUTEUDP[$wszahler]}" + echo -n "TCP:${ROUTETCP[$wszahler]}" + echo "#Freischaltung fuer ${LOCALWS[$wszahler]}" >>$TMPSCRIPT + AllowWSPortOUT $OUTDEVICE \ + ${LOCALWS[$wszahler]} \ + "${ROUTEUDP[$wszahler]}" \ + "${ROUTETCP[$wszahler]}" \ + $ACCEPTRULE + if [ "${ALLOWSWPORTS[$wszahler]}" = "yes" ]; then + echo "#ftp portswitch fuer ${LOCALWS[$wszahler]}" >>$TMPSCRIPT + AllowWSSwitchPort ${LOCALWS[$wszahler]} tcp $OUTDEV $ACCEPTRULE + AllowWSSwitchPort ${LOCALWS[$wszahler]} udp $OUTDEV $ACCEPTRULE + fi + if [ "${ALLOWNTP[$wszahler]}" = "yes" ]; then + echo "#ntp fuer ${LOCALWS[$wszahler]}" >>$TMPSCRIPT + AllowWSntpSync $OUTDEV ${LOCALWS[$wszahler]} $ACCEPTRULE + fi + if [ "${ALLOWNETBIOS[$wszahler]}" = "yes" ]; then + echo "#netbios fuer ${LOCALWS[$wszahler]}" >>$TMPSCRIPT + AllowNetBios $OUTDEV ${LOCALWS[$wszahler]} $ACCEPTRULE + fi + evaluate_retval + (( wszahler = $wszahler + 1 )) + done + netzahler=0 + while [ "${ROUTEDBGNETWORK[$netzahler]}" ]; do + echo "Internet Access for ${ROUTEDBGNETWORK[$netzahler]}" + echo "UDPPORTS: ${BGNETUDP[$netzahler]}" + echo -n "RCPPORTS: ${BGNETTCP[$netzahler]}" + echo "#Internet Access for ${ROUTEDBGNETWORK[$netzahler]}" >>$TMPSCRIPT + AllowRouteNetOut ${ROUTEDBGNETWORK[$netzahler]} \ + $OUTDEV \ + "${BGNETUDP[$netzahler]}" \ + "${BGNETTCP[$netzahler]}" \ + $ACCEPTRULE + evaluate_retval + if [ ${ROUTEDBGNETSW[$netzahler]} == "yes" ]; then + echo "Allowing Port Switch for ${ROUTEDBGNETWORK[$netzahler]}" + echo "#Allowing Port Switch for ${ROUTEDBGNETWORK[$netzahler]}" >>$TMPSCRIPT + AllowRouteNetSwitch ${ROUTEDBGNETWORK[$netzahler]} $OUTDEV tcp $ACCEPTRULE + AllowRouteNetSwitch ${ROUTEDBGNETWORK[$netzahler]} $OUTDEV udp $ACCEPTRULE + fi + if [ ${ROUTEDBGNETNTP[$netzahler]} == "yes" ]; then + echo "Allowing NTP for ${ROUTEDBGNETWORK[$netzahler]}" + echo "#Allowing NTP for ${ROUTEDBGNETWORK[$netzahler]}" >>$TMPSCRIPT + AllowRouteNetNTP ${ROUTEDBGNETWORK[$netzahler]} $OUTDEV $ACCEPTRULE + fi + (( netzahler = $netzahler + 1 )) + done + if [ "$EXTUDPOPEN" ] || [ "$EXTTCPOPTEN"]; then + echo "Allow External Access" + echo "for UDP: $EXTUDPOPEN" + echo -n "for TCP: $EXTTCPOPEN" + echo "#Allow External Access" >>$TMPSCRIPT + ExternAllowPortIn "$EXTUDPOPEN" "$EXTTCPOPEN" $OUTDEVICE $ACCEPTRULE + evaluate_retval + fi + for i in $ALLOWDEVICESWPORT; do + echo -n "Allowing Portswitch on device $i" + echo "#Allowing Portswitch on device $i" >>$TMPSCRIPT + AllowLocalSwitchPort tcp $i $ACCEPTRULE + AllowLocalSwitchPort udp $i $ACCEPTRULE + evaluate_retval + done + if [ "$LOCALUSEUDP" ] || [ "$LOCALUSETCP" ]; then + echo "Allow Local Internet Access" + echo "for UDP: $LOCALUSEUDP" + echo -n "for TCP: $LOCALUSETCP" + echo "#Allow Local Internet Access" >>$TMPSCRIPT + ExternAllowPortOut "$LOCALUSEUDP" "$LOCALUSETCP" $OUTDEVICE $ACCEPTRULE + evaluate_retval + fi + if [ "$NTPSYNC" = "yes" ]; then + echo -n "Allow NTP Time Sync" + echo "#Allow NTP Time Sync" >>$TMPSCRIPT + LocalAllowntpSync $OUTDEV $ACCEPTRULE + evaluate_retval + fi + for i in $LOCSYSLOG; do + echo -n "Allowing remote syslog for $i" + echo "#Allowing remote syslog for $i" >>$TMPSCRIPT + ExternAllowSyslog $i $ACCEPTRULE + evaluate_retval + done + if [ "$USESYSLOG" ]; then + echo -n "Allowing use of $USESYSLOG for syslog" + echo "#Allowing use of $USESYSLOG for syslog" >>$TMPSCRIPT + LocalAllowSyslog $USESYSLOG $ACCEPTRULE + evaluate_retval + fi + if [ "$MARK" = "yes" ]; then + echo -n "Setting mark $MARKVALUE for Net $MARKNET" + echo "#Setting mark $MARKVALUE for Net $MARKNET" >>$TMPSCRIPT + InternMarkNet $MARKNET $MARKVALUE + evaluate_retval + fi + y=0 + while [ "${FORWARDSRV[$y]}" ]; do + echo "Forwarding to ${FORWARDSRV[$y]}" + echo "UDP Ports: ${FORWDUDP[$y]}" + echo "TCP Ports: ${FORWDTCP[$y]}" + echo "#Forwarding to ${FORWARDSRV[$y]}" >>$TMPSCRIPT + ExtForwardPorts ${FORWARDSRV[$y]} \ + "${FORWDUDP[$y]}" \ + "${FORWDTCP[$y]}" \ + $OUTDEVICE + evaluate_retval + (( y++ )) + done + y=0 + while [ "${DSTSERVER[$y]}" ]; do + for x in ${FWDSERVICE[$y]}; do + SPORT=`echo $x|cut -d";" -f 1` + PROT=`echo $x|cut -d";" -f 2` + DPORT=`echo $x|cut -d";" -f 3` + ExtForwardPort ${DSTSERVER[$y]} \ + $PROT \ + $SPORT \ + $DPORT \ + $OUTDEVICE + done + (( y++ )) + done + if [ "$DHCPSERVER" ]; then + AllowDHCPRelay $DHCPSERVER + fi + echo -n "Closing all returned open ports" + echo "#Closing all returned open ports" >>$TMPSCRIPT + CloseLast $REJECTRULE + evaluate_retval + echo -n "Stopping Firewall" + $0 stop + evaluate_retval + echo -n "Applying new config to firewall" + $DEBUG $TMPSCRIPT + evaluate_retval + rm $TMPSCRIPT + echo -n "Saving Firewall rules table" + $DEBUG iptables-save >/var/state/iptables.state + evaluate_retval + ;; + stop) + for i in INPUT FORWARD OUTPUT; do + $DEBUG $IPTABLES -F $i + $DEBUG $IPTABLES -P $i ACCEPT + done + if [ "$ACCOUNTING" == "yes" ]; then + $DEBUG $IPTABLES -F account-log + $DEBUG $IPTABLES -X account-log + fi + if [ "$LOG_REJECTED" = "yes" ]; then + $DEBUG $IPTABLES -F reject-log + $DEBUG $IPTABLES -X reject-log + fi + if [ "$ICMP" == "yes" ]; then + $DEBUG $IPTABLES -F icmp-rules + $DEBUG $IPTABLES -X icmp-rules + fi + if [ "$MASQ" == "yes" ] || [ "$FORWARDSRV[0]" ]; then + $DEBUG $IPTABLES -t nat -F + fi + if [ "$MARK" = "yes" ]; then + $DEBUG $IPTABLES -t mangle -F + fi + ;; + deny) + if [ ! "$2" ]; then + echo "Need a Workstation to lock" + exit 1 + fi + wszahler=0 + WSIP=`nslookup $2|tail -n 2|head -n 1|awk '{print $2}'` + while [ "${LOCALWS[$wszahler]}" ]; do + if [ "${LOCALWS[$wszahler]}" == "$WSIP" ]; then + for k in ${ROUTEPORTS[$wszahler]}; do + echo -n " $k" + FW_PORT=`echo $k|cut -f 1 -d ";"` + FW_PROT=`echo $k|cut -f 2 -d ";"` + ChangeWSOutRule ${LOCALWS[$wszahler]}\ + $FW_PORT $FW_PROT DROP + done + evaluate_retval + fi + (( wszahler = $wszahler + 1 )) + done + ;; + allow) + if [ ! "$2" ]; then + echo "Need a Workstation to lock" + exit 1 + fi + wszahler=0 + WSIP=`nslookup $2|tail -n 2|head -n 1|awk '{print $2}'` + while [ "${LOCALWS[$wszahler]}" ]; do + if [ "${LOCALWS[$wszahler]}" == "$WSIP" ]; then + for k in ${ROUTEPORTS[$wszahler]}; do + echo -n " $k" + FW_PORT=`echo $k|cut -f 1 -d ";"` + FW_PROT=`echo $k|cut -f 2 -d ";"` + ChangeWSOutRule ${LOCALWS[$wszahler]}\ + $FW_PORT $FW_PROT ACCEPT + done + evaluate_retval + fi + (( wszahler = $wszahler + 1 )) + done + ;; + *) + echo "Usage: $0 {start|stop}" + ;; + esac +fi diff --git a/etc/init/iptables.conf b/etc/init/iptables.conf new file mode 100644 index 0000000..66d3583 --- /dev/null +++ b/etc/init/iptables.conf @@ -0,0 +1,20 @@ +description "Setup and Start iptables firewall" +author "Harald Kueller " +version 1.0 +emits none special + +start on ( runlevel [2345] and (stopped routing)) + +console output + +pre-start script + if [ [ ! -f /var/state/iptables.state ] && [ -f /etc/sysconfig/net/firewall ] ]; then + /etc/init.d/firewall configure + fi +end script + +script + if [ -f /var/state/iptables.state ]; then + /etc/init.d/firewall start + fi +end script diff --git a/etc/sysconfig/templates/firewall b/etc/sysconfig/templates/firewall new file mode 100644 index 0000000..ed7af80 --- /dev/null +++ b/etc/sysconfig/templates/firewall @@ -0,0 +1,266 @@ +#Framework, welches ein komplettes Linux System aus den Sourcen erstellt +#dieses Framework wird im CVS Repository +#:pserver:cvs.rainmaker-mm.de/RMM/cvs zur Verfügung gestellt +# +#Lage dieser Datei im Archiv: $Source: /Data/cvs/Viitor_iptables/etc/sysconfig/firewall.template,v $ +# +#(c) Rainmaker MultiMedia OHG +#This program is free software; you can redistribute it and/or +#modify ist under the terms of the GNU General Public License +#as published by the Free Software Foundation; either version +#2 of the License, or (at your option) any later version. +# +#This program is distributed in the hope that it will be useful, +#but WITHOUT ANY WARRANTY; without even the implied warranty of +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +#See the GNU General Public License for more details. +# +#You should have received a copy of the GNU General Public License +#along with this program; if not write to the Free Software Foundation, +#Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +#Beschreibung: +#Konfigurations Datei für das firewall Init Script +# +#Aufrufparameter: +#wird vom Init Script verwendet - und hat keine eigenen +#funktionen oder parameter +# +#Letzte Änderung von: $Author: kueller $ +#Datum der letzten Änderung: $Date: 2006/06/30 09:33:02 $ +#Version der Datei: $Revision: 1.11 $ +# +#$Log: firewall.template,v $ +#Revision 1.11 2006/06/30 09:33:02 kueller +#Sonderbehandlung fuer localen zugriff auf syslog eingebaut +# +#Revision 1.10 2004/11/23 19:46:07 kueller +#Debuging und neue Funktionalität der Firewall. Mit der Zeit weiter gewachsen +#im CompuExtreme Netzwerk. +# +# + +# Zu Allererst erfolgen einige Grundsätzliche Definitionen zum localen +# Netzwerk. +# OUTDEVICE enthält den Namen des Outgoing Devices - für ADSL typischerweise +# "ppp0", für isdn "ippp0" +OUTDEVICE=ppp0 + +# Konfiguration von Accounting Möglichkeiten. Wird diese Variable auf "yes" +# gesetzt, wird jeder erlaubte Zugriff in des Externe Netz mirprotokolliert +# Dies ermöglicht eine spätere Auswertung, und damit die sammlung von +# Traffic informationen wie sie zu Abrechnungszwecken notwendig sind. +ACCOUNITNG="no" + +# Konfiguration von LOG Aktivitäten zu Unerlaubten/wünschen Zugriffen. +# wird diese Variable auf "yes" gesetzt, wird jeder von der Firewall +# abgewiesene Zugriff mitprotokolliert +LOG_REJECTED="no" + +#ICMP Freischaltung. Wird die folgende Variable auf YES gesetzt, so +#wird die Durchleitung von ICMP Meldungen eingeschränkt. Dies verhindert +#Verschiedene DoS Attacken. Ohne Setzen dieser Variable schaltet die Firewall +#sämtliche icmp Zugriffe durch. +ICMP=yes + +#Werden in der folgenden Variablen Devices angegeben, so fungiert dieser +#Rechner für alle an diese Devices angeschlossenen Systeme als Router. +#Der Traffic zwischen diesesn Systemen wird ohne einschränkungen erlaubt. +INTERNROUTING="eth1 lo" + +#Die Folgenden Variablen aktivieren das Masquerading. Hier werden die +#Packete eines Netzes mit der Internet Adresse des Routers Maskiert. +#Leider kann hier nur EIN Locales Netz angegeben werden. Jedoch kann +#durch gute Definition des Localen Netzes ein sehr grosser Bereich +#Maskiert werden. Das Locale Netz muss mit "NetzIP/ShortMask" angegeben werden. +#MASQNET=192.168.66.0/24 + +#Mit den folgenden Variablen lässt sich ein Komplettes Netz freischalten, das +#z.B. hinter einem weiteren Router im Netzwerk angeschlossen ist. + +#compuextreme.lan +ROUTEDBGNETWORK[0]=192.168.66.0/27 +BGNETUDP[0]="13,20,21,70,109 110,143 220,765,1024:65535" +BGNETTCP[0]="13,15,20,21,25,43,70,80 109:115,143,143 220,443,554,765,1024:65535" +ROUTEDBGNETSW[0]="yes" +ROUTEDBGNETNTP[0]="yes" + +ROUTEDBGNETWORK[1]=192.168.66.32/28 +BGNETUDP[1]="13,20,21,70,109 110,143 220,765,1024:65535" +BGNETTCP[1]="13,15,20,21,25,43,70,80 109:115,143,143 220,443,554,765,1024:65535" +ROUTEDBGNETSW[1]="yes" +ROUTEDBGNETNTP[1]="yes" + +#Bei DMZ Systemen solle u.U. bestimmte Services im geschuetzen Netzbereich +#aus der DMZ heraus ansprechbar sein. +#Die Server werden mit Portnummer und Protokoll jeweils in $LOCALSERVER[#] +#eingetragen +#LOCALSERVER[0]="hugin.compuextreme.de:pgsql.compuextreme.lan:5432:tcp" + +#Mit den folgenden Zeilen wird die Internet Berechtigung für einzelne IP +#Adressen festgelegt. LOCALWS Enthält die IP jeweils einer localen Workstation +#Alternativ kann in LOCALWS auch ein komplettes SubNet angegeben werden. Dies wird +#durch die kurze Schreibform eines Netzwerkes (IP/MASK, z.B. 192.168.0.0/16) erreicht. +#ROUTEPORTS die für den Durchgriff der Maschienen freizuschaltenden Portnummern +#und Protokolle. Einige Protokolle Bauen mehrere Verbindungen auf +#unterschiedlichen Ports auf - d.H. sie Switchen den Port nach dem +#Verbindungsaufbau (speziell FTP). Hierzu ist eine besondere Einstellung in +#der Firewall notwendig. Diese Einstellung kann mit ALLOWSWPORTS="yes" erreicht +#werden. NTP (Network Time Protokoll) wiederum verhält sich ebenfalls nicht +#ganz wie üblich. Hier wird die Verbindung nicht über einen port >1024 +#Aufgebaut, sondern Server und Client verwenden den gleichen Port 123. +#Daher kann eine spezielle Regel für NTP eingefügt werden. Hierzu muss der +#Wert von ALLOWNTP auf "yes" gesetzt werden. +#Gleiches gild fuer netbios von Microsoft. Hier kann die Variable ALLOWNETBIOS +#auf "yes" gesetzt werden, um die entsprechende Sonderbehandlung zu aktivieren. +#In den Eckigen Klammern wird fuer jede freizuschaltende Workstation +#eine andere Nummer eingesetzt. Es muessen alle vier Variablen jeweils einmal +#pro Workstation gesetzt werden. +#Protokoll getrennt durch ";" zusammengefasst +#Special Ports: +#2401;tcp cvs Access +#5190;tcp 5190;udp AOL Instand Messanger +#6346;tcp gnutella +#6699;tcp 7950/1/2;tcp WinMX +#1214;tcp 2832;tcp KaZaA + +#Freischaltung fuer odin.dmz.lan +LOCALWS[0]="192.168.66.49" +ROUTEUDP[0]="13,20,21,43,53,70,109,110,143,162,177,220,765,1024:65535" +ROUTETCP[0]="13,15,20:25,43,53,70,80,109:115,143 161,177,220,443,554,765,1024:65535" +#ROUTEUDP[0]="0:65535" +#ROUTETCP[0]="0:65535" +ALLOWSWPORTS[0]="yes" +ALLOWNTP[0]="yes" + +#Freischaltung fuer hades.dmz.lan +LOCALWS[1]="192.168.66.50" +ROUTEUDP[1]="13,20,21,70,109,110,143,162,177,220,765,1024:65535" +ROUTETCP[1]="13,15,20:25,43,70,80,109:115 143,161,177,220,443,554,765,1024:65535" +ALLOWSWPORTS[1]="yes" +ALLOWNTP[1]="no" + +#Wenn der Router Server aus dem internen Netz Benutzt, so muss der Zugriff +#auf diese Server freigeschaltet werden. Dies kann entweder Global für +#Alle Dienste geschehen, oder auch dediziert für bestimmte Dienste. +#Die Globale Freischaltung empfiehlt sich vor allem wenn RPC Basierte +#Dienste des Servers verwendet werden. Die dedizierte Variante ist die +#Sicherere, bedeutet jedoch mehr Aufwand für den Firewallrechner. +#Diese Firewall verwendet derzeit nur die Globale Freischaltung von +#Bestimmten servern. +#Über die Variable GLOBALSERVER koennen ein oder mehrere interne Netze +#angegeben werden. Bei der Angabe mehrerer Netze müssen diese durch ein +#space zeichen voneinander getrennt werden. +GLOBALSERVER="192.168.66.49 192.168.66.53" + +#Liegen die genutzen Dienste hinter einem grouteten Netz, so muss die +#Freischaltung anders erfolgen. Hierzu die Variable unten +#definieren. Angegeben wird hier die Server IP, der Dienst Port, sowie das +#Protokoll. Hier wird NUR dem Firewall Rechner der Zugriff auf diese +#Dienste erlaubt. +INSERVER[0]="192.168.75.67:53:tcp" +INSERVER[1]="192.168.75.67:53:udp" + +#Serverdienste Auf Router. Hiermit können Bestimmte Zugriffe auf den Router +#aus dem gesammten Localen Netz (definiert über die angegebenen Devices) +#erlaubt werden. Die Angabe der Freigeschalteten Dienste erfolgt auf +#die gleiche Weise, wie in "$ROUTERPORTS" +LOCALUDP="22" +LOCALTCP="22,25,80" +LOCALDEVICES="eth1" + +#Alternativ zu LOCALSERVICES koennen die Dienste auch pro Netzwerk freigeschaltet werden. +#Hierzu muss pro freizuschaltendes Netzwerk die Variablen ALLOWEDNETWORK[#] und +#NETSERVICES[#] definiert werden. ALLOWEDNETWORK enthält die Netzwerkdefinition, +#NETSERVICES die erlaubten Port/Protokoll Kombinationen. +#ALLOWEDNETWORK[0]="192.168.26.0/27" +#NETUDPSERVICES[0]="13,53,67,68,88,110,111,137:139,143,161,177,220,464" +#NETTCPSERVICES[0]="13,15,20:23,25,42,53,67,80,88,110,111,143,161" +#ALLOWENETWORK[1]="192.168.26.128/27" +#NETUDPSERVICES[1]="517,518,520,765,856,863,873,1024:65535" +#NETTCPSERVICES[1]="177,220,443,513,514,543,544,749,765,856,863,1024:65535" + +#Die folgende Variable Entspricht der Funktionalität von LOCALSERVICES, +#bezieht sich jedoch auf Services, die aus dem Internet herraus ansprechbar +#sein sollen. Hier ist nur der Zugriff vom Internet auf den Router gemeint +#Freigeschaltene Dienste werden nicht durch den Router durchgereicht! +EXTUDPOPEN="22" +EXTTCPOPEN="22,25" + +#Sollen aus dem Geschuetzten Netz Server in der DMZ ansprechbar sein (Ohne +#Restriktionen!) dann hier eintragen. +#DMZSERVER[0]="192.168.66.49" +#UDPDMZPORTS[0]="20,49,53,80,110,111,1024:65535" +#TCPDMZPORTS[0]="20,21,22,25,49,53,69,80,110,111,443,1024:65535" + +#Einzelne Dienste können durch die Firewall auf ein system im Privaten Internen +#Netz weitergeleitet werden. So kann zum Beispiel Aller Traffic von port 80 +#auf eine andere Maschine weitergeleitet werden, welche diesen Request +#beantwortet +#Diese Funktion der Viitor Firewall befindet sich noch in der Entwicklung! +FORWARDSRV[0]="192.168.66.49" +FORWDUDP[0]="20,21,443,3690,5000,8767,8888,8889" +FORWDTCP[0]="20,21,22,80,443,873,2401,3690,5000" +FORWDSWITCH[0]=yes +FORWARDSRV[1]="192.168.66.27" +FORWDUDP[1]="902" +FORWDTCP[1]="902" + +#u.U sollen beim forwarden auf einen anderen server auch die Port Nummern +#geaendert werden. Dann ist pro Server/Port paar ein Eintrag notwendig. +DSTSERVER[0]="192.168.66.54" +FWDSERVICE[0]="8080;tcp;22 8080;udp;22" + +#Wird auf dem localen System ein FTP-Server betrieben, so muss ein Switchen +#der Verbindung möglich sein. Dieses Switchen wird auf Device Basis +#freigeschalten - jedes in ALLOWEXTSWIN enthaltene Interface erlaubt +#den für den ftp betrieb notwendigen Switch der Portnummern. +#ALLOWDEVICESWPORT="eth1 ppp0" + +#Mit der Variable LOCALUSESERVICE wird eingestellt welche Dienste der +#router selber aus dem Internet benutzen darf. +LOCALUSEUDP="22,110" +LOCALUSETCP="22,25,80,110" + +#Die Verwendung des NTP Dienstes braucht eine besondere Behandlung, da hier +#Client und Server den NTP Port (123) verwenden. (Normal Client >1024) +#Soll eine Zeitsynchronisation mit einem NTP Server vom Firewallrechner +#aus stattfinden, so muss NTPSYNC auf "yes" gesetzt werden. +#NTPSYNC="192.168.66.48" + +#Gleiches wie fuer NTP gild auch fuer die syslog dienste. soll der Firewall +#rechner auch loghost sein, muss LOCSYSLOG auf "yes" gesetzt werden. +#LOCSYSLOG="192.168.66.49" + +#Und wenn der Router einen Syslog server verwenden soll, muss das natuerlich +#genauso spezial behandelt werden +USESYSLOG="192.168.66.49" + +#dhcp sendet auch von untypischen ports. wenn der router auch +#dhcprelay spielt ist daher eine sonderbehandlung fuer die kommunikation +#mit dem dhcpserver noetig. + +#DHCPSERVER="192.168.66.49" + +#Das Advanced Routing des Linux Kernels (>2.2.x) kann mehrere Routingtabellen +#verwalten. Normalerweise wird die Default Tabel für das Routing Verwendet. +#Basierend auf Verschiedenen Regeln können jedoch auch anderen Routingtabellen +#verwendet werden. Eine dieser Regeln wertet Firewall Markierungen aus, +#und kann entsprechend dem Markierungswert routingtabellen verwenden. +#die MonsumFirewall erlaubt es EIN Netz derartig für das advanced routing +#zu markieren. Dieses Feature aktiviert, wenn MARK auf "yes" gesetzt wird. +#MARKNET muss dann die Netzwerk informationen (Netzadresse/Shortmask) +#beinhalten. MARKVALUE den Wert, mit dem Markiert werden soll (Integer Zahl) +#MARK="no" +#MARKNET="62.112.132.240/28" +#MARKVALUE="3" + +#Wird die Mark Option Verwendet (z.B. für Statische Adressen in Verbindung mit +#einem Tunnel - wobei für den Tunnel traffic gebühren entstehen) so sollen +#die Statischen Adressen in der Regel per Defaultroute "TUNNELENDE" weiter +#geleitet werden. Hier ist u.U. eine Firewall unerwünscht (es muss sich der +#Rechner am anderen Ende um die Sicherheit kümmern!) +#ALLOWNET bestimmt das Netzwerk, welches ohne weitere Kontrolle über $TUNDEV +#geleitet wird. +#ALLOWNET="62.112.132.240/28" +#TUNDEV="tun1" diff --git a/init/genpkg b/init/genpkg new file mode 100644 index 0000000..bb2b67d --- /dev/null +++ b/init/genpkg @@ -0,0 +1,40 @@ +#!/bin/bash +#genpkg script für iptables +#(c) Rainmaker MultiMedia OHG +# +#$Author$ +#$Date$ +#$Revision$ +# +#$Log$ +#Revision 1.4 2002/10/14 12:38:25 kueller +#Outwall Script ist mit dem neuen Firewall script überflüssig geworden +# +#Revision 1.3 2002/02/13 13:39:11 hkueller +#Erzeugen er links fuer outwall script +# +#Revision 1.2 2001/10/17 08:24:16 kueller +#Rechtekorrektur für init script +# +#Revision 1.1.1.1 2001/09/23 17:40:02 kueller +#AddOns für iptables +# +# + +if [ -d /var/install/sysvinit* ]; then + WDIR=`pwd` + cd etc/init.d + chmod 755 firewall + mkdir rc{0,1,2,3,4,5,6}.d + for i in 0 6; do + cd rc$i.d + ln -s ../firewall K75firewall + cd .. + done + for i in 1 2 3 4 5; do + cd rc$i.d + ln -s ../firewall S12firewall + cd .. + done + cd $WDIR +fi