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 |