Site search Web search

powered by FreeFind
Visit my Guestbook

Privacy now! PGP

Freedom for Links

Weiter Zurück [Inhalt] Online Suche im Handbuch LITTLE-IDIOT NETWORKING

9.15 Die kompletten Firewall - Regeln

Hier nun ein vollständig kommentiertes Skript, welches auf GPL RedHat LINUX (fast) lauffähig ist. Es bedarf noch einiger Ergänzungen von etwas später im Skript benutzen Variablen, bitte hierzu das Kapitel FAQ lesen. Wer sich jedoch noch nicht so gut mit den Firewallregeln auskennt, der mag ein Skript aus einem anderen Generator probieren. Siehe hierzu auch Kapitel FWCONFIG


#!/bin/sh

#

#  Es sollte /etc/rc.d/rc.firewall genannt werden.

#  Gestartet wird es von /etc/sysconfig/network-Skripts/ifdhcpc-done.



echo "Starte Firewall... "



# Einige Definitionen von Variablen, any/0 bedeutet nichts anderes, als 

# 0.0.0.0/0. Dies ist per Definition jede IP - Nummer



ANYWHERE="any/0"



# Nun müssen die Interfaces und IP - Nummern alle zugewiesen werden. 



EXTERNES_INTERFACE="eth0"

LOKALES_INTERFACE="eth1"

INTRANET="10.0.0.0/24"          #Class-C Netzwerk



DHCP_SERVER="dhcp.intra.net/16"

SMTP_SERVER="smtp.intra.net"    

POP_SERVER="pop.intra.net"      

NEWS_SERVER="news.intra.net"

WEB_PROXY_SERVER="www.intra.net"

#  Die IP Adresse, $IPADDR, wird von DHCP vergeben



if [ -f /etc/dhcpc/hostinfo-$EXTERNES_INTERFACE ]; then

    . /etc/dhcpc/hostinfo-$EXTERNES_INTERFACE

elif [ -f /etc/dhcpc/dhcpcd-$EXTERNES_INTERFACE.info ]; then

    . /etc/dhcpc/dhcpcd-$EXTERNES_INTERFACE.info

else

    echo "rc.firewall:  dhcp is not configured." 

    exit 1

fi



# nameservers are originally from /etc/dhcpc/resolv.conf.

# The example ifdhcpc-done Skript updates these automatically and

# appends them to /etc/dhcpc/hostinfo-$EXTERNES_INTERFACE or

# /etc/dhcpc/dhcpcd-$EXTERNES_INTERFACE.info.



# Edit and uncomment these if NOT using the example ifdhcpc-done Skript.



NAMESERVER_1="ns1.domain.de"

NAMESERVER_2="ns2.domain.de"

NAMESERVER_3="ns3.domain.de"



# ----------------------------------------------------------------------------



LOOPBACK_INTERFACE="lo"

LOOPBACK="127.0.0.0/8"

INTRANET="10.0.0.0/8"

PRIVPORTS="0:1023"

UNPRIVPORTS="1024:65535"

VERBOTEN_PORTS="2049"                   # (TCP/UDP) NFS

VERBOTEN_OPENWINDOWS="2000"             # (TCP) openwindows

VERBOTEN_XWINDOWS="6000:6001"           # (TCP) X windows

SSH_PORTS="1020:1023"                   # range for SSH privileged ports

# Lösche alle Filter

    ipfwadm -I -f

    ipfwadm -O -f

    ipfwadm -F -f

# Default policy is DENY

    ipfwadm -I -p deny

    ipfwadm -O -p deny

    ipfwadm -F -p deny



# Anti spoofing Regeln

    ipfwadm -I -a deny -o -W $EXTERNES_INTERFACE -S $IPADDR

    ipfwadm -O -a reject -o -W $EXTERNES_INTERFACE -D $IPADDR



# Keine Adressen aus dem Intranet dürfen in das Externe Interface

    ipfwadm -I -a deny    -W $EXTERNES_INTERFACE -S $INTRANET

    ipfwadm -I -a deny    -W $EXTERNES_INTERFACE -D $INTRANET

    ipfwadm -O -a reject    -W $EXTERNES_INTERFACE -S $INTRANET

    ipfwadm -O -a reject    -W $EXTERNES_INTERFACE -D $INTRANET



# Keine Adressen aus dem Intranet dürfen in das LOOPBACK Interface

    ipfwadm -I -a deny -o -W $EXTERNES_INTERFACE -S $LOOPBACK

    ipfwadm -I -a deny -o -W $EXTERNES_INTERFACE -D $LOOPBACK

    ipfwadm -O -a reject -o -W $EXTERNES_INTERFACE -S $LOOPBACK

    ipfwadm -O -a reject -o -W $EXTERNES_INTERFACE -D $LOOPBACK



# Keine Broadcasts

    ipfwadm -I -a deny    -W $EXTERNES_INTERFACE -S $BROADCAST_1

    ipfwadm -I -a deny    -W $EXTERNES_INTERFACE -D $BROADCAST_0



# Keine Multicast-Adressen !

    ipfwadm -I -a deny -o -W $EXTERNES_INTERFACE -S $MULTICAST



# ICMP Codes

#  0: Echo_Reply

#  3: Dest_Unreachable, Network_Unavailable, Service_Unavailable, etc.

#  4: Source_Quench

#  5: Redirect

#  8: Echo_Request

# 11: Time_Exceeded

# 12: Parameter_Problem

    

     ipfwadm -I -a accept -P icmp -W $EXTERNES_INTERFACE \

             -S $ANYWHERE 0 3 4 11 12 -D $IPADDR



     ipfwadm -I -a accept -P icmp -W $EXTERNES_INTERFACE \

             -S $DHCP_SERVERS 8 -D $IPADDR



     ipfwadm -O -a accept -P icmp -W $EXTERNES_INTERFACE \

             -S $IPADDR 3 4 8 12  -D $ANYWHERE



     ipfwadm -O -a accept -P icmp -W $EXTERNES_INTERFACE \

             -S $IPADDR  0 11 -D $DHCP_SERVERS



# Keine SUN RPC Pakete



    ipfwadm -O -a reject -P tcp -W $EXTERNES_INTERFACE \

            -S $IPADDR \

            -D $ANYWHERE 0 87 111 512 513 514 515 540



    ipfwadm -O -a reject -P tcp -W $EXTERNES_INTERFACE \

            -S $IPADDR 0 87 111 512 513 514 515 540 \

            -D $ANYWHERE 



# Kein Openwindows

    ipfwadm -O -a reject -P tcp -y -W $EXTERNES_INTERFACE \

            -S $IPADDR \

            -D $ANYWHERE $VERBOTEN_OPENWINDOWS 

# Kein X-Windows

    ipfwadm -O -a reject -P tcp -y -W $EXTERNES_INTERFACE \

            -S $IPADDR \

            -D $ANYWHERE $VERBOTEN_XWINDOWS 



# SOCKS ist erlaubt, hierzu muß SOCKS installiert sein

    ipfwadm -O -a reject -P tcp -y -W $EXTERNES_INTERFACE \

            -S $IPADDR \

            -D $ANYWHERE 1080



# Kein dhcp tftp sunrpc snmp snmp-trap ins Internet 

    ipfwadm -O -a reject -P udp -W $EXTERNES_INTERFACE \

            -S $IPADDR \

            -D $ANYWHERE 0 68 69 111 161 162 



# Kein biff (Mail) ins Internet

    ipfwadm -O -a reject -P udp -W $EXTERNES_INTERFACE \

            -S $IPADDR \

            -D $ANYWHERE 512 513 514 520 521 



# Kein dhcp tftp sunrpc snmp snmp-trap 

    ipfwadm -O -a reject -P udp -W $EXTERNES_INTERFACE \

            -S $IPADDR 0 67 69 111 161 162 \

            -D $ANYWHERE 



# Kein  biff 

    ipfwadm -O -a reject -P udp -W $EXTERNES_INTERFACE \

            -S $IPADDR \

            -D $ANYWHERE 512 513 514 520 521



# Zugriff für alle Intranet Hosts

    ipfwadm -I -a accept -W $LOKALES_INTERFACE -S $INTRANET

    ipfwadm -O -a accept -W $LOKALES_INTERFACE -D $INTRANET



# Loopback für die Dämonen

    ipfwadm -I -a accept -W $LOOPBACK_INTERFACE

    ipfwadm -O -a accept -W $LOOPBACK_INTERFACE



# Kein Zugriff auf Ports im Bereich von X, OpenWindows, NFS...

    ipfwadm -I -a deny -o -P tcp -y -W $EXTERNES_INTERFACE \

            -D $IPADDR $VERBOTEN_PORTS 



    ipfwadm -I -a deny -o -P tcp -y -W $EXTERNES_INTERFACE \

            -D $IPADDR $VERBOTEN_OPENWINDOWS 



    ipfwadm -I -a deny -o -P tcp -y -W $EXTERNES_INTERFACE \

            -D $IPADDR $VERBOTEN_XWINDOWS 



# Kein SOCKS aus dem Internet

    ipfwadm -I -a deny -P tcp -y -W $EXTERNES_INTERFACE \

            -S $ANYWHERE \

            -D $IPADDR 1080

# Kein UDP auf verbotene Ports

    ipfwadm -I -a deny -o -P udp -W $EXTERNES_INTERFACE \

            -D $IPADDR $VERBOTEN_PORTS 



# traceroute benutzt -S 32769:65535 -D 33434:33523

# Verbiete Traceroute



    ipfwadm -I -a accept -o -P udp -W $EXTERNES_INTERFACE \

            -S 24.128.0.0/16 32769:65535 \

            -D $IPADDR 33434:33523



    ipfwadm -I -a deny -o -P udp -W $EXTERNES_INTERFACE \

            -S $ANYWHERE 32769:65535 \

            -D $IPADDR 33434:33523



# Hier sollte man die Ports nur freigeben, wenn man Zugriff auf den 

# Bastion Host zulassen möchte, DNS Server

#

#     ipfwadm -I -a accept -P udp    -W $EXTERNES_INTERFACE \

#             -S $NAMESERVER_1 53 \

#             -D $IPADDR 53



#     ipfwadm -O -a accept -W $EXTERNES_INTERFACE \

#             -S $IPADDR 53 \

#             -D $NAMESERVER_1 53



#     ipfwadm -I -a accept -P udp    -W $EXTERNES_INTERFACE \

#             -S $NAMESERVER_2 53 \

#             -D $IPADDR 53



#     ipfwadm -O -a accept -W $EXTERNES_INTERFACE \

#             -S $IPADDR 53 \

#             -D $NAMESERVER_2 53



#     ipfwadm -I -a accept -P udp    -W $EXTERNES_INTERFACE \

#             -S $NAMESERVER_3 53 \

#             -D $IPADDR 53



#     ipfwadm -O -a accept -W $EXTERNES_INTERFACE \

#             -S $IPADDR 53 \

#             -D $NAMESERVER_3 53

#

# DNS Client ist ok !



     ipfwadm -I -a accept -P udp    -W $EXTERNES_INTERFACE \

             -S $NAMESERVER_1 53 \

             -D $IPADDR $UNPRIVPORTS



     ipfwadm -O -a accept -P udp    -W $EXTERNES_INTERFACE \

             -S $IPADDR $UNPRIVPORTS \

             -D $NAMESERVER_1 53 



     ipfwadm -I -a accept -P tcp -k    -W $EXTERNES_INTERFACE \

             -S $NAMESERVER_1 53 \

             -D $IPADDR $UNPRIVPORTS



     ipfwadm -O -a accept -P tcp -W $EXTERNES_INTERFACE \

             -S $IPADDR $UNPRIVPORTS \

             -D $NAMESERVER_1 53 



     ipfwadm -I -a accept -P udp    -W $EXTERNES_INTERFACE \

             -S $NAMESERVER_2 53 \

             -D $IPADDR $UNPRIVPORTS



     ipfwadm -O -a accept -P udp    -W $EXTERNES_INTERFACE \

             -S $IPADDR $UNPRIVPORTS \

             -D $NAMESERVER_2 53 



     ipfwadm -I -a accept -P tcp -k    -W $EXTERNES_INTERFACE \

             -S $NAMESERVER_2 53 \

             -D $IPADDR $UNPRIVPORTS



     ipfwadm -O -a accept -P tcp -W $EXTERNES_INTERFACE \

             -S $IPADDR $UNPRIVPORTS \

             -D $NAMESERVER_2 53 



     ipfwadm -I -a accept -P udp    -W $EXTERNES_INTERFACE \

             -S $NAMESERVER_3 53 \

             -D $IPADDR $UNPRIVPORTS



     ipfwadm -O -a accept -P udp    -W $EXTERNES_INTERFACE \

             -S $IPADDR $UNPRIVPORTS \

             -D $NAMESERVER_3 53 



     ipfwadm -I -a accept -P tcp -k    -W $EXTERNES_INTERFACE \

             -S $NAMESERVER_3 53 \

             -D $IPADDR $UNPRIVPORTS



     ipfwadm -O -a accept -P tcp -W $EXTERNES_INTERFACE \

             -S $IPADDR $UNPRIVPORTS \

             -D $NAMESERVER_3 53 



# SSH server (22)

#    ipfwadm -I -a accept -P tcp    -W $EXTERNES_INTERFACE \

#            -S $ANYWHERE $UNPRIVPORTS -D $IPADDR 22

#    ipfwadm -I -a accept -P tcp    -W $EXTERNES_INTERFACE \

#            -S $ANYWHERE $SSH_PORTS -D $IPADDR 22

# SSH client (22)

#    ipfwadm -I -a accept -P tcp -k    -W $EXTERNES_INTERFACE \

#            -S $ANYWHERE 22 -D $IPADDR $UNPRIVPORTS

#    ipfwadm -I -a accept -P tcp -k    -W $EXTERNES_INTERFACE \

#            -S $ANYWHERE 22 -D $IPADDR $SSH_PORTS

# TELNET server (23)

#    ipfwadm -I -a accept -P tcp    -W $EXTERNES_INTERFACE \

#            -S $ANYWHERE $UNPRIVPORTS -D $IPADDR 23

# TELNET client (23)

#    ipfwadm -I -a accept -P tcp -k    -W $EXTERNES_INTERFACE \

#            -S $ANYWHERE 23 -D $IPADDR $UNPRIVPORTS

# HTTP server (80)

#    ipfwadm -I -a accept -P tcp    -W $EXTERNES_INTERFACE \

#            -S $ANYWHERE $UNPRIVPORTS -D $IPADDR 80

# HTTP client (80)

    ipfwadm -I -a accept -P tcp -k    -W $EXTERNES_INTERFACE \

            -S $ANYWHERE 80 \

            -D $IPADDR $UNPRIVPORTS

# HTTPS client (443)

    ipfwadm -I -a accept -P tcp -k    -W $EXTERNES_INTERFACE \

            -S $ANYWHERE 443 \

            -D $IPADDR $UNPRIVPORTS

# WWW-CACHE client (typical ports are 8000 or 8080)

#    ipfwadm -I -a accept -P tcp -k    -W $EXTERNES_INTERFACE \

#            -S $WEB_PROXY_SERVER \

#            -D $IPADDR $UNPRIVPORTS

# POP client (110)

    ipfwadm -I -a accept -P tcp -k    -W $EXTERNES_INTERFACE \

            -S $POP_SERVER 110 \

            -D $IPADDR $UNPRIVPORTS

# NNTP NEWS client (119)

    ipfwadm -I -a accept -P tcp -k    -W $EXTERNES_INTERFACE \

            -S $NEWS_SERVER 119 \

            -D $IPADDR $UNPRIVPORTS

# FINGER client (79)

    ipfwadm -I -a accept -P tcp -k    -W $EXTERNES_INTERFACE \

            -S $ANYWHERE 79 \

            -D $IPADDR $UNPRIVPORTS

# AUTH server (113)

    ipfwadm -I -a reject -P tcp    -W $EXTERNES_INTERFACE \

            -S $ANYWHERE -D $IPADDR 113

# AUTH client (113)

    ipfwadm -I -a accept -P tcp -k    -W $EXTERNES_INTERFACE \

            -S $ANYWHERE 113 -D $IPADDR $UNPRIVPORTS

# SMTP server (25)

#    ipfwadm -I -a accept -P tcp    -W $EXTERNES_INTERFACE \

#            -S $ANYWHERE $UNPRIVPORTS \

#            -D $IPADDR 25

# SMTP client (25)

    ipfwadm -I -a accept -P tcp -k    -W $EXTERNES_INTERFACE \

            -S $SMTP_SERVER 25 \

            -D $IPADDR $UNPRIVPORTS

# ------------------------------------------------------------------

# IRC client (6667)

#    ipfwadm -I -a accept -P tcp -k    -W $EXTERNES_INTERFACE \

#            -S $ANYWHERE 6667 \

#            -D $IPADDR $UNPRIVPORTS

# RealAudio client

#    ipfwadm -I -a accept -P tcp  -k -W $EXTERNES_INTERFACE \

#            -S $ANYWHERE $UNPRIVPORTS \

#            -D $IPADDR 554 7070 7071

# UDP is the preferred method

#    ipfwadm -I -a accept -P udp -W $EXTERNES_INTERFACE \

#            -S $ANYWHERE $UNPRIVPORTS \

#            -D $IPADDR 6970:7170

# FTP server (20, 21)

    ipfwadm -I -a accept -P tcp  -W $EXTERNES_INTERFACE \

            -S $ANYWHERE $UNPRIVPORTS \

            -D $IPADDR 21

# PORT MODE Antworten für Daten

    ipfwadm -I -a accept -P tcp -k  -W $EXTERNES_INTERFACE \

            -S $ANYWHERE $UNPRIVPORTS \

            -D $IPADDR 20

# PASSIVE MODE Antworten für Daten

    ipfwadm -I -a accept -P tcp  -W $EXTERNES_INTERFACE \

            -S $ANYWHERE $UNPRIVPORTS \

            -D $IPADDR $UNPRIVPORTS

# FTP client (20, 21)

    ipfwadm -I -a accept -P tcp -k    -W $EXTERNES_INTERFACE \

            -S $ANYWHERE 21 \

            -D $IPADDR $UNPRIVPORTS



    ipfwadm -I -a accept -P tcp    -W $EXTERNES_INTERFACE \

            -S $ANYWHERE 20 \

            -D $IPADDR $UNPRIVPORTS

# PASV-FTP

    ipfwadm -I -a accept -P tcp -k    -W $EXTERNES_INTERFACE \

            -S $ANYWHERE $UNPRIVPORTS \

            -D $IPADDR $UNPRIVPORTS

# WHOIS client (43)

    ipfwadm -I -a accept -P tcp -k    -W $EXTERNES_INTERFACE \

            -S $ANYWHERE 43 \

            -D $IPADDR $UNPRIVPORTS



# UDP  für DHCP Clients

    ipfwadm -I -a accept -P udp    -W $EXTERNES_INTERFACE \

            -S $DHCP_SERVERS 67 \

            -D $IPADDR 68



    ipfwadm -I -a accept -P udp    -W $EXTERNES_INTERFACE \

            -S $DHCP_SERVERS 67 \

            -D $BROADCAST_1 68



    ipfwadm -O -a accept -P udp -o -W $EXTERNES_INTERFACE \

            -S $BROADCAST_0 68 \

            -D $DHCP_SERVERS 67



# DHCP IP-Vergabe

    ipfwadm -I -a accept -P udp    -W $EXTERNES_INTERFACE \

            -S $BROADCAST_0 67 \

            -D $BROADCAST_1 68



# REBINDING bei DHCP

    ipfwadm -O -a accept -P udp -W $EXTERNES_INTERFACE \

            -S $BROADCAST_0 68 \

            -D $BROADCAST_1 67



    ipfwadm -I -a accept -P udp    -W $EXTERNES_INTERFACE \

            -S $DHCP_SERVERS 67 \

            -D $ANYWHERE 68



    ipfwadm -I -a deny -P udp    -W $EXTERNES_INTERFACE \

            -S $ANYWHERE 67 \

            -D $IPADDR 68

# NTP TIME clients (123)

#   ipfwadm -I -a accept -P udp -W $EXTERNES_INTERFACE \

#           -S dominator.eecs.harvard.edu 123 \

#           -D $IPADDR $UNPRIVPORTS



# Logging explizit für:



    ipfwadm -I -a deny -o -P tcp -W $EXTERNES_INTERFACE -D $IPADDR 

    ipfwadm -I -a deny -o -P udp -W $EXTERNES_INTERFACE -D $IPADDR $PRIVPORTS



    ipfwadm -O -a deny -o -P icmp -W $EXTERNES_INTERFACE -S $IPADDR 5 

    ipfwadm -I -a deny -o -P icmp -W $EXTERNES_INTERFACE \

            -S $ANYWHERE 5 13 14 15 16 17 18 -D $IPADDR



# Erlaube anderen Verkehr ins Internet



     ipfwadm -O -a accept -W $EXTERNES_INTERFACE -S $IPADDR



# Masquerade aktivieren



    ipfwadm -F -a masquerade -W $EXTERNES_INTERFACE -S $INTRANET



echo "Firewall aktiv"


Weiter Zurück [Inhalt] Online Suche im Handbuch LITTLE-IDIOT NETWORKING