tantalus
17.11.02, 09:17
Hallo!
Lacht mich jetzt bitte nicht aus, aber ich suche ein Programm mit dem ich sehr einfach eine Firewall konfigurieren kann(frei nach dem SuSE vorbild in der Bedinung).
Mein Rechner ist über Kabelmodem ans Internet angebunden und versorgt auch noch die Rechner meiner Tochter und Meiner Frau. Bisher bin ich überwigend SuSE nutzer gewesen und habe mich jetzt in Debian soweit eingearbeitet das ich möglichst bald auf das suse system verzichten möchte. Allerdings bekomme ich es zur zeit nicht hin mir eine Firewall zu konfigurieren. Da ich mit Englischsprchigen Documentationen nicht allzuviel anfangen kann habe ich mir das Firewallbuch von Markt und Technik zugelegt. Leider scheine ich das ganze nicht verstanden zu haben denn das script welches ich mir gebaut habe Blockt zwar alles ab und meine DHCP-Client läßt er auch durch aber das wars dann auch schon. sonst funktioniert garnichts (loopback funktioniert natürlich). Ich sitze jetzt schon ca. 3 wochen darüber und bin solangsam am aufgeben.
Meine Rechner Konfiguration:
Eth0 = DHCP-client
Eth1 = Private adresse (10.0.1.10) Zugang zu meinem Home-Netz.
Serverdienste:
Cups Squid Apache(um internet zu nutzen ich stelle keine Sites ins netz) und sonst so das übliche
mein Rechner ist also Server und Multimedia-Workstation alles in einem. Ich weis keine sonderlich guten Vorraussetzungen für eine firewall aber ich habe dafür nur den einen Rechner zur verfügung.
Da ich mittlerweile sogar den überblick uber meine scripte verloren habe poste ich hier einfach mal eines:
#!/bin/sh
################################################## #######################
##################Hier Beginnt die Firewall##############################
################################################## #######################
#Iptables-module
modprobe ip_conntrack_ftp
#Aktivierung von Kerneldiensten
#Source-Routing deaktivieren
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
echo 0 > $f
done
#TCP-SYN-COOKIES einschalten
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
#log_martians
#siehe RFC 1812
#protokolliert pakete mit unmöglichen Adressen
for f in /proc/sys/net/ipv4/conf/*/log_martians; do
echo 1 > $f
done
#Löschen alter Regeln
#anschließend funktionert nichts mehr, da keine Verbindung zu Nirgends erlaubt ist
iptables --flush
iptables -t nat --flush
iptables -t mangle --flush
#Das Loopback-device ist nur lokal und Intern vorhanden.
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#Einstellen der Policy`s
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
iptables -t nat --policy PREROUTING DROP
iptables -t nat --policy OUTPUT DROP
iptables -t nat --policy POSTROUTING DROP
iptables -t mangle --policy PREROUTING DROP
iptables -t mangle --policy OUTPUT DROP
#Variablen definieren wenn sie das erste mal gebraucht werden
INTERNET='eth0' #ans Internet angeschlossenes Interface (gerät)
#LAN_NETZ='eth1' #ans eigene Netzangeschlossenes Interface (gerät)
#MASQUERADE
iptables -t nat -A POSTROUTING -o $INTERNET -j MASQUERADE
iptables -A FORWARD -o $INTERNET -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#iptables -A FORWARD -o $LAN_NETZ -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#Verhindern von Geheimer Spionage "Stealthscans"
#Es handelt sich dabei um Pakete mit illegal gesetztem Flag
#für den Verbindungszustand
#alle Bits gelöscht
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
#SYN und FIN flags gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
#SYN und RST flags gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
#FIN UND RST flags gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
#FIN ohne ein zugehöriges ACK-flag gesetzt
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
#PSH ist ohne zugehöriges ACK-flag gesetzt
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP
#URG ist ohne zugehöriges ACK-flag gesetzt
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP
#Variablen für benutzerketten anlegen
CONNECTION_TRACKING='1'
#USER_CHAINS='EXT-input EXT-output \
# tcp-state-flags connection-tracking \
# source-address-check destination-address-check \
# local-dns-server-query remote-dns-server-response \
# local-tcp-client-request remote-tcp-server-response \
# remote-tcp-client-request local-tcp-server-response \
# local-udp-client-request remote-udp-server-response \
# local-dhcp-client-query remote-dhcp-server-response \
# EXT-icmp-out EXT-icmp-in \
# EXT-log-in EXT-log-out \
# log-tcp-state'
#Benutzer definierte Ketten anlegen
#for i in $USER_CHAINS;
# do
# iptables -N $i
#done
#TCP: typische zustandsmuster für Stealth-Scans herausfiltern
#FW-Buch Seite 228
iptables -A INPUT -p tcp -j tcp-state-flags
iptables -A OUTPUT -p tcp -j tcp-state-flags
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A INPUT -j connection-tracking
iptables -A OUTPUT -j connection-tracking
fi
#Umgehung der Regeln durch kontrolle des Verbindungszustandes
#Beschreibung:
#Um resourcen zu sparen kann man statische oder Dynamische filterregeln einsetzen.
#Wenn man eine Erlaubte Verbindung hat dann muss diese nicht mehr alle regeln der Fir ewall
#durchlaufen, stattdessen wird nur noch kontrolliert ob die Verbindung erlaubt ist.
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "INVALID input:"
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j LOG --log-prefix "INVALID output:"
iptables -A OUTPUT -m state --state INVALID -j DROP
fi
#Variablen definieren wenn sie das erste mal gebraucht werden
DHCP_CLIENT='1'
#DHCP erlauben
#In der Benutzerkette User_chains
if [ "$DHCP_CLIENT" = "1" ];
then
iptables -A INPUT -i $INTERNET -p udp \
--sport 67 --dport 68 -j remote-dhcp-server-response
iptables -A OUTPUT -o $INTERNET -p udp \
--sport 68 --dport 67 -j local-dhcp-client-query
fi
#Variablen definieren wenn sie das erste mal gebraucht werden
IPADDR='192.168.120.107' #eigene Ip-Addresse
#Gefälschte IP-adressen
#Ankommende Pakete ablehnen, die vorgeben sie seien die eigene IP welche auf dem Interface
#ankommen an dem das Internet angeschloßen ist.
iptables -A INPUT -i $INTERNET -s $IPADDR -j DROP
#IP-ADRESSEN aus dem bereich der Privaten Ip-adressen, welch im Internet ja nicht geroutet
#werden dürfen, ablehnen.
#Variablen definieren wenn sie das erste mal gebraucht werden
CLASS_A='10.0.0.0/8' #Klasse A: private Netze
CLASS_B='172.16.0.0/12' #Klasse B: private Netze
CLASS_C='192.168.0.0/16' #Klasse C: private Netze
iptables -A INPUT -i $INTERNET -s $CLASS_A -j DROP
iptables -A INPUT -i $INTERNET -s $CLASS_B -j DROP
iptables -A INPUT -i $INTERNET -s $CLASS_C -j DROP
#Variablen definieren wenn sie das erste mal gebraucht werden
LOOPBACK='127.0.0.0/8' #loopback-Addressbereich
#Pakete aus dem Internet verbieten welch die absendeadresse im Loopbackbereich haben
iptables -A INPUT -i $INTERNET -s $LOOPBACK -j DROP
#Variablen definieren wenn sie das erste mal gebraucht werden
BROADCAST_SRC='0.0.0.0' #Broatcast-Absender
BROADCAST_DEST='255.255.255.255' #Broadcast-Empfänger
#Fehlerhafte Broadcast-Pakete verwerfen und mit schreiben
iptables -A INPUT -i $INTERNET -s $BROADCAST_DEST -j LOG
iptables -A INPUT -i $INTERNET -s $BROADCAST_DEST -j DROP
iptables -A INPUT -i $INTERNET -s $BROADCAST_SRC -j LOG
iptables -A INPUT -i $INTERNET -s $BROADCAST_SRC -j DROP
#Variablen definieren wenn sie das erste mal gebraucht werden
SUBNET_BASE='192.168.120.0' #eigene Netzwerk-Adresse
SUBNET_BROADCAST='192.168.120.255' #eigene Broadcast-Adresse
#Zielgerichtete Broadcast suche sperren
#wird zum Herausfinden von Netzwerktopologien verwendet um DOS-Angriffe zu starten
iptables -A INPUT -i $INTERNET -d $SUBNET_BASE -j DROP
iptables -A INPUT -i $INTERNET -d $SUBNET_BROADCAST -j DROP
#Eingeschränkte Broadcast sperren
#Achtung bei verwendung von DHCP-Servern müssen entsprechende ausnahmeregeln
#definiert werden.
iptables -A INPUT -i $INTERNET -d $BROADCAST_DEST -j DROP
#Variablen definieren wenn sie das erste mal gebraucht werden
CLASS_D_MULTICAST='224.0.0.0/4' #Klasse D: Multicast-Adressen
CLASS_E_RESERVED_NET='240.0.0.0/5' #Klasse E: reservierte Adressen
#Multicast Adressen aus dem Internet sperren
#das sind Adressen aus den Klassen D und E
iptables -A INPUT -i $INTERNET -s $CLASS_D_MULTICAST -j DROP
#Multicast-pakete benutzen immer das Protokoll UDP
#Also werden alle Multicast-Pakete gesperrt die nicht UDP benutzen
iptables -A INPUT -i $INTERNET -p ! udp -d $CLASS_D_MULTICAST -j DROP
iptables -A INPUT -i $INTERNET -s $CLASS_E_RESERVED_NET -j DROP
#Variablen definieren wenn sie das erste mal gebraucht werden
UNPRIVPORTS="1024:65535" #unprivilegierte Ports
NAMESERVER='192.168.120.252' #IP-des Nameservers normalerweise
#dns-PROTOKOLL
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p udp \
-s $IPADDR --sport $UNPRIVPORTS \
-d $NAMESERVER --dport 53 \
-m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p udp -s $IPADDR --sport $UNPRIVPORTS \
-d $NAMESERVER --dport 53 -j ACCEPT
iptables -A INPUT -i $INTERNET -p udp -s $NAMESERVER --sport 53 \
-d $IPADDR --dport $UNPRIVPORTS -j ACCEPT
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
-d $NAMESERVER --dport 53 \
-m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp -s $IPADDR --sport $UNPRIVPORTS \
-d $NAMESERVER --dport 53 -j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn -s $NAMESERVER --sport 53 \
-d $IPADDR --dport $UNPRIVPORTS -j ACCEPT
#Forwarding DNS (DNS-Weiterleitung)
#FW-Buch seite 165
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p udp \
-s $IPADDR --sport 53 \
-d $NAMESERVER --dport 53 \
-m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p udp -s $IPADDR --sport 53 \
-d $NAMESERVER --dport 53 -j ACCEPT
iptables -A INPUT -i $INTERNET -p udp -s $NAMESERVER --sport 53 \
-d $IPADDR --dport 53 -j ACCEPT
#DHCP-SERVER
#Zugriff vom eigenen DHCP-Client zum fremden Server
#FW-Buch Seite 201
#Initialisierung oder Re-Initialisierung
#Noch keine IP-Adr. vorhanden oder Sie muss erneuert werden!
iptables -A OUTPUT -o $INTERNET -p udp -s $BROADCAST_SRC --sport 68 \
-d $BROADCAST_DEST --dport 67 -j ACCEPT
#Ankommendes DHCPOFFER von den verfügbaren DHCP-Servern
#DHCP-Server melden ihre Anwesenheit
iptables -A INPUT -i $INTERNET -p udp -s $BROADCAST_SRC --sport 67 \
-d $BROADCAST_DEST --dport 68 -j ACCEPT
#zurück zur Initialisierung
#Variablen definieren wenn sie das erste mal gebraucht werden
DHCP_SERVER='192.168.120.2' #Die IP-Adr. des DHCP-Servers (immer anpassen!)
#Der Client kennt den Server, aber die Gültigkeit der adresse ist Ausgelaufen,
#oder sie muss nach einem reboot bestätigt werden.
iptables -A OUTPUT -o $INTERNET -p udp -s $BROADCAST_SRC --sport 68 \
-d $DHCP_SERVER --dport 67 -j ACCEPT
iptables -A INPUT -i $INTERNET -p udp -s $DHCP_SERVER --sport 67 \
-d $BROADCAST_DEST --dport 68 -j ACCEPT
iptables -A INPUT -i $INTERNET -p udp -s $DHCP_SERVER --sport 67 \
--dport 68 -j ACCEPT
#Gültigkeit verlängern lassen
iptables -A OUTPUT -o $INTERNET -p udp -s $IPADDR --sport 68 \
-d $DHCP_SERVER --dport 67 -j ACCEPT
iptables -A INPUT -i $INTERNET -p udp -s $DHCP_SERVER --sport 67 \
-d $IPADDR --dport 68 -j ACCEPT
#Variablen definieren wenn sie das erste mal gebraucht werden
XWINDOW_PORTS='6000:6063' #64 Ports auf denen X-Server laufen können
#X-Window
#Beschreibung:
#die Erste Regel verhindert abgehende Verbindungen zu fremden X-Servern
#die Zweite Regel verhindert alle zugriffe aus dem Internet auf den eigenen X-Server
#ERSTE REGEL
iptables -A OUTPUT -o $INTERNET -p tcp --syn --destination-port $XWINDOW_PORTS -j REJECT
#ZWEITE REGEL
iptables -A INPUT -i $INTERNET -p tcp --syn --destination-port $XWINDOW_PORTS -j DROP
#Variablen definieren wenn sie das erste mal gebraucht werden
NFS_PORT='2049' #NFS
SOCKS_PORT='1080' #SOCKS
OPENWINDOWS_PORT='2000' #OPENWINDOWS
SQUID_PORT='3128' #SQUID
LOCKD_PORT='4045' #RPC-lockd für NFS
#Verbindungsaufbau über TCP und UDP zu NFS, OPENWINDOWS,SOCKS oder SQUID
#zurückweisen bzw. verbieten
iptables -A OUTPUT -o $INTERNET -p tcp -m multiport --destination-port \
$NFS_PORT,$OPENWINDOWS_PORT,$SOCKS_PORT,$SQUID_POR T \
--syn -j REJECT
iptables -A INPUT -i $INTERNET -p tcp -m multiport --destination-port \
$NFS_PORT,$OPENWINDOWS_PORT,$SOCKS_PORT,$SQUID_POR T \
--syn -j DROP
#NFS und lockd über UDP
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p udp \
-m multiport --destination-port $NFS_PORT,$LOCKD_PORT \
-m state --state NEW -j REJECT
iptables -A INPUT -i $INTERNET -p udp \
-m multiport --destination-port $NFS_PORT,$LOCKD_PORT \
-m state --state NEW -j DROP
else
iptables -A OUTPUT -o $INTERNET -p udp \
-m multiport --destination-port $NFS_PORT,$LOCKD_PORT \
-j REJECT
iptables -A INPUT -i $INTERNET -p udp \
-m multiport --destination-port $NFS_PORT,$LOCKD_PORT \
-j DROP
fi
#Das identd-Protokoll
#Identifiziert Benutzer auf dem eigenen Rechner gegenüber fremden Systemen
#Abgehende Anfragen
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
--dport 113 -m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
--dport 113 -j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn \
--sport 113 -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT
#Ankommende Anfragen an einen Server des eigenen Rechners
#Seite 167 FW-Buch
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A INPUT -i $INTERNET -p tcp \
--sport $UNPRIVPORTS \
-d $IPADDR --dport 113 \
-m state --state NEW -j ACCEPT
fi
iptables -A INPUT -i $INTERNET -p tcp --sport $UNPRIVPORTS -d $IPADDR --dport 113 -j ACCEPT
iptables -A OUTPUT -o $INTERNET -p tcp ! --syn -s $IPADDR --sport 113 --dport $UNPRIVPORTS -j ACCEPT
#Das WWW wichtig zum Surfen!
#FW-Buch Seite 189
#Zugriff auf fremde Websites als Client
#Das sollte der Normale fall sein den Jeder der das Internet benötigt brauch
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
--dport 80 -m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp -s $IPADDR --sport $UNPRIVPORTS --dport 80 -j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn --sport 80 -d $IPADDR --dport $UNPRIVPORTS \
-j ACCEPT
#Zugriff lokaler FTP-Clients auf Fremde FTP-Server
#FTP FW-Buch Seite 186
#Abgehende Kontrollverbindungen zu Fremden FTP-Servern
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
--dport 21 -m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp -s $IPADDR --sport $UNPRIVPORTS --dport 21 -j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn --sport 21 -d $IPADDR --dport $UNPRIVPORTS \
-j ACCEPT
#Aktivieren der Datenkanäle für den Aktiven Ftp-Modus
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A INPUT -i $INTERNET -p tcp \
--sport 20 \
-d $IPADDR --dport $UNPRIVPORTS \
-m state --state NEW -j ACCEPT
fi
iptables -A INPUT -i $INTERNET -p tcp --sport 20 -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT
iptables -A OUTPUT -o $INTERNET -p tcp ! --syn -s $IPADDR --sport $UNPRIVPORTS \
--dport 20 -j ACCEPT
#Aktivieren der Datenkanäle für den Passiven Ftp-Modus
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
--dport $UNPRIVPORTS -m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp -s $IPADDR --sport $UNPRIVPORTS \
--dport $UNPRIVPORTS -j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn --sport $UNPRIVPORTS \
-d $IPADDR --dport $UNPRIVPORTS -j ACCEPT
#Variablen definieren wenn sie das erste mal gebraucht werden
SSH_PORTS='1020:65535' #RHost-RSA-Authentifizierung
#Zugriff auf fremde SSH-Server
#wird zum Online-Banking genutzt
#RSA-Authentifizierung über die Variable RSA_SSH_PORTS='1024:65535'
#RHost-Authentifizierung über die Variable RH_SSH_PORTS='1020:65535'
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $SSH_PORTS \
--dport 22 -m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp -s $IPADDR --sport $SSH_PORTS \
--dport 22 -j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn --sport 22 \
-d $IPADDR --dport $SSH_PORTS -j ACCEPT
#Zugriff auf den eigenen SSH-Server durch fremde Clients aus dem Internet
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A INPUT -i $INTERNET -p tcp --sport $SSH_PORTS \
-d $IPADDR --dport 22 -m state --state NEW -j ACCEPT
fi
iptables -A INPUT -i $INTERNET -p tcp --sport $SSH_PORTS \
-d $IPADDR --dport 22 -j ACCEPT
iptables -A OUTPUT -o $INTERNET -p tcp ! --syn -s $IPADDR --sport 22 \
--dport $SSH_PORTS -j ACCEPT
#SSL oder TLS Nutzen
#Zugriff auf fremde Websites über SSL oder TLS
#FW-Buch Seite 191
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
--dport 443 -m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp -s $IPADDR --sport $UNPRIVPORTS --dport 443 \
-j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn --sport 443 -d $IPADDR \
--dport $UNPRIVPORTS -j ACCEPT
#whois -Server
#FW-Buch Seite 195
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
--dport 43 -m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp -s $IPADDR --sport 43 -j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn --sport 43 \
-d $IPADDR --dport $UNPRIVPORTS -j ACCEPT
#Pings erlauben
#Abgehende Pings
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p icmp \
-s $IPADDR --icmp-type echo-request \
-m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p icmp \
-s $IPADDR --icmp-type echo-request -j ACCEPT
iptables -A INPUT -i $INTERNET -p icmp \
--icmp-type echo-reply -d $IPADDR -j ACCEPT
#Variablen definieren wenn sie das erste mal gebraucht werden
MY_ISP='192.168.120.107' #Ip-Addresse die man vom ISP erhält
#Ankommende Pings
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A INPUT -i $INTERNET -p icmp \
-s $MY_ISP --icmp-type echo-request -d $IPADDR \
-m state --state NEW -j ACCEPT
fi
iptables -A INPUT -i $INTERNET -p icmp \
-s $MY_ISP --icmp-type echo-request -d $IPADDR -j ACCEPT
iptables -A OUTPUT -o $INTERNET -p icmp \
-s $IPADDR --icmp-type echo-reply -d $MY_ISP -j ACCEPT
#Abgehende Mails über ein exteres SMTP-Gateway verschicken
#Das ist der normalfall für Private Internetanbindung!
#SMTP-Gateway meint den Mail-Server des Providers
#Dazu muss die Variable SMTP-GATEWAY mit dem Mailserver des Providers als wert belegt werden
#bsp.: SMTP_GATEWAY="mx.freenet.de" für den Mailserver von Freenet
#Seite 171 FW-Buch
#Variablen definieren wenn sie das erste mal gebraucht werden
SMTP_GATEWAY='192.168.120.252' #siehe abschnitt Abgehede Mails
POP_SERVER='192.168.120.252' #siehe abschnitt mails abholen über POP
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
-d $SMTP_GATEWAY --dport 25 -m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
-d $SMTP_GATEWAY --dport 25 -j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn \
-s $SMTP_GATEWAY --sport 25 \
-d $IPADDR --dport $UNPRIVPORTS -j ACCEPT
#Mail empfangen/abholen über POP
#Die Variable POP_SERVER wieder mit der IP-Adresse des Providers belegen
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
-d $POP_SERVER --dport 110 -m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp -s $IPADDR --sport $UNPRIVPORTS -d $POP_SERVER \
--dport 110 -j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn -s $POP_SERVER --sport 110 \
-d $IPADDR --dport $UNPRIVPORTS -j ACCEPT
#ICMP-Nachrichten
#FW-Buch Seite 204 Fragmentierte ICMP-Nachrichten
iptables -A INPUT -i $INTERNET --fragment -p icmp -j LOG --log-prefix "Fragmented ICMP: "
iptables -A INPUT -i $INTERNET --fragment -p icmp -j DROP
#Kontrollnachricht source-quench (typ 4)
iptables -A INPUT -i $INTERNET -p icmp \
--icmp-type source-quench -d $IPADDR -j ACCEPT
iptables -A OUTPUT -o $INTERNET -p icmp \
-s $IPADDR --icmp-type source-quench -j ACCEPT
#Statusmeldung parameter-problem (typ 12)
iptables -A INPUT -i $INTERNET -p icmp \
--icmp-type parameter-problem -d $IPADDR -j ACCEPT
iptables -A OUTPUT -o $INTERNET -p icmp \
-s $IPADDR --icmp-type parameter-problem -j ACCEPT
#Fehlermeldung destination-unreachable (typ 3)
iptables -A INPUT -i $INTERNET -p icmp \
--icmp-type destination-unreachable -d $IPADDR -j ACCEPT
iptables -A OUTPUT -o $INTERNET -p icmp \
-s $IPADDR --icmp-type fragmentation-needed -j ACCEPT
#Abgehende ICMP-Fehlermeldung löschen, ohne das sie im Syslog erscheint!
iptables -A OUTPUT -o $INTERNET -p icmp \
-s $IPADDR --icmp-type destination-unreachable -j DROP
iptables -A INPUT -i $INTERNET -p icmp \
--icmp-type time-exceeded -d $IPADDR -j ACCEPT
#alle Pakete für die keine Regel zutrifft werden Protokolliert
#FW-Buch Seite 208
iptables -A INPUT -i $INTERNET -j LOG
#abgewiesene abgehende Pakete prototkollieren
iptables -A OUTPUT -o $INTERNET -j LOG
################################################## ########################
##################Hier Endet die Firewall#################################
################################################## ########################
Vielleicht habe ich ja in den Regeln einen Fehler gemacht wäre ganz nett wenn mir dazu mal jemand etwas posten könnte.
Lacht mich jetzt bitte nicht aus, aber ich suche ein Programm mit dem ich sehr einfach eine Firewall konfigurieren kann(frei nach dem SuSE vorbild in der Bedinung).
Mein Rechner ist über Kabelmodem ans Internet angebunden und versorgt auch noch die Rechner meiner Tochter und Meiner Frau. Bisher bin ich überwigend SuSE nutzer gewesen und habe mich jetzt in Debian soweit eingearbeitet das ich möglichst bald auf das suse system verzichten möchte. Allerdings bekomme ich es zur zeit nicht hin mir eine Firewall zu konfigurieren. Da ich mit Englischsprchigen Documentationen nicht allzuviel anfangen kann habe ich mir das Firewallbuch von Markt und Technik zugelegt. Leider scheine ich das ganze nicht verstanden zu haben denn das script welches ich mir gebaut habe Blockt zwar alles ab und meine DHCP-Client läßt er auch durch aber das wars dann auch schon. sonst funktioniert garnichts (loopback funktioniert natürlich). Ich sitze jetzt schon ca. 3 wochen darüber und bin solangsam am aufgeben.
Meine Rechner Konfiguration:
Eth0 = DHCP-client
Eth1 = Private adresse (10.0.1.10) Zugang zu meinem Home-Netz.
Serverdienste:
Cups Squid Apache(um internet zu nutzen ich stelle keine Sites ins netz) und sonst so das übliche
mein Rechner ist also Server und Multimedia-Workstation alles in einem. Ich weis keine sonderlich guten Vorraussetzungen für eine firewall aber ich habe dafür nur den einen Rechner zur verfügung.
Da ich mittlerweile sogar den überblick uber meine scripte verloren habe poste ich hier einfach mal eines:
#!/bin/sh
################################################## #######################
##################Hier Beginnt die Firewall##############################
################################################## #######################
#Iptables-module
modprobe ip_conntrack_ftp
#Aktivierung von Kerneldiensten
#Source-Routing deaktivieren
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
echo 0 > $f
done
#TCP-SYN-COOKIES einschalten
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
#log_martians
#siehe RFC 1812
#protokolliert pakete mit unmöglichen Adressen
for f in /proc/sys/net/ipv4/conf/*/log_martians; do
echo 1 > $f
done
#Löschen alter Regeln
#anschließend funktionert nichts mehr, da keine Verbindung zu Nirgends erlaubt ist
iptables --flush
iptables -t nat --flush
iptables -t mangle --flush
#Das Loopback-device ist nur lokal und Intern vorhanden.
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#Einstellen der Policy`s
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
iptables -t nat --policy PREROUTING DROP
iptables -t nat --policy OUTPUT DROP
iptables -t nat --policy POSTROUTING DROP
iptables -t mangle --policy PREROUTING DROP
iptables -t mangle --policy OUTPUT DROP
#Variablen definieren wenn sie das erste mal gebraucht werden
INTERNET='eth0' #ans Internet angeschlossenes Interface (gerät)
#LAN_NETZ='eth1' #ans eigene Netzangeschlossenes Interface (gerät)
#MASQUERADE
iptables -t nat -A POSTROUTING -o $INTERNET -j MASQUERADE
iptables -A FORWARD -o $INTERNET -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#iptables -A FORWARD -o $LAN_NETZ -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#Verhindern von Geheimer Spionage "Stealthscans"
#Es handelt sich dabei um Pakete mit illegal gesetztem Flag
#für den Verbindungszustand
#alle Bits gelöscht
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
#SYN und FIN flags gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
#SYN und RST flags gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
#FIN UND RST flags gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
#FIN ohne ein zugehöriges ACK-flag gesetzt
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
#PSH ist ohne zugehöriges ACK-flag gesetzt
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP
#URG ist ohne zugehöriges ACK-flag gesetzt
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP
#Variablen für benutzerketten anlegen
CONNECTION_TRACKING='1'
#USER_CHAINS='EXT-input EXT-output \
# tcp-state-flags connection-tracking \
# source-address-check destination-address-check \
# local-dns-server-query remote-dns-server-response \
# local-tcp-client-request remote-tcp-server-response \
# remote-tcp-client-request local-tcp-server-response \
# local-udp-client-request remote-udp-server-response \
# local-dhcp-client-query remote-dhcp-server-response \
# EXT-icmp-out EXT-icmp-in \
# EXT-log-in EXT-log-out \
# log-tcp-state'
#Benutzer definierte Ketten anlegen
#for i in $USER_CHAINS;
# do
# iptables -N $i
#done
#TCP: typische zustandsmuster für Stealth-Scans herausfiltern
#FW-Buch Seite 228
iptables -A INPUT -p tcp -j tcp-state-flags
iptables -A OUTPUT -p tcp -j tcp-state-flags
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A INPUT -j connection-tracking
iptables -A OUTPUT -j connection-tracking
fi
#Umgehung der Regeln durch kontrolle des Verbindungszustandes
#Beschreibung:
#Um resourcen zu sparen kann man statische oder Dynamische filterregeln einsetzen.
#Wenn man eine Erlaubte Verbindung hat dann muss diese nicht mehr alle regeln der Fir ewall
#durchlaufen, stattdessen wird nur noch kontrolliert ob die Verbindung erlaubt ist.
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "INVALID input:"
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j LOG --log-prefix "INVALID output:"
iptables -A OUTPUT -m state --state INVALID -j DROP
fi
#Variablen definieren wenn sie das erste mal gebraucht werden
DHCP_CLIENT='1'
#DHCP erlauben
#In der Benutzerkette User_chains
if [ "$DHCP_CLIENT" = "1" ];
then
iptables -A INPUT -i $INTERNET -p udp \
--sport 67 --dport 68 -j remote-dhcp-server-response
iptables -A OUTPUT -o $INTERNET -p udp \
--sport 68 --dport 67 -j local-dhcp-client-query
fi
#Variablen definieren wenn sie das erste mal gebraucht werden
IPADDR='192.168.120.107' #eigene Ip-Addresse
#Gefälschte IP-adressen
#Ankommende Pakete ablehnen, die vorgeben sie seien die eigene IP welche auf dem Interface
#ankommen an dem das Internet angeschloßen ist.
iptables -A INPUT -i $INTERNET -s $IPADDR -j DROP
#IP-ADRESSEN aus dem bereich der Privaten Ip-adressen, welch im Internet ja nicht geroutet
#werden dürfen, ablehnen.
#Variablen definieren wenn sie das erste mal gebraucht werden
CLASS_A='10.0.0.0/8' #Klasse A: private Netze
CLASS_B='172.16.0.0/12' #Klasse B: private Netze
CLASS_C='192.168.0.0/16' #Klasse C: private Netze
iptables -A INPUT -i $INTERNET -s $CLASS_A -j DROP
iptables -A INPUT -i $INTERNET -s $CLASS_B -j DROP
iptables -A INPUT -i $INTERNET -s $CLASS_C -j DROP
#Variablen definieren wenn sie das erste mal gebraucht werden
LOOPBACK='127.0.0.0/8' #loopback-Addressbereich
#Pakete aus dem Internet verbieten welch die absendeadresse im Loopbackbereich haben
iptables -A INPUT -i $INTERNET -s $LOOPBACK -j DROP
#Variablen definieren wenn sie das erste mal gebraucht werden
BROADCAST_SRC='0.0.0.0' #Broatcast-Absender
BROADCAST_DEST='255.255.255.255' #Broadcast-Empfänger
#Fehlerhafte Broadcast-Pakete verwerfen und mit schreiben
iptables -A INPUT -i $INTERNET -s $BROADCAST_DEST -j LOG
iptables -A INPUT -i $INTERNET -s $BROADCAST_DEST -j DROP
iptables -A INPUT -i $INTERNET -s $BROADCAST_SRC -j LOG
iptables -A INPUT -i $INTERNET -s $BROADCAST_SRC -j DROP
#Variablen definieren wenn sie das erste mal gebraucht werden
SUBNET_BASE='192.168.120.0' #eigene Netzwerk-Adresse
SUBNET_BROADCAST='192.168.120.255' #eigene Broadcast-Adresse
#Zielgerichtete Broadcast suche sperren
#wird zum Herausfinden von Netzwerktopologien verwendet um DOS-Angriffe zu starten
iptables -A INPUT -i $INTERNET -d $SUBNET_BASE -j DROP
iptables -A INPUT -i $INTERNET -d $SUBNET_BROADCAST -j DROP
#Eingeschränkte Broadcast sperren
#Achtung bei verwendung von DHCP-Servern müssen entsprechende ausnahmeregeln
#definiert werden.
iptables -A INPUT -i $INTERNET -d $BROADCAST_DEST -j DROP
#Variablen definieren wenn sie das erste mal gebraucht werden
CLASS_D_MULTICAST='224.0.0.0/4' #Klasse D: Multicast-Adressen
CLASS_E_RESERVED_NET='240.0.0.0/5' #Klasse E: reservierte Adressen
#Multicast Adressen aus dem Internet sperren
#das sind Adressen aus den Klassen D und E
iptables -A INPUT -i $INTERNET -s $CLASS_D_MULTICAST -j DROP
#Multicast-pakete benutzen immer das Protokoll UDP
#Also werden alle Multicast-Pakete gesperrt die nicht UDP benutzen
iptables -A INPUT -i $INTERNET -p ! udp -d $CLASS_D_MULTICAST -j DROP
iptables -A INPUT -i $INTERNET -s $CLASS_E_RESERVED_NET -j DROP
#Variablen definieren wenn sie das erste mal gebraucht werden
UNPRIVPORTS="1024:65535" #unprivilegierte Ports
NAMESERVER='192.168.120.252' #IP-des Nameservers normalerweise
#dns-PROTOKOLL
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p udp \
-s $IPADDR --sport $UNPRIVPORTS \
-d $NAMESERVER --dport 53 \
-m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p udp -s $IPADDR --sport $UNPRIVPORTS \
-d $NAMESERVER --dport 53 -j ACCEPT
iptables -A INPUT -i $INTERNET -p udp -s $NAMESERVER --sport 53 \
-d $IPADDR --dport $UNPRIVPORTS -j ACCEPT
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
-d $NAMESERVER --dport 53 \
-m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp -s $IPADDR --sport $UNPRIVPORTS \
-d $NAMESERVER --dport 53 -j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn -s $NAMESERVER --sport 53 \
-d $IPADDR --dport $UNPRIVPORTS -j ACCEPT
#Forwarding DNS (DNS-Weiterleitung)
#FW-Buch seite 165
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p udp \
-s $IPADDR --sport 53 \
-d $NAMESERVER --dport 53 \
-m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p udp -s $IPADDR --sport 53 \
-d $NAMESERVER --dport 53 -j ACCEPT
iptables -A INPUT -i $INTERNET -p udp -s $NAMESERVER --sport 53 \
-d $IPADDR --dport 53 -j ACCEPT
#DHCP-SERVER
#Zugriff vom eigenen DHCP-Client zum fremden Server
#FW-Buch Seite 201
#Initialisierung oder Re-Initialisierung
#Noch keine IP-Adr. vorhanden oder Sie muss erneuert werden!
iptables -A OUTPUT -o $INTERNET -p udp -s $BROADCAST_SRC --sport 68 \
-d $BROADCAST_DEST --dport 67 -j ACCEPT
#Ankommendes DHCPOFFER von den verfügbaren DHCP-Servern
#DHCP-Server melden ihre Anwesenheit
iptables -A INPUT -i $INTERNET -p udp -s $BROADCAST_SRC --sport 67 \
-d $BROADCAST_DEST --dport 68 -j ACCEPT
#zurück zur Initialisierung
#Variablen definieren wenn sie das erste mal gebraucht werden
DHCP_SERVER='192.168.120.2' #Die IP-Adr. des DHCP-Servers (immer anpassen!)
#Der Client kennt den Server, aber die Gültigkeit der adresse ist Ausgelaufen,
#oder sie muss nach einem reboot bestätigt werden.
iptables -A OUTPUT -o $INTERNET -p udp -s $BROADCAST_SRC --sport 68 \
-d $DHCP_SERVER --dport 67 -j ACCEPT
iptables -A INPUT -i $INTERNET -p udp -s $DHCP_SERVER --sport 67 \
-d $BROADCAST_DEST --dport 68 -j ACCEPT
iptables -A INPUT -i $INTERNET -p udp -s $DHCP_SERVER --sport 67 \
--dport 68 -j ACCEPT
#Gültigkeit verlängern lassen
iptables -A OUTPUT -o $INTERNET -p udp -s $IPADDR --sport 68 \
-d $DHCP_SERVER --dport 67 -j ACCEPT
iptables -A INPUT -i $INTERNET -p udp -s $DHCP_SERVER --sport 67 \
-d $IPADDR --dport 68 -j ACCEPT
#Variablen definieren wenn sie das erste mal gebraucht werden
XWINDOW_PORTS='6000:6063' #64 Ports auf denen X-Server laufen können
#X-Window
#Beschreibung:
#die Erste Regel verhindert abgehende Verbindungen zu fremden X-Servern
#die Zweite Regel verhindert alle zugriffe aus dem Internet auf den eigenen X-Server
#ERSTE REGEL
iptables -A OUTPUT -o $INTERNET -p tcp --syn --destination-port $XWINDOW_PORTS -j REJECT
#ZWEITE REGEL
iptables -A INPUT -i $INTERNET -p tcp --syn --destination-port $XWINDOW_PORTS -j DROP
#Variablen definieren wenn sie das erste mal gebraucht werden
NFS_PORT='2049' #NFS
SOCKS_PORT='1080' #SOCKS
OPENWINDOWS_PORT='2000' #OPENWINDOWS
SQUID_PORT='3128' #SQUID
LOCKD_PORT='4045' #RPC-lockd für NFS
#Verbindungsaufbau über TCP und UDP zu NFS, OPENWINDOWS,SOCKS oder SQUID
#zurückweisen bzw. verbieten
iptables -A OUTPUT -o $INTERNET -p tcp -m multiport --destination-port \
$NFS_PORT,$OPENWINDOWS_PORT,$SOCKS_PORT,$SQUID_POR T \
--syn -j REJECT
iptables -A INPUT -i $INTERNET -p tcp -m multiport --destination-port \
$NFS_PORT,$OPENWINDOWS_PORT,$SOCKS_PORT,$SQUID_POR T \
--syn -j DROP
#NFS und lockd über UDP
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p udp \
-m multiport --destination-port $NFS_PORT,$LOCKD_PORT \
-m state --state NEW -j REJECT
iptables -A INPUT -i $INTERNET -p udp \
-m multiport --destination-port $NFS_PORT,$LOCKD_PORT \
-m state --state NEW -j DROP
else
iptables -A OUTPUT -o $INTERNET -p udp \
-m multiport --destination-port $NFS_PORT,$LOCKD_PORT \
-j REJECT
iptables -A INPUT -i $INTERNET -p udp \
-m multiport --destination-port $NFS_PORT,$LOCKD_PORT \
-j DROP
fi
#Das identd-Protokoll
#Identifiziert Benutzer auf dem eigenen Rechner gegenüber fremden Systemen
#Abgehende Anfragen
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
--dport 113 -m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
--dport 113 -j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn \
--sport 113 -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT
#Ankommende Anfragen an einen Server des eigenen Rechners
#Seite 167 FW-Buch
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A INPUT -i $INTERNET -p tcp \
--sport $UNPRIVPORTS \
-d $IPADDR --dport 113 \
-m state --state NEW -j ACCEPT
fi
iptables -A INPUT -i $INTERNET -p tcp --sport $UNPRIVPORTS -d $IPADDR --dport 113 -j ACCEPT
iptables -A OUTPUT -o $INTERNET -p tcp ! --syn -s $IPADDR --sport 113 --dport $UNPRIVPORTS -j ACCEPT
#Das WWW wichtig zum Surfen!
#FW-Buch Seite 189
#Zugriff auf fremde Websites als Client
#Das sollte der Normale fall sein den Jeder der das Internet benötigt brauch
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
--dport 80 -m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp -s $IPADDR --sport $UNPRIVPORTS --dport 80 -j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn --sport 80 -d $IPADDR --dport $UNPRIVPORTS \
-j ACCEPT
#Zugriff lokaler FTP-Clients auf Fremde FTP-Server
#FTP FW-Buch Seite 186
#Abgehende Kontrollverbindungen zu Fremden FTP-Servern
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
--dport 21 -m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp -s $IPADDR --sport $UNPRIVPORTS --dport 21 -j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn --sport 21 -d $IPADDR --dport $UNPRIVPORTS \
-j ACCEPT
#Aktivieren der Datenkanäle für den Aktiven Ftp-Modus
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A INPUT -i $INTERNET -p tcp \
--sport 20 \
-d $IPADDR --dport $UNPRIVPORTS \
-m state --state NEW -j ACCEPT
fi
iptables -A INPUT -i $INTERNET -p tcp --sport 20 -d $IPADDR --dport $UNPRIVPORTS -j ACCEPT
iptables -A OUTPUT -o $INTERNET -p tcp ! --syn -s $IPADDR --sport $UNPRIVPORTS \
--dport 20 -j ACCEPT
#Aktivieren der Datenkanäle für den Passiven Ftp-Modus
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
--dport $UNPRIVPORTS -m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp -s $IPADDR --sport $UNPRIVPORTS \
--dport $UNPRIVPORTS -j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn --sport $UNPRIVPORTS \
-d $IPADDR --dport $UNPRIVPORTS -j ACCEPT
#Variablen definieren wenn sie das erste mal gebraucht werden
SSH_PORTS='1020:65535' #RHost-RSA-Authentifizierung
#Zugriff auf fremde SSH-Server
#wird zum Online-Banking genutzt
#RSA-Authentifizierung über die Variable RSA_SSH_PORTS='1024:65535'
#RHost-Authentifizierung über die Variable RH_SSH_PORTS='1020:65535'
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $SSH_PORTS \
--dport 22 -m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp -s $IPADDR --sport $SSH_PORTS \
--dport 22 -j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn --sport 22 \
-d $IPADDR --dport $SSH_PORTS -j ACCEPT
#Zugriff auf den eigenen SSH-Server durch fremde Clients aus dem Internet
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A INPUT -i $INTERNET -p tcp --sport $SSH_PORTS \
-d $IPADDR --dport 22 -m state --state NEW -j ACCEPT
fi
iptables -A INPUT -i $INTERNET -p tcp --sport $SSH_PORTS \
-d $IPADDR --dport 22 -j ACCEPT
iptables -A OUTPUT -o $INTERNET -p tcp ! --syn -s $IPADDR --sport 22 \
--dport $SSH_PORTS -j ACCEPT
#SSL oder TLS Nutzen
#Zugriff auf fremde Websites über SSL oder TLS
#FW-Buch Seite 191
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
--dport 443 -m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp -s $IPADDR --sport $UNPRIVPORTS --dport 443 \
-j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn --sport 443 -d $IPADDR \
--dport $UNPRIVPORTS -j ACCEPT
#whois -Server
#FW-Buch Seite 195
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
--dport 43 -m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp -s $IPADDR --sport 43 -j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn --sport 43 \
-d $IPADDR --dport $UNPRIVPORTS -j ACCEPT
#Pings erlauben
#Abgehende Pings
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p icmp \
-s $IPADDR --icmp-type echo-request \
-m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p icmp \
-s $IPADDR --icmp-type echo-request -j ACCEPT
iptables -A INPUT -i $INTERNET -p icmp \
--icmp-type echo-reply -d $IPADDR -j ACCEPT
#Variablen definieren wenn sie das erste mal gebraucht werden
MY_ISP='192.168.120.107' #Ip-Addresse die man vom ISP erhält
#Ankommende Pings
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A INPUT -i $INTERNET -p icmp \
-s $MY_ISP --icmp-type echo-request -d $IPADDR \
-m state --state NEW -j ACCEPT
fi
iptables -A INPUT -i $INTERNET -p icmp \
-s $MY_ISP --icmp-type echo-request -d $IPADDR -j ACCEPT
iptables -A OUTPUT -o $INTERNET -p icmp \
-s $IPADDR --icmp-type echo-reply -d $MY_ISP -j ACCEPT
#Abgehende Mails über ein exteres SMTP-Gateway verschicken
#Das ist der normalfall für Private Internetanbindung!
#SMTP-Gateway meint den Mail-Server des Providers
#Dazu muss die Variable SMTP-GATEWAY mit dem Mailserver des Providers als wert belegt werden
#bsp.: SMTP_GATEWAY="mx.freenet.de" für den Mailserver von Freenet
#Seite 171 FW-Buch
#Variablen definieren wenn sie das erste mal gebraucht werden
SMTP_GATEWAY='192.168.120.252' #siehe abschnitt Abgehede Mails
POP_SERVER='192.168.120.252' #siehe abschnitt mails abholen über POP
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
-d $SMTP_GATEWAY --dport 25 -m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
-d $SMTP_GATEWAY --dport 25 -j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn \
-s $SMTP_GATEWAY --sport 25 \
-d $IPADDR --dport $UNPRIVPORTS -j ACCEPT
#Mail empfangen/abholen über POP
#Die Variable POP_SERVER wieder mit der IP-Adresse des Providers belegen
if [ "$CONNECTION_TRACKING" = "1" ];
then
iptables -A OUTPUT -o $INTERNET -p tcp \
-s $IPADDR --sport $UNPRIVPORTS \
-d $POP_SERVER --dport 110 -m state --state NEW -j ACCEPT
fi
iptables -A OUTPUT -o $INTERNET -p tcp -s $IPADDR --sport $UNPRIVPORTS -d $POP_SERVER \
--dport 110 -j ACCEPT
iptables -A INPUT -i $INTERNET -p tcp ! --syn -s $POP_SERVER --sport 110 \
-d $IPADDR --dport $UNPRIVPORTS -j ACCEPT
#ICMP-Nachrichten
#FW-Buch Seite 204 Fragmentierte ICMP-Nachrichten
iptables -A INPUT -i $INTERNET --fragment -p icmp -j LOG --log-prefix "Fragmented ICMP: "
iptables -A INPUT -i $INTERNET --fragment -p icmp -j DROP
#Kontrollnachricht source-quench (typ 4)
iptables -A INPUT -i $INTERNET -p icmp \
--icmp-type source-quench -d $IPADDR -j ACCEPT
iptables -A OUTPUT -o $INTERNET -p icmp \
-s $IPADDR --icmp-type source-quench -j ACCEPT
#Statusmeldung parameter-problem (typ 12)
iptables -A INPUT -i $INTERNET -p icmp \
--icmp-type parameter-problem -d $IPADDR -j ACCEPT
iptables -A OUTPUT -o $INTERNET -p icmp \
-s $IPADDR --icmp-type parameter-problem -j ACCEPT
#Fehlermeldung destination-unreachable (typ 3)
iptables -A INPUT -i $INTERNET -p icmp \
--icmp-type destination-unreachable -d $IPADDR -j ACCEPT
iptables -A OUTPUT -o $INTERNET -p icmp \
-s $IPADDR --icmp-type fragmentation-needed -j ACCEPT
#Abgehende ICMP-Fehlermeldung löschen, ohne das sie im Syslog erscheint!
iptables -A OUTPUT -o $INTERNET -p icmp \
-s $IPADDR --icmp-type destination-unreachable -j DROP
iptables -A INPUT -i $INTERNET -p icmp \
--icmp-type time-exceeded -d $IPADDR -j ACCEPT
#alle Pakete für die keine Regel zutrifft werden Protokolliert
#FW-Buch Seite 208
iptables -A INPUT -i $INTERNET -j LOG
#abgewiesene abgehende Pakete prototkollieren
iptables -A OUTPUT -o $INTERNET -j LOG
################################################## ########################
##################Hier Endet die Firewall#################################
################################################## ########################
Vielleicht habe ich ja in den Regeln einen Fehler gemacht wäre ganz nett wenn mir dazu mal jemand etwas posten könnte.