![]()  | 
Online Suche im Handbuch | LITTLE-IDIOT NETWORKING | 
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"
 
 
![]()  | 
Online Suche im Handbuch | LITTLE-IDIOT NETWORKING |