commit b03dc4263f492da0b206f51f12e3f8c27e8a2f14 Author: kueller Date: Sat May 3 16:58:49 2008 +0000 V961 Tree Umbau git-svn-id: svn://svn.compuextreme.de/Viitor/V961/Viitor_iptables@4267 504e572c-2e33-0410-9681-be2bf7408885 diff --git a/etc/init.d/.firewallfunc b/etc/init.d/.firewallfunc new file mode 100755 index 0000000..05fc56e --- /dev/null +++ b/etc/init.d/.firewallfunc @@ -0,0 +1,1131 @@ +#!/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 + } + +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 +} + +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 + } + +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..c8f753e --- /dev/null +++ b/etc/init.d/firewall @@ -0,0 +1,428 @@ +#!/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 "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 + 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 + 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 + 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/init/genpkg b/init/genpkg new file mode 100644 index 0000000..8601b79 --- /dev/null +++ b/init/genpkg @@ -0,0 +1,38 @@ +#!/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 +# +# + +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