powered by Linux
Firewall mit IPTables
 IPTables

1. Kurze Einführung in IPTables

2. Firestarter

3. Arno's IPTables

4. Guarddog / Guidedog




1. Kurze Einführung in IPTables
Eine der ersten Anforderungen ist: Unser Linux-Rechner soll als Router und Firewall das interne Netzwerk aus Windows- und Linux-Rechnern mit dem Internet verbinden. Dies gelingt z. Bsp. mit IPTables.
IPTables sind mit dem Kernel verbundene Regeln, die den gesamten Verkehr an einer oder mehrer Netzwerkschnittstellen überwachen können. Diese sehr mächtge Vorrichtung ist zwar gut dokumentiert, aber trotzdem schwer zu handhaben.

IPTables funktionieren ab Kernel 2.4 und sind ab Kernel 2.6 standard. Sie lösen die IPCHAINS ab.

Ein gute Einführung zu diesem Thema findet sich u.a. in dem Standardwerk:
                  Michael Kofler - Linux Installation, Konfiguration, Anwendung

Hier soll nur eine kleine Einführung veranschaulichen, worum es hierbei geht.

Um einen definierten Ausgangszustand zu erhalten, werden mit dem Script     resetipt          alle Tabellen auf dem direkt mit dem Internet verbundenen Rechner ( ab jetzt ROUTER genannt)  zurückgesetzt. Dieses Script wird in /bin von "root" abgelegt und mit
                                     chmod u+x /bin/resetipt
ausführbar gemacht.
Anschließend wollen wir schrittweise (als root) den Zugriff auf das Internet für einzelne Rechner erlauben, die mit dem Server im gleichen lokalen Netzwerk verbunden sind.
Was soll erreicht werden?
Unser Router ist per z. Bsp. ADSL (oder ISDN oder ..) mit dem Internet verbunden. Bei DSL finden wir mit
  ifconfig ppp0             heraus, wie die uns (per DHCP) zugeteilte Adresse lautet. Nur mit dieser IP-Adresse können wir uns im Internet melden. Im eigenen Netzwerk hat jeder Rechner jedoch eine ganz andere Adresse, die mit der ppp0-Adresse in keinerlei Zusammenhang steht. Hier hilft ein Trick: Die Netzwerk-Rechner melden sich mit ihrer eigenen IP-Adresse beim Router und schicken das Paket, daß ins Internet geleitet werden soll. Unser Router ersetzt die IP-Adresse durch seine eigene ppp0-Adresse und schickt das Paket weiter ins Internet. Dort tritt also nur der Router in Erscheinung. Die Antworten, die zum Router kommen, werden je nach Anfrage, die sich der Router gemerkt hat, an den ursprünglichen Rechner weitergeleitet. Für diesen ist der Router also nur eine Durchgangsstation zum Internet., der genauso wenig wahrgenommen wird, wie alle anderen Rechner im Internet, die für den Datentransport zuständig sind. Im einfachsten Fall werden die Datenpackete vom Router also nicht verändert oder kontrolliert und er ist völlig transparent. Um diese Aufgabe schnell genug erledigen zu können, ist sie dem Kernel zugeordnet.                     Zum Anfang

In der Pseudodatei /proc/sys/net/ipv4/ip_forward wird die Weiterleitung grundsätzlich verboten (=0) oder erlaubt (=1).
Mit     echo "1" >/proc/sys/net/ipv4/ip_forward       wird also im ersten Schritt die Weiterleitung von Datenpaketen beim Router erlaubt. Diese Erlaubnis reicht jedoch nicht !
Mit dem Programm     iptables    werden in den vom Kernel benutzten Tabellen (iptables)  Regeln eingeschrieben, die die Weiterleitung der Datenpackete beschreiben. In diesen Tabellen gibt es eine Abteilung FORWARD, die genau für diesen Zweck geschaffen wurde. Daneben gibt es immer die Abteilungen INPUT und OUTPUT, die, wie der Name besagt, die Regeln für empfangene und zu verschickende Datenpackete enthalten.
Nach     resetipt      ist mit  ACCEPT alles erlaubt. Wenn wir uns mit     iptables  -L  -n        die Tabellen anzeigen lassen, so bekommen wir:



Chain INPUT (policy ACCEPT)

target     prot opt source               destination        

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        

policy ACCEPT bedeutet:          Die Grundregel ist:   "ERLAUBT"
Weitere Regeln wurden nicht definiert.

Mit      iptables -P OUTPUT DROP     an unserem Router können wir sofort das Senden von Datenpacketen verbieten, obwohl die Internet-Verbindung hiervon nicht betroffen ist. Ein     ping google.de     bringt SOFORT das Ergebnis:
            ping: unknown host google.de
Kein Wunder, denn die Anfrage durfte ja gar nicht erst in das Internet übertragen werden. Schnell wieder zurück zum alten Zustand:
            iptables -P OUTPUT ACCEPT
Jetzt geht wieder alles.
Nun probieren wir:
    iptables -P INPUT DROP
Damit wird nur das Empfangen von Packete verboten.
Ein     ping google.de     bringt zunächst keinerlei Antwort. Es dauert eine ganze Zeit, bis
            ping: unknown host google.de
erscheint. Unsere Anfrage wurde ja immerhin ins Internet geschickt. Lediglich jedes Antwortpacket wurde schlicht unterschlagen, was ping erst nach einiger Zeit (timeout) bemerkt.

Mit      resetipt       wird wieder der Ausgangszustand hergestellt.

Achtung:
In diesen Beispielen ist   eth0   mit dem internen Netzwerk verbunden und das DSL-Modem über    eth1   . Gegebenenfalls muß also  eth0  durch die entsprechende Netzwerkkarte ersetzt werden (z.Bsp. eth1).

Jetzt soll ein erstes Forwarding für einen unserer Rechner im Netzwerk erlaubt werden.
In diesem Beispiel gehen wir davon aus, dass unser Router in unserem Netzwerk die Adresse    192.168.0.1   besitzt.
Unter 192.168.0.2 bis 192.168.0.22 sind weitere 21 Rechner in unserem Netz zu finden. Jetzt wollen wir dem Rechner 192.168.0.15 (und nur diesem !) den Zugang zum Internet erlauben.
Zunächst verbieten wir in der Grundregel jedes Forwarding:
          iptables -A FORWARD DROP
Dann erlauben wir einem einzelnen Rechner das Weiterleiten seiner Packete:
Hierzu geben wir auf dem Router ein:
          iptables -A FORWARD -i eth0 -o ppp0 -s 192.168.0.15 -j ACCEPT
          iptables -A FORWARD -i ppp0 -o eth0 -s 192.168.0.15 -j ACCEPT

Mit      iptables -L -n                 überzeugen wir uns, dass die neue Regel erstellt wurde:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination        

Chain FORWARD (policy DROP)
 target    prot opt source               destination        
ACCEPT     all  --  192.168.0.15         0.0.0.0/0          
ACCEPT     all  --  0.0.0.0/0                192.168.0.15          

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination       

Unser 1.Befehl bedeutet:
-A                           Zufügen(add) einer Regel
FORWARD              Betrifft Abteilung "WEITERLEITEN"
-i  eth0                   Packete, die über Eingang (input) eth0 hereinkommen
-o ppp0                  sollen zum Ausgang ppp0 ....(s.u) weitergeleitet werden, wenn
-s 192.168.0.15       sie von der Quelle (source) 192.168.0.15 kommen
-j ACCEPT                .... (s.o) Erlaubnis erteilt zum weiterleiten = Packete akzeptieren

Anlog bedeutet -d (Destination=Ziel)

Nur Packete von und an 192.168.0.15 werden durchgeschleust.

DIES REICHT ABER NOCH NICHT ! Unser Computer würde sich beim Internet-Provider mit 192.168.0.15 melden und dieser kann damit schlicht nicht anfangen. Schließlich hat er dem Router eine ganz andere Adresse zugeteilt !
Es fehlt der letzte Befehl auf dem Router:
                iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Dieser Befehl bewirkt die eigentliche Adressumsetzung, d.h. daß (s.o.) statt der Adresse 192.168.0.15  die Router Adresse (vom Provider zugeteilt, nicht etwa 192.168.0.1)  zum Transfer in das Internet benutzt wird und bei Antworten zurückübersetzt wird.
Mit
                iptables -v -L && iptables -v -L POSTROUTING -t nat
sehen wir uns das Ergebnis unserer Bemühungen an:

Chain INPUT (policy ACCEPT 852 packets, 89749 bytes)
 pkts bytes target     prot opt in     out     source               destination        

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination        
  0     0    ACCEPT     all  --  eth0    ppp0   192.168.0.15      anywhere           
  0     0    ACCEPT     all  --  ppp0   eth0    anywhere          192.168.0.15               

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
        
Chain POSTROUTING (policy ACCEPT 127 packets, 18503 bytes)
 pkts bytes target       prot opt in       out       source                 destination        
   0    0 MASQUERADE  all   ---  any    ppp0    anywhere             anywhere           

Wir überprüfen noch einmal die Erlaubnis zum Weiterleiten:
                cat /proc/sys/net/ipv4/ip_forward
1

Damit sind auf unserem Router alle Aufgaben erledigt.

Jetzt gehen wir zum Rechner 192.168.0.15, um diesem mitzuteilen, daß er über 192.168.0.1 Zugang zum Internet hat.
Dies erledigen wir mit
                 route add default gw 192.168.0.1
Mit
                 ping google.de
stellen wir den Erfolg unserer Bemühungen fest. Wir starten einen Browser und surfen.
Eine Überprüfung zeigt, daß nur DIESER Rechner (außer dem Router natürlich) Verbindung mit dem Internet aufnehmen kann !

Ein etwas ausführlichereres Script mit Logging-Beispiel ist unter       mkforward     zu finden (s.u.).

Ab hier gibt es verschieden Möglichkeiten:

1. Diese Scripte ausbauen
Da steht sicher noch eine ganze Menge Arbeit bevor, aber  für das eigene Verständnis ist dies sicher vorteilhaft.
Hilfreich in diesem Zusammenhang sind dabei vielleicht "Arno's IPTables",  eine Konfigurationsdatei und shell-script. Hier kann man die gut dokumentierten, bereits vorgefertigten Befehle nach eigenen Bedürfnissen modifizieren. Hervorragend als Übung geeignet !

2. War ja ganz interessant, aber da gits doch sicher etwas Fertiges.
Na klar, zum Bsp. "firestarter": deutsch, übersichtlich, einfachst in der Bedienung
Oder "Guarddog": eine volle grafische .Oberfläch, die es auch dem Laien erlaubt, ohne Kenntnisse von Portnummern eine sehr sichere Firewall zu gestalten. Guarddog arbeitet mit IPChains (Kernel 2.2) und IPTables (Kernel >=2.4). Die Besonderheit: Es ist zunächst ALLES verboten und Gewünschtes muß erlaubt werden. Das Ergebnis ist professionell. Das erzeugte shell-script wird beim näüchsten Start des Rechners wieder ausgeführt, ohne daß Guarddog neu gestartet werden muß. Es lassen sich auch leicht interaktiv gewünschte Optionen zu- oder abschalten z. Bsp. ICQ). Zusammen mit der deutschen Oberfläche haben diese Optionen dafür gesorgt, dass Guarddog auch bei Profis ein heimlicher Standard geworden ist. Die hier vorgestellte Einführung erleichtert vielleicht das Einarbeiten in die von Guarddog erstellten IPTables-Kommandos.


TIPP:
Mit Guarddog erstellte scripts lassen sich auf andere Rechner übertragen. Eine grafische Oberfläche (KDE) wird nicht benötigt. Mit DSL ("Damn Small Linux" läßt sich so auch aus einem Uralt-Rechner mit 200 Mhz, 64MB Ram und 1GB Festplatte ein erstklassiger Firewall-Rechner erstellen. Ideal für kleine Betriebe und Schulen, oder natürlich auch für den Privat-Haushalt mit mehrern Computern.

Viel Erfolg beim "Firewalling"

Zum Anfang
------------------------------------------------------------------------------------


2. Firestarter        (Homepage: http://www.fs-security.com/ )                     Zum Anfang

Sehr einfache Firewall, die es auch dem blutigen Laien, der nie von IPTables auch nur gehört hat, gestattet, per Mouseklick eine brauchbare Firewall und das Forwarding mit Hilfe eines Wizzards zu installieren. Dabei präsentiert sich Firestarter in der Landessprache (hier: deutsch).
(Anleitung liegt allerdings nur in Englisch vor).
Schon nach Sekunden ist ein erster Schutz erreicht. "Angriffe" aus dem Internet werden sofort angezeigt ! Auch später können die Regeln jederzeit verändert werden. (Wer das beherrscht, sollte vielleicht zu   Guarddog    wechseln!)

Mein Tipp: firestarter beim ersten mal erst starten, wenn die Internetverbindung schon steht.
Mit Abstand die einfachste Firewall, die ich kenne - aber durchaus ausbaufähig!

Eine GUI (KDE) ist zwingend erforderlich.

Empfehlenswert für den Schnellstart !

Beispiel: Alle Änderungen sofort wirksam werden lassen
Firestarter3

Beispiel: Hier die Schnittstellen auswählen und das Forwarding / Masquerading einschalten:
Firestarter2
Zum Anfang
------------------------------------------------------------------------------------




3. Arno's IPTables      (homepage:   http://rocky.molphys.leidenuniv.nl/)                    Zum Anfang
(englisch)
Dieser Ansatz besteht aus zwei Dateien:
    1. Der Konfigurations-Datei        /etc/arno-iptables-firewall.conf
    2. Dem Shell-script                     /bin/aif       (Meine Abkürzung für        arno-iptables-firewall      , dies war mir zu lang!)

Die gut dokumentierte Konfig-Datei kann ohne tiefergehende Kenntnisse der IPTables verändert werden. Das Shell-script prpft die Optionen der Konfigurationsdatei und setzt diese in IPTables-Kommandos um.
Dieser Ansatzt hat viele Vorteile:
Hier kann auch der Laie schnell eine sehr brauchbare Firewall inkl. Forwarding erstellen, die leicht transportabel und übersichtlich ist. Für nahezu jedes Linux-System (ab Kernel 2.4) - auch ohne GUI !  Zusammen mit "Damn Small Linux" die perfekte Wahl, um auch aus alten Computern eine sehr effiziente und kompakte Firewall zu machen.

Hier eine funtionierende .conf-Datei aus der Praxis:    /etc/arno-iptables-firewall.conf
(
Netzwerk: 192.168.117.x, Eth0 per Hub/Switch ( nicht direkt!) an DSL-Modem angeschlossen. An diesem Hub ist auch der Rest des Netzwerks angeschlossen: Kein optimaler Schutz, aber für meine Testumgebung notwendig. Vorteil: Jeder Rechner im Netz kann Firewall sein, da jeder Rechner auch direkt mit dem DSL-Modem kommunizieren kann.
In der Praxis sollte dies natürlich geändert werden !!!
)


Zum Anfang
------------------------------------------------------------------------------------



4. Guarddog / Guidedog                    Zum Anfang

Achtung: Nat/Maskquerading mit Guidedog oder einem script wie mkforward

Guarddog ist aus meiner Sicht die beste Möglichkeit für versierte Laien und Experten, um eine ausgefeilte Firewall zu erstellen
Es wird sich, so glaube ich, zu einem festen Standard unter KDE-Linux entwickeln. Extrem mächtig !!! Es präsentiert sich in Landessparche (deutsch), allerdings ist die Hilfe in Englisch.
Wer anfängt, Firestarter auszubauen, kann sicher auch gleich Guarddog benutzen.

guarddog1.png


Guarddog verbietet zunächst ALLES, jede Option muß einzeln eingeschaltet werden.
Die Kenntnis von Portnummern ist nicht erforderlich - alles läuft über Klartext. Links unten findet sich eine Erklärung von den gewählten Service.
Für die Benutzung von Guarddog ist KDE erforderlich. Allerdings erstellt Guarddog ein shell-script (/etc/rc.firewall) dass auch ohne KDE ausgeführt werden kann. (Ein Transport auf "Damn Small Linux" ist mir allerdings nicht gelungen!)




guarddog2.png

Dabei können für einzelne Rechner oder Netzwerk-Bereiche jeweils einzelne Regelwerke erstellt werden:
guarddog3.png

Allerdings hat das Programm auch einige Haken:
- Nat/Masquerading nicht enthalten ! (s. Guidedog)
- Hakt beim Editieren:     Ich mußte Programm stoppen und neu starten, um eine neue Netzwerkzone einzurichten.
                                      Für die Eingabe einer Netzwerkadresse mußte das Feld erst per Mouse-Markierung gelöscht werden.
- Kein Nat/Masquerading
- Scripts sind nicht immer transportierbar

Trotzdem gibt es wohl kaum eine bessere Alternative.
- Firewalls sind kaskadierbar ( z.Bsp. für DMZ Demilitarized Zone)
- Firwalls lassen sich leicht so verbergen, dass sie praktisch unsichtbar werden - sowohl gegenüber dem Internet, als auch gegeüber dem eigenen Netz.
- Ausgefeiltes Logging
- Durch IPChains ab Kernel 2.2
- Erzeugt nur ein script. Unterschiedlich scripts können daher leicht auch uhrzeitabhängig / wochentagabhängig gestartet werden. 

Für mich die beste Firewall.
Zum Anfang
---------------------


Guidedog                                    Zum Anfang

ist die natürliche Ergänzung zu Guarddog, um Nat/Masquerading/Routing/Forwarding zu erlauben.
KDE ist notwendig. Das erstellte script /etc/rc.guidedog ist (in Grenzen) transportierbar und benötigt kein KDE. Die Oberfläche ist englisch.

guidedog1.png


Anfragen zu bestimmten Diensten können auf spezielle Rechner umgeleitet werden (Forwarding):
Die Port-Nummern der Dienste müssen allerdings bekannt sein.
Nicht so komfortabel, wie Guarddog, aber doch eine gute Ergänzung !

guidedog2.png


Zum Anfang
------------------------------------------------------------------------------------


Anhang:
        Dateien, die im Text beschrieben wurden



 
/etc/arno-iptables-firewall.conf:                   Zum Anfang


#------------------------- EXAMPLE(!) Configuration file -----------------------
#                       -= Arno's iptables firewall =-
#         Single- & multi-homed firewall script with DSL/ADSL support
#
# (C) Copyright 2001-2006 by Arno van Amersfoort
# Homepage  : http://rocky.eld.leidenuniv.nl/
# Freshmeat : http://freshmeat.net/projects/iptables-firewall/?topic_id=151
# Email     : arnova AT rocky DOT eld DOT leidenuniv DOT nl
#             (note: you must remove all spaces and substitute the @ and the .
#              at the proper locations!)
# -----------------------------------------------------------------------------
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, 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.w

# 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.
# -----------------------------------------------------------------------------


# Location of the iptables-binary (use 'locate iptables' or 'whereis iptables'
# to manually locate it).
# Weber:   which iptables
# -----------------------------------------------------------------------------
IPTABLES="/sbin/iptables"

###############################################################################
# External (internet) interface settings                                      #
###############################################################################

# The external interface(s) that will be protected (and used as internet
# connection). This is probably ppp+ for non-transparent(!) (A)DSL modems
# otherwise it should be "ethX" (eg. eth0). Multiple interfaces should be space
# separated.
# -----------------------------------------------------------------------------
EXT_IF="ppp0"

# Enable if THIS machines (dynamically) obtains its IP through DHCP (from your
# ISP).
# -----------------------------------------------------------------------------
EXT_IF_DHCP_IP=0

# (EXPERT SETTING!) Here you can specify your external(!) subnet(s). You should
# only use this if you for example have a corporate network and/or running a
# DHCP server on your external(!) interface. Home users should normally NOT
# touch this setting. Multiple subnets should be space separated.
# Don't forget to specify a proper subnet masker (eg. /24, /16 or /8)!
# -----------------------------------------------------------------------------
EXTERNAL_NET=""

# (EXPERT SETTING!) Here you can specify the IP address used for broadcasts
# on your external subnet. You only need to set this option if you want to use
# the BROADCAST_XXX_NOLOG variables AND you use a non-standard broadcast
# address (not *.255.255.255, *.*.255.255 or *.*.*.255)! So normally leaving
# this empty should work fine. Multiple addresses (if you have more than one
# external interface) should be space separated.
# -----------------------------------------------------------------------------
EXT_NET_BCAST_ADDRESS=""

# Enable this if THIS MACHINE is running a DHCP(BOOTP) server for a subnet on
# the external(!) interface. Note that you don't need this for internal
# subnets, as for these nets everything is accepted by default. Don't forget to
# configure the EXTERNAL_NET variable, to make this work.
# -----------------------------------------------------------------------------
EXTERNAL_DHCP_SERVER=0


###############################################################################
# Internal (LAN) interface settings                                           #
###############################################################################

# Internal network interface or interfaces (multiple(!) interfaces should be
# space separated). Remark this if you don't have any internal network
# interfaces. Note that ALL traffic is accepted from these interfaces.
# -----------------------------------------------------------------------------
INT_IF="eth0"

# Specify here the internal subnet which is connected to the internal interface
# (INT_IF). For multiple interfaces(!) you can either specify multiple subnets
# here or specify one big subnet for all internal interfaces.
# -----------------------------------------------------------------------------
INTERNAL_NET="192.168.117.0/24"

# (EXPERT SETTING!) Here you can specify the IP address used for broadcasts
# on your internal subnet. You only need to set this option if you want to use
# the MAC filter AND you use a non-standard broadcast address
# (not *.255.255.255, *.*.255.255 or *.*.*.255)! So normally leaving
# this empty should work fine. Multiple addresses (if you have more than one
# external interface) should be space separated.
# -----------------------------------------------------------------------------
INT_NET_BCAST_ADDRESS=""

# Uncomment & specify here the location of the file that contains the MAC
# addresses of INTERNAL hosts that are allowed. The MAC addresses should be
# written like 00:11:22:33:44:55
# Note that the last line of this
# file should always contain a carriage-return (enter)!
# -----------------------------------------------------------------------------
#MAC_ADDRESS_FILE=/etc/arno-firewall-mac-addresses


###############################################################################
# DMZ (aka DeMilitarized Zone) settings (EXPERT SETTINGS!)                    #
###############################################################################

# Put in the following variable the network interfaces that are DMZ-classified.
# You can also use this interface if you want to shield your Wireless network
# from your LAN.
# -----------------------------------------------------------------------------
DMZ_IF=""

# Specify here the subnet which is connected to the DMZ interface (DMZ_IF).
# For multiple interfaces(!) you can either specify multiple subnets here or
# specify one big subnet for all DMZ interfaces.
# -----------------------------------------------------------------------------
DMZ_NET=""


###############################################################################
# NAT (Masquerade, SNAT, DNAT) settings                                       #
###############################################################################

# Enable this if you want to perform NAT (masquerading) for your internal
# network (LAN) (eg. share your internet connection with your internal
# net(s) connected to eg. INT_IF).
# -----------------------------------------------------------------------------
NAT=1

# (EXPERT SETTING!). By default only the first external interface (EXT_IF)
# is used for masquerading (NAT). By enabling this option ALL external
# interfaces *can* be used (load balancing / multi-route). Note that you should
# properly configure your route-table to make this work. Check the INSTALL file
# for more info.
# -----------------------------------------------------------------------------
MASQ_MULTI_ROUTE=0

# (EXPERT SETTING!). In case you would like to use SNAT instead of
# MASQUERADING then uncomment and set the IP or IP's here of your static
# external address(es). Note that when multiple IP's are specified, SNAT
# multiroute is enabled (load balancing over multiple external (internet)
# interfaces, check the README file for more info). Note that the order of IP's
# should match the order of interfaces (they belond to) in $EXT_IF!
# -----------------------------------------------------------------------------
#NAT_STATIC_IP="193.2.1.1"

# (EXPERT SETTING!). Use this variable only if you want specific subnets or
# hosts to be able to access the internet. When no value is specified, your
# whole internal net will have access. In both cases it's obviously only
# meaningful when NAT is enabled. Note that you can also use this variable if
# you want to use NAT for your DMZ.
# -----------------------------------------------------------------------------
NAT_INTERNAL_NET="$INTERNAL_NET"

# NAT TCP/UDP/IP forwards. Forward ports or protocols from the gateway to
# an internal client through (D)NAT. You can also use it to forward prots
# to DMZ hosts
#
# TCP/UDP form:
#       "{SRCIP1,SRCIP2,...:}PORT1,PORT2-PORT3,...>DESTIP1{:port} \
#        {SRCIP3,...:}PORT3,...>DESTIP2:port}"
#
# IP form:
#       "{SRCIP1,SRCIP2,...:}PROTO1,PROTO2,...>DESTIP1 \
#        {SRCIP3:}PROTO3,PROTO4,...>DESTIP2"
#
# TCP/UDP port forward examples:
# Simple (forward port 80 to internal host 192.168.0.10):
#       NAT_xxx_FORWARD="80>192.168.0.10"
# Advanced (forward port 20 & 21 to 192.168.0.10 and
#           forward from 1.2.3.4 port 81 to 192.168.0.11 port 80:
#       NAT_xxx_FORWARD="20,21>192.168.0.10 1.2.3.4:81>192.168.0.11:80"
#
# IP protocol forward example:
#        "47,48>192.168.0.10" (forward protocols 47 & 48 to 192.168.0.10
#
# NOTE 1: {:port} is optional. Use it to redirect a specific port to a
#         different port on the internal client.
# NOTE 2: {SRCIPx} is optional. Use it to restrict access to specific source
#         IP addresses.
# NOTE 3: Port ranges can be written as "PORT1-PORT3" (ie. "1024-1030" would
#         include ports 1024 until 1030) (but using a : is also allowed).
# -----------------------------------------------------------------------------
#NAT_TCP_FORWARD="81>192.168.0.10 1.2.3.4:80>192.168.0.11:9999"
NAT_UDP_FORWARD=""
NAT_IP_FORWARD=""


###############################################################################
# (ADSL) Modem settings                                                       #
#                                                                             #
# The MODEM_xxx options should (only) be used when you have an ((A)DSL)       #
# modem which works with a ppp-connection between the modem and the           #
# host the modem is connected to.                                             #
#                                                                             #
# You can check whether this applies for your (hardware) setup with           #
# 'ifconfig' (a 'ppp' device is shown).                                       #
# This means that if your modem is bridging or an NAT router) or the          #
# network interface the modem is connected to doesn't have an IP, you         #
# should leave the MODEM_xxx options disabled (=default)!                     #
###############################################################################

# The physical(!) network interface your ADSL modem is connected to (this is
# not ppp0!).
# -----------------------------------------------------------------------------
MODEM_IF="eth0"

# (optional) The IP of the network interface (MODEM_IF) your ADSL modem is
# connected to (IP shown for the modem interface (MODEM_IF) in 'ifconfig').
# -----------------------------------------------------------------------------
#MODEM_IF_IP="10.0.0.150"

# (optional) The IP of your (A)DSL modem itself.
# -----------------------------------------------------------------------------
#MODEM_IP="10.0.0.138"

# (EXPERT SETTING!). Here you can specify the hosts/local net(s) that should
# have access to the (A)DSL modem itself (manage modem settings). The default
# setting ($INTERNAL_NET) allows access from everybody on your LAN.
# -----------------------------------------------------------------------------
MODEM_INTERNAL_NET=$INTERNAL_NET


###############################################################################
# General settings                                                            #
###############################################################################

# Most people don't want to get any firewall logs being spit to the console.
# This option makes the kernel ring buffer only log messages with level
# "panic".
# -----------------------------------------------------------------------------
DMESG_PANIC_ONLY=1

# Enable this if you want TOS mangling (RFC) (recommended).
# -----------------------------------------------------------------------------
MANGLE_TOS=1

# Enable this if you want to set the maximum packet size via the
# Maximum Segment Size(through MSS field) (recommended).
# -----------------------------------------------------------------------------
SET_MSS=1

# Enable this if you want to increase the TTL value by one in the prerouting
# chain. This hides the firewall when performing eg. traceroutes to internal
# hosts.
# -----------------------------------------------------------------------------
TTL_INC=0

# (EXPERT SETTING!) Enable this if you want to set the TTL value for packets in
# the OUTPUT & FORWARD chain. Note that this only works with newer 2.6 kernels
# (2.6.14 or better) or patched 2.4 kernels, which have netfilter TTL target
# support. Don't mess with this unless you really know what you are doing!
# -----------------------------------------------------------------------------
#PACKET_TTL="64"

# Enable this to resolve names of DNS IP's etc.
# -----------------------------------------------------------------------------
RESOLV_IPS=0

# Enable this to support the IRC-protocol.
# -----------------------------------------------------------------------------
USE_IRC=0

# (EXPERT SETTING!). Loosen the forward chain for the external interface(s).
# Enable it to allow the use of protocols like UPnP. Note that it *could* be
# less secure.
# -----------------------------------------------------------------------------
LOOSE_FORWARD=1

# (EXPERT SETTING!). Enable this if you want to drop packets originating from a
# private address.
# -----------------------------------------------------------------------------
DROP_PRIVATE_ADDRESSES=0

# (EXPERT SETTING!). Protect this machine from being abused for a DRDOS-attack
# ("Distributed Reflection Denial Of Service"-attack). (STILL EXPERIMENTAL!)
# -----------------------------------------------------------------------------
DRDOS_PROTECT=0

# Enable this if you want to allow/enable IPv6 traffic. Note that my firewall
# does NOT filter IPv6 traffic (yet), and thus NO checking is performed on it!
# -----------------------------------------------------------------------------
IPV6_SUPPORT=0

# This option fixes problems with SMB broadcasts when using nmblookup
# -----------------------------------------------------------------------------
#NMB_BROADCAST_FIX=1

# (EXPERT SETTING!). Enter your remote Freeswan subnet(s) here to enable
# "Virtual IP" support for Freeswan. This allows you to have remote
# "Virtual IP's" which are in the same subnet as yourself, to be routed into
# your network (via NAT). Make sure you understand what this is and that you
# really want this (else leave it empty)!
# -----------------------------------------------------------------------------
## Weber
FREESWAN_NET="192.168.117.24 192.168.117.25"
# (EXPERT SETTING!). (Other) trusted network interfaces for which ALL IP
# traffic should be ACCEPTED. (multiple(!) interfaces should be space
# separated). Be warned that anything TO and FROM these interfaces is allowed
# (ACCEPTED) so make sure it's NOT routable(accessible) from the outside world
# (internet)!
# -----------------------------------------------------------------------------
TRUSTED_IF=""

# (EXPERT SETTING!). Put here the (internal) interfaces that should trust
# (accept forward traffic) each other.
# -----------------------------------------------------------------------------
INT_IF_TRUST=""

# Location of the custom iptables rules file (if any).
# -----------------------------------------------------------------------------
CUSTOM_RULES=/etc/arno-firewall-custom-rules


###############################################################################
# Logging options - All logging is rate limited to prevent log flooding       #
###############################################################################

# Enable logging for explicitly blocked hosts.
# -----------------------------------------------------------------------------
BLOCKED_HOST_LOG=1

# Enable logging for various stealth scans (reliable).
# -----------------------------------------------------------------------------
SCAN_LOG=1

# Enable logging for possible stealth scans (less reliable).
# -----------------------------------------------------------------------------
POSSIBLE_SCAN_LOG=1

# Enable logging for TCP-packets with bad flags.
# -----------------------------------------------------------------------------
BAD_FLAGS_LOG=1

# Enable logging of invalid packets.
# -----------------------------------------------------------------------------
INVALID_PACKET_LOG=1

# Enable logging of source IP's with reserved addresses.
# -----------------------------------------------------------------------------
RESERVED_NET_LOG=1

# Enable logging of fragmented packets.
# -----------------------------------------------------------------------------
FRAG_LOG=1

# Enable logging of (probable) "lost TCP connections". Keep disabled to
# reduce false alarms.
# -----------------------------------------------------------------------------
LOST_CONNECTION_LOG=0

# Enable logging of denied local (OUTPUT) connections.
# -----------------------------------------------------------------------------
OUTPUT_DENY_LOG=1

# Enable logging of denied LAN output (FORWARD) connections.
# -----------------------------------------------------------------------------
LAN_OUTPUT_DENY_LOG=1

# Enable logging of denied DMZ output (FORWARD) connections.
# -----------------------------------------------------------------------------
DMZ_OUTPUT_DENY_LOG=1

# Enable logging of denied DMZ input (FORWARD) connections.
# -----------------------------------------------------------------------------
DMZ_INPUT_DENY_LOG=1

# Enable logging of dropped ICMP-request packets (ping).
# -----------------------------------------------------------------------------
ICMP_REQUEST_LOG=1

# Enable logging of dropped "other" ICMP packets.
# -----------------------------------------------------------------------------
ICMP_OTHER_LOG=1

# Enable logging of normal connection attempts to privileged TCP ports.
# -----------------------------------------------------------------------------
PRIV_TCP_LOG=1

# Enable logging of normal connection attempts to privileged UDP ports.
# -----------------------------------------------------------------------------
PRIV_UDP_LOG=1

# Enable logging of normal connection attempts to unprivileged TCP ports.
# -----------------------------------------------------------------------------
UNPRIV_TCP_LOG=1

# Enable logging of normal connection attempts to unprivileged UDP ports.
# -----------------------------------------------------------------------------
UNPRIV_UDP_LOG=1

# Enable logging of normal connection attempts to "other-IP"-protocols (non
# TCP/UDP/ICMP).
# -----------------------------------------------------------------------------
OTHER_IP_LOG=1

# Enable logging for ICMP flooding.
# -----------------------------------------------------------------------------
ICMP_FLOOD_LOG=1

# Enable logging for not-allowed MAC addresses (if used).
# -----------------------------------------------------------------------------
MAC_ADDRESS_LOG=1

# (EXPERT SETTING!). The location of the dedicated firewall log file. When
# enabled the firewall script will also log start/stop etc. info to this file
# as well. Note that in order to make this work, you should also configure
# syslogd to log firewall messages to this file (see LOGLEVEL below for further
# info).
# -----------------------------------------------------------------------------
#FIREWALL_LOG=/var/log/firewall

# (EXPERT SETTING!). Current log-level ("info": default kernel syslog level)
# "debug": can be used to log to /var/log/firewall.log, but you have to configure
# syslogd accordingly (see included syslogd.conf examples).
# -----------------------------------------------------------------------------
LOGLEVEL=info

# Put in the following variables which hosts you want to log certain incoming
# connection attempts for.
# TCP/UDP port format (LOG_HOST_xxx_INPUT):
#       "host1,host2>port1,port2 host3,host4>port3,port4 ..."
#
# IP protocol format (LOG_HOST_IP_INPUT):
#       "host1,host2>proto1,proto2 host3,host4>proto4,proto4 ..."
# -----------------------------------------------------------------------------
LOG_HOST_TCP_INPUT=""
LOG_HOST_UDP_INPUT=""
LOG_HOST_IP_INPUT=""

# Put in the following variables which hosts you want to log certain outgoing
# connection attempts for.
# TCP/UDP port format (LOG_HOST_xxx_OUTPUT):
#       "host1,host2>port1,port2 host3,host4>port3,port4 ..."
#
# IP protocol format (LOG_HOST_IP_OUTPUT):
#       "host1,host2>proto1,proto2 host3,host4>proto4,proto4 ..."
# -----------------------------------------------------------------------------
LOG_HOST_TCP_OUTPUT=""
LOG_HOST_UDP_OUTPUT=""
LOG_HOST_IP_OUTPUT=""

# Put in the following variables which services you want to log incoming
# connection attempts for.
# -----------------------------------------------------------------------------
LOG_TCP_INPUT=""
LOG_UDP_INPUT=""
LOG_IP_INPUT=""

# Put in the following variables which services you want to log outgoing
# connection attempts for.
# -----------------------------------------------------------------------------
LOG_TCP_OUTPUT=""
LOG_UDP_OUTPUT=""
LOG_IP_OUTPUT=""

# Put in the following variable which hosts you want to log incoming connection
# (attempts) for.
# -----------------------------------------------------------------------------
LOG_HOST_INPUT=""

# Put in the following variable which hosts you want to log outgoing connection
# (attempts) to.
# -----------------------------------------------------------------------------
LOG_HOST_OUTPUT=""


###############################################################################
# /proc based settings (EXPERT SETTINGS!)                                     #
###############################################################################

# Enable for synflood protection (through /proc/.../tcp_syncookies).
# -----------------------------------------------------------------------------
SYN_PROT=1

# Enable this to reduce the ability of others DOS'ing your machine.
# -----------------------------------------------------------------------------
REDUCE_DOS_ABILITY=1

# Enable to ignore all ICMP echo-requests (IPv4) on ALL interfaces.
# -----------------------------------------------------------------------------
ECHO_IGNORE=0

# Enable to log packets with impossible addresses to the kernel log.
# -----------------------------------------------------------------------------
LOG_MARTIANS=0

# Only disable this if you're NOT using forwarding (required for NAT etc.) for
# increased security.
# -----------------------------------------------------------------------------
IP_FORWARDING=1

# Enable if you want to accept ICMP redirect messages. Should be set to "0" in
# case of a router.
# -----------------------------------------------------------------------------
ICMP_REDIRECT=0

# Enable/modify this if you want to be a able to handle a larger (or smaller)
# number of simultaneous connections. For high traffic machines I recommend to
# use a value of at least 16384 (note that a higher value (obviously) also uses
# more memory).
# -----------------------------------------------------------------------------
CONNTRACK=16384

# You may need to enable this to get some internet games to work, but note that
# it's *less* secure.
# -----------------------------------------------------------------------------
LOOSE_UDP_PATCH=0

# Enable ECN (Explicit Congestion Notification) TCP flag. Disabled by default,
# as some routers are still not compatible with this.
# -----------------------------------------------------------------------------
ECN=0

# Enable to drop connections from non-routable IP's, eg. prevent source
# routing. By default the firewall itself also provides rules against source
# routing. Note than when you use eg. VPN (Freeswan), you should probably
# disable this setting.
# -----------------------------------------------------------------------------
RP_FILTER=1

# Protect against source routed packets. Attackers can use source routing to
# generate traffic pretending to be from inside your network, but which is
# routed back along the path from which it came, namely outside, so attackers
# can compromise your network. Source routing is rarely used for legitimate
# purposes, so normally you should always leave this enabled(1)!
# -----------------------------------------------------------------------------
SOURCE_ROUTE_PROTECTION=1

# Here we set the local port range (ports from which connections are
# initiated from our site). Don't mess with this unless you really know what
# you are doing!
# -----------------------------------------------------------------------------
LOCAL_PORT_RANGE="32768 61000"

# Here you can change the default TTL used for sending packets. The value
# should be between 10 and 255. Don't mess with this unless you really know
# what you are doing!
# -----------------------------------------------------------------------------
DEFAULT_TTL=64

# In most cases pmtu discovery is ok, but in some rare cases (when having
# problems) you might want to disable it.
# -----------------------------------------------------------------------------
NO_PMTU_DISCOVERY=0


###############################################################################
# (Transparent) proxy settings (EXPERT SETTINGS!)                             #
###############################################################################
#HTTP_PROXY_PORT="3128"
HTTPS_PROXY_PORT=""
FTP_PROXY_PORT=""
SMTP_PROXY_PORT=""
POP3_PROXY_PORT=""


###############################################################################
# Firewall policies for the LAN (EXPERT SETTINGS!)                            #
#                                                                             #
# Note that when both LAN_INET_OPEN_xxx & LAN_INET_HOST_OPEN_xxx are NOT      #
# used, the default policy for that protocol/port is accept (unless denied    #
# through LAN_INET_DENY_xxx and/or LAN_INET_HOST_DENY_xxx)!                   #
###############################################################################

# Put in the following variables the TCP/UDP ports or IP
# protocols TO (remote end-point) which the LAN hosts are
# permitted to connect to via the external (internet) interface.
# -----------------------------------------------------------------------------
LAN_INET_OPEN_TCP=""
LAN_INET_OPEN_UDP=""
LAN_INET_OPEN_IP=""

# Put in the following variables the TCP/UDP ports or IP protocols TO (remote
# end-point) which the LAN hosts are NOT permitted to connect to
# via the external (internet) interface. Examples of usage are for blocking
# IRC (TCP 6666:6669) for the internal network.
# -----------------------------------------------------------------------------
LAN_INET_DENY_TCP=""
LAN_INET_DENY_UDP=""
LAN_INET_DENY_IP=""

# Put in the following variables the TCP/UDP ports or IP
# protocols TO (remote end-point) which certain LAN hosts are
# permitted to connect to via the external (internet) interface. Note that
# any ports/protocols specified here are made "exclusively" for the accompaning
# host(s), meaning that nobody else can use them!
#
# TCP/UDP port format (LAN_INET_HOST_OPEN_xxx):
#       "host1,host2>port1,port2 host3,host4>port3,port4 ..."
#
# IP protocol format (LAN_INET_HOST_OPEN_xxx):
#       "host1,host2>proto1,proto2 host3,host4>proto4,proto4 ..."
# -----------------------------------------------------------------------------
LAN_INET_HOST_OPEN_TCP=""
LAN_INET_HOST_OPEN_UDP=""
LAN_INET_HOST_OPEN_IP=""

# Put in the following variables the TCP/UDP ports or IP protocols TO (remote
# end-point) which certain LAN hosts are NOT permitted to connect to
# via the external (internet) interface.
#
# TCP/UDP port format (LAN_INET_HOST_DENY_xxx):
#       "host1,host2>port1,port2 host3,host4>port3,port4 ..."
#
# IP protocol format (LAN_INET_HOST_DENY_xxx):
#       "host1,host2>proto1,proto2 host3,host4>proto4,proto4 ..."
# -----------------------------------------------------------------------------
LAN_INET_HOST_DENY_TCP=""
LAN_INET_HOST_DENY_UDP=""
LAN_INET_HOST_DENY_IP=""


###############################################################################
# Firewall policies for the DMZ (EXPERT SETTINGS!)                            #
###############################################################################

###############################################################################
# Note that when both INET_DMZ_OPEN_xxx & INET_DMZ_HOST_OPEN_xxx are NOT      #
# used, the default policy for that protocol/port is accept (unless denied    #
# through INET_DMZ_DENY_xxx and/or INET_DMZ_HOST_DENY_xxx)!                   #
###############################################################################

# Put in the following variables which INET hosts are permitted to connect to
# certain the TCP/UDP ports or IP protocols in the DMZ.
# -----------------------------------------------------------------------------
INET_DMZ_OPEN_TCP=""
INET_DMZ_OPEN_UDP=""
INET_DMZ_OPEN_IP=""

# Put in the following variables which INET hosts are NOT permitted to connect
# to certain the TCP/UDP ports or IP protocols in the DMZ.
# -----------------------------------------------------------------------------
INET_DMZ_DENY_TCP=""
INET_DMZ_DENY_UDP=""
INET_DMZ_DENY_IP=""

# Put in the following variables which INET hosts you want to allow for certain
# services (and logged). By default all services are allowed for DMZ
# hosts.
# TCP/UDP port format (INET_DMZ_HOST_OPEN_TCP & INET_DMZ_HOST_OPEN_UDP):
#       "host1,host2>port1,port2 host3,host4>port3,port4 ..."
#
# IP protocol format (INET_DMZ_HOST_OPEN_IP):
#       "host1,host2>proto1,proto2 host3,host4>proto4,proto4 ..."
#
# ICMP protocol format (INET_DMZ_HOST_OPEN_ICMP):
#       "host1 host2 ...."
# -----------------------------------------------------------------------------
INET_DMZ_HOST_OPEN_TCP=""
INET_DMZ_HOST_OPEN_UDP=""
INET_DMZ_HOST_OPEN_IP=""

# Put in the following variables which INET hosts you want to deny for certain
# services (and logged). By default all services are allowed for DMZ
# hosts.
# TCP/UDP port format (INET_DMZ_HOST_OPEN_TCP & INET_DMZ_HOST_OPEN_UDP):
#       "host1,host2>port1,port2 host3,host4>port3,port4 ..."
#
# IP protocol format (INET_DMZ_HOST_OPEN_IP):
#       "host1,host2>proto1,proto2 host3,host4>proto4,proto4 ..."
#
# ICMP protocol format (INET_DMZ_HOST_OPEN_ICMP):
#       "host1 host2 ...."
# -----------------------------------------------------------------------------
INET_DMZ_HOST_DENY_TCP=""
INET_DMZ_HOST_DENY_UDP=""
INET_DMZ_HOST_DENY_IP=""

###############################################################################
# Note that when both DMZ_INET_OPEN_xxx & DMZ_INET_HOST_OPEN_xxx are NOT      #
# used, the default policy for that protocol/port is accept (unless denied    #
# through DMZ_INET_DENY_xxx and/or DMZ_INET_HOST_DENY_xxx)!                   #
###############################################################################

# Put in the following variables the TCP/UDP ports or IP
# protocols TO (remote end-point) which the DMZ hosts are
# permitted to connect to via the external (internet) interface.
# -----------------------------------------------------------------------------
DMZ_INET_OPEN_TCP=""
DMZ_INET_OPEN_UDP=""
DMZ_INET_OPEN_IP=""

# Put in the following variables the TCP/UDP ports or IP protocols TO (remote
# end-point) which the DMZ hosts are NOT permitted to connect to
# via the external (internet) interface. Examples of usage are for blocking
# IRC (TCP 6666:6669) for the internal network.
# -----------------------------------------------------------------------------
DMZ_INET_DENY_TCP=""
DMZ_INET_DENY_UDP=""
DMZ_INET_DENY_IP=""

# Put in the following variables which DMZ hosts you want to allow to connect
# to certain internet hosts for services. By default all inet services are
# allowed for DMZ hosts.
#
# TCP/UDP port format (DMZ_INET_HOST_OPEN_TCP & DMZ_INET_HOST_OPEN_UDP):
#       "host1,host2>port1,port2 host3,host4>port3,port4 ..."
#
# IP protocol format (DMZ_INET_HOST_OPEN_IP):
#       "host1,host2>proto1,proto2 host3,host4>proto4,proto4 ..."
#
# ICMP protocol format (DMZ_INET_HOST_OPEN_ICMP):
#       "host1 host2 ...."
# -----------------------------------------------------------------------------
DMZ_INET_HOST_OPEN_TCP=""
DMZ_INET_HOST_OPEN_UDP=""
DMZ_INET_HOST_OPEN_IP=""

# Put in the following variables which DMZ hosts you want to deny to connect
# to certain internet hosts for services.
#
# TCP/UDP port format (DMZ_INET_HOST_OPEN_TCP & DMZ_INET_HOST_OPEN_UDP):
#       "host1,host2>port1,port2 host3,host4>port3,port4 ..."
#
# IP protocol format (DMZ_INET_HOST_OPEN_IP):
#       "host1,host2>proto1,proto2 host3,host4>proto4,proto4 ..."
#
# ICMP protocol format (DMZ_INET_HOST_OPEN_ICMP):
#       "host1 host2 ...."
# -----------------------------------------------------------------------------
DMZ_INET_HOST_DENY_TCP=""
DMZ_INET_HOST_DENY_UDP=""
DMZ_INET_HOST_DENY_IP=""

# Put in the following variables which DMZ hosts you want to allow for certain
# services (and logged). By default all (local) services are blocked for DMZ
# hosts.
# TCP/UDP port format (DMZ_HOST_OPEN_TCP & DMZ_HOST_OPEN_UDP):
#       "host1,host2>port1,port2 host3,host4>port3,port4 ..."
#
# IP protocol format (DMZ_HOST_OPEN_IP):
#       "host1,host2>proto1,proto2 host3,host4>proto4,proto4 ..."
#
# ICMP protocol format (DMZ_HOST_OPEN_ICMP):
#       "host1 host2 ...."
# -----------------------------------------------------------------------------
DMZ_HOST_OPEN_TCP=""
DMZ_HOST_OPEN_UDP=""
DMZ_HOST_OPEN_IP=""
DMZ_HOST_OPEN_ICMP=""

# (EXPERT SETTING!) DMZ-to-LAN TCP/UDP/IP open ports/protocols. Open particular
#  ports / protocols on LAN hosts(on INT_IF) for certain DMZ hosts.:
# TCP/UDP form:
#       "SRCIP1,SRCIP2,...>DESTIP1:port \
#        SRCIP3,...>DESTIP2:port"
#
# IP form:
#       "SRCIP1,SRCIP2,...>DESTIP1:protocol \
#        SRCIP3,...>DESTIP2:protocol"
#
# TCP/UDP examples:
# Simple (open port 80 on host 192.168.0.10 for all DMZ hosts):
#       DMZ_LAN_HOST_OPEN_xxx="192.168.0.10:80"
# Advanced (open port 20 & 21 on 192.168.0.10 for all DMZ hosts and
#           open port 80 on 192.168.0.11 for host 1.2.3.4 only:
#       DMZ_LAN_HOST_OPEN_xxx="192.168.0.10:20,21 1.2.3.4>192.168.0.11:80"
#
# IP protocol forward example:
#        "192.168.0.10:47,48" (open protocols 47 & 48 on 192.168.0.10
#                              for all DMZ hosts)
#
# NOTE 1: {SRCIPx} is optional. Use it to restrict access to specific
#         source IP addresses.
# NOTE 2: Port ranges can be written as "PORT1-PORT3" (ie. "1024-1030" would
#         include ports 1024 until 1030) (but using a : is also allowed).
# -----------------------------------------------------------------------------
DMZ_LAN_HOST_OPEN_TCP=""
DMZ_LAN_HOST_OPEN_UDP=""
DMZ_LAN_HOST_OPEN_IP=""


###############################################################################
# Firewall policies for the external (inet) interface (default policy = drop) #
###############################################################################

# Put in the following variable which hosts (subnets) you want have full access
# via your internet (EXT_IF) connection(!). This is especially meant for
# networks/servers which use NIS/NFS, as these protocols require all ports
# to be open.
# NOTE: Don't mistake this variable with the one used for internal nets.
# -----------------------------------------------------------------------------
FULL_ACCESS_HOSTS=""

# Put in the following variables which ports or IP protocols you want to leave
# open to the whole world.
# -----------------------------------------------------------------------------
OPEN_TCP="21 22"
OPEN_UDP=""
OPEN_IP=""
OPEN_ICMP=0

# Put in the following variables the TCP/UDP ports you want to DENY(DROP) for
# everyone (and logged). Also use these variables if you want to log connection
# attempts to these ports from everyone (also trusted/full access hosts).
# In principle you don't need these variables, as everything is already blocked
# (denied) by default, but just exists for consistency.
# -----------------------------------------------------------------------------
DENY_TCP="23"
DENY_UDP=""

# Put in the following variables which ports you want to DENY(DROP) for
# everyone but NOT logged. This is very useful if you have constant probes on
# the same port(s) over and over again (code red worm) and don't want your logs
# flooded with it.
# -----------------------------------------------------------------------------
DENY_TCP_NOLOG=""
DENY_UDP_NOLOG=""

# Put in the following variables the TCP/UDP ports you want to REJECT (instead
# of DROP) for everyone (and logged).
# -----------------------------------------------------------------------------
REJECT_TCP=""
REJECT_UDP=""

# Put in the following variables the TCP/UDP ports you want to REJECT (instead
# of DROP) for everyone but NOT logged.
# -----------------------------------------------------------------------------
REJECT_TCP_NOLOG=""
REJECT_UDP_NOLOG=""

# Put in the following variables which hosts you want to allow for certain
# services (and logged).
# TCP/UDP port format (HOST_OPEN_TCP & HOST_OPEN_UDP):
#       "host1,host2>port1,port2 host3,host4>port3,port4 ..."
#
# IP protocol format (HOST_OPEN_IP):
#       "host1,host2>proto1,proto2 host3,host4>proto4,proto4 ..."
#
# ICMP protocol format (HOST_OPEN_ICMP):
#       "host1 host2 ...."
# -----------------------------------------------------------------------------
HOST_OPEN_TCP=""
HOST_OPEN_UDP=""
HOST_OPEN_IP=""
HOST_OPEN_ICMP=""

# Put in the following variables which hosts you want to DENY(DROP) for certain
# services (and logged).
# to DENY(DROP) for certain hosts.
# TCP/UDP port format (HOST_DENY_TCP & HOST_DENY_UDP):
#       "host1,host2>port1,port2 host3,host4>port3,port4 ..."
#
# IP protocol format (HOST_DENY_IP):
#       "host1,host2>proto1,proto2 host3,host4>proto4,proto4 ..."
#
# ICMP protocol format (HOST_DENY_ICMP):
#       "host1 host2 ...."
# -----------------------------------------------------------------------------
HOST_DENY_TCP=""
HOST_DENY_UDP=""
HOST_DENY_IP=""
HOST_DENY_ICMP=""

# Put in the following variables which hosts you want to DENY(DROP) for certain
# services but NOT logged.
# TCP/UDP port format (HOST_DENY_xxx_NOLOG):
#       "host1,host2>port1,port2 host3,host4>port3,port4 ..."
#
# IP protocol format (HOST_DENY_IP_NOLOG):
#       "host1,host2>proto1,proto2 host3,host4>proto4,proto4 ..."
#
# ICMP protocol format (HOST_DENY_ICMP_NOLOG):
#       "host1 host2 ...."
# -----------------------------------------------------------------------------
HOST_DENY_TCP_NOLOG=""
HOST_DENY_UDP_NOLOG=""
HOST_DENY_IP_NOLOG=""
HOST_DENY_ICMP_NOLOG=""

# Put in the following variables which hosts you want to REJECT (instead of
# DROP) for certain TCP/UDP ports.
# TCP/UDP port format (HOST_REJECT_xxx):
#       "host1,host2>port1,port2 host3,host4>port3,port4 ..."
# -----------------------------------------------------------------------------
HOST_REJECT_TCP=""
HOST_REJECT_UDP=""

# Put in the following variables which hosts you want to REJECT (instead of
# DROP) for certain services but NOT logged.
# TCP/UDP port format (HOST_REJECT_xxx_NOLOG):
#       "host1,host2>port1,port2 host3,host4>port3,port4 ..."
# -----------------------------------------------------------------------------
HOST_REJECT_TCP_NOLOG=""
HOST_REJECT_UDP_NOLOG=""

# Put in the following variables which services THIS machine is NOT
# permitted to connect TO (remote end-point) via the external (internet)
# interface. For example for blocking IRC (tcp 6666:6669).
# -----------------------------------------------------------------------------
DENY_TCP_OUTPUT=""
DENY_UDP_OUTPUT=""
DENY_IP_OUTPUT=""

# Put in the following variables to which hosts THIS machine is NOT
# permitted to connect TO for certain services (remote end-point)
# via the external (internet) interface. In principle you can also
# use this to put your machine in a "virtual-DMZ" by blocking all traffic
# to your local subnet.
# TCP/UDP port format (HOST_DENY_TCP_OUTPUT & HOST_DENY_UDP_OUTPUT):
#       "host1,host2>port1,port2 host3,host4>port3,port4 ..."
#
# IP protocol format (HOST_DENY_IP_OUTPUT):
#       "host1,host2>proto1,proto2 host3,host4>proto4,proto4 ..."
# -----------------------------------------------------------------------------
HOST_DENY_TCP_OUTPUT=""
HOST_DENY_UDP_OUTPUT=""
HOST_DENY_IP_OUTPUT=""

# Put in the following variable which TCP/UDP ports you don't want to
# see broadcasts from (ie. DHCP (67/68) on your EXTERNAL interface. Note that
# to make this properly work you also need to set "EXTERNAL_NET"!
# -----------------------------------------------------------------------------
BROADCAST_TCP_NOLOG=""
#BROADCAST_UDP_NOLOG="67 68"

# Put in the following variable which hosts you want to block (blackhole,
# dropping every packet from the host).
# -----------------------------------------------------------------------------
BLOCK_HOSTS=""

# Uncomment & specify here the location of the file that contains a list of
# hosts(IP's) that should be BLOCKED. IP ranges can (only) be specified as
# w.x.y.z1-z2 (ie. 192.168.1.10-15). Note that the last line of this file
# should always contain a carriage-return (enter)!
# -----------------------------------------------------------------------------
#BLOCK_HOSTS_FILE=/etc/arno-firewall-blocked-hosts




/bin/resetipt:                   Zum Anfang

#!/bin/sh
#
# resetipt   - Resets iptables to default values.
#
# Copyright (C) 2001  Oskar Andreasson <blueflux@koffein.net>
#  
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# 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 or from the site that you downloaded it
# from; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA  02111-1307   USA

#
# Configurations
#
IPTABLES="/sbin/iptables"

#
# reset the default policies in the filter table.
#
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT

#
# reset the default policies in the nat table.
#
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT

#
# reset the default policies in the mangle table.
#
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT

#
# flush all the rules in the filter and nat tables.
#
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
#
# erase all chains that's not default in filter and nat table.
#
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X

# Zusatz: Helmut Weber
# Fuer den Einsatz bei der Firewall später zufügen
# echo "0" >/proc/sys/net/ipv4/ip_forward

# end of Script    resetipt

-------------------------------------------------
   
/bin/mkforward:                 Zum Anfang

#!/bin/bash

#mkforward - Einen Router mit einfacher Firewall einrichten

# (C) 2006 Dipl. Phys. H. Weber
# Forwarding erlauben:
echo "1" >/proc/sys/net/ipv4/ip_forward

# Regel fuer das Forwarding:
# Zugriff auf 195.20.225.20 vom angeschlossenen Netzwerk wird protokolliert,
# gilt nicht fuer diesen Server !
iptables -A FORWARD -d 195.20.225.20/32 -j LOG --log-prefix "!!!195.20.225.20: " --log-level warning

# Regel fuer das Forwarding:
# Zugriff auf 195.20.225.20 fuer das angeschlossene Netzwerk verboten,
# hier auf diesem Server weiterhin erlaubt !
iptables -A FORWARD -d 195.20.225.20/32 -j DROP

# Achtung: Diese Art des Loggings erzeugt schnell große und unübersichtliche Message-Dateien (/var/log/messages) !!!!!

# Zugriffe auf EBAY fuer das angeschlossene Netz ist nicht verboten, wird aber
# protokolliert !
iptables -A FORWARD -d 216.113.160.0/20 -j LOG --log-prefix "FW Ebay1: " --log-level warning
iptables -A FORWARD -d 216.113.176.0/20 -j LOG --log-prefix "FW Ebay2: " --log-level warning

# Auch fuer diesen Router wird dies protokolliert !
iptables -A OUTPUT -d 216.113.160.0/20 -j LOG --log-prefix "SV Ebay1: " --log-level warning
iptables -A OUTPUT -d 216.113.176.0/20 -j LOG --log-prefix "SV Ebay2: " --log-level warning

# Grundsaetzlich erstmal Forwarding verbieten !
iptables -P FORWARD DROP

# Nur fur diese beiden Computer (und naturlich fuer diesen Server selbst! ) ist
# Forwarding erlaubt - die anderen haben Pech gehabt.
iptables -A FORWARD -i eth0 -o ppp0 -s 192.168.0.15/32 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp0 -s 192.168.0.16/32 -j ACCEPT

# Initialisierte Verbindungen dürfen Antwort bekommen
iptables -A FORWARD -i ppp0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Adress-Umsetzung initialisieren
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE