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