ich hab mir eine IPTABLES Skript für meinen Server zusammengestellt und wollte mal fragen ob das so in Ordnung ist, oder ob jemand einen Verbesserungsvorschlag hat.
Auf dem Server laufen momentan nur 4 Gameserver, sonst nichts.
Das Skript wir über die Datei boot.local bei jedem Reboot gestartet.
Das Skript soll folgendes können:
Input Regeln:
1. Alle Pakete standardmässig abblocken.
2. SSH erlauben
3. Pakete zu den Gameserverports erlauben
Output Regeln:
1. Nur zugelassene Pakete erlauben
2. Erlaube ausgehende DNS-Anfragen, z.B. um IP's in PROTOKOLLEN aufzuloesen
3. Pakete zum Gamemasterserver erlauben
Forward Regeln
Alle Forwards ablehnen
Hier das Skript:
Code: Select all
#! /bin/bash
# file-id: /xxx/xxx/localfw #
# custom script to start iptables packet filter firewall rules #
# run from /etc/init.d/boot.local #
# last updated 16-02-2004 #
IP_LOCAL=xxx.xxx.xxx.xxx
#------------------------------------------------------#
echo;
echo "=======================================================================";
echo "Running /etc/localfw"
echo " - Initial status of firewall is:"
echo "=======================================================================";
echo;
#------------------------------------------------------#
#------------------------------------------------------#
echo;
echo "=======================================================================";
echo "NAT table initial status"
echo "=======================================================================";
echo;
#------------------------------------------------------#
# list status of NAT table
iptables -t nat -L -v
#------------------------------------------------------#
#------------------------------------------------------#
echo;
echo "=======================================================================";
echo "MANGLE table initial status"
echo "=======================================================================";
echo;
#------------------------------------------------------#
# list status of MANGLE table
iptables -t mangle -L -v
#------------------------------------------------------#
#------------------------------------------------------#
echo;
echo "=======================================================================";
echo "FILTER table initial status"
echo "=======================================================================";
echo;
#------------------------------------------------------#
# list status of FILTER table
iptables -t filter -L -v
#------------------------------------------------------#
#------------------------------------------------------#
# flush ALL rules in ALL tables
iptables -t nat -F
iptables -t mangle -F
iptables -t filter -F
# clear packet & byte counters
iptables -t nat -Z
iptables -t mangle -Z
iptables -t filter -Z
# delete ALL user-defined chains in ALL tables
iptables -t nat -X
iptables -t mangle -X
iptables -t filter -X
#------------------------------------------------------#
echo;
echo "=======================================================================";
echo "Starting up my own custom firewall now!"
echo "=======================================================================";
echo;
#------------------------------------------------------#
#******************************************************#
#                 NAT table rules                      #
#******************************************************#
# NOT USED
#******************************************************#
#                MANGLE table rules                    #
#******************************************************#
# NOT USED
#******************************************************#
#                FILTER table rules                    #
#******************************************************#
# Richte eine Standartdregelung fuer alle drei Standardketten ein, nach der
# Pakete, auf die keine Regel zutrifft, abgelehnt werden.
iptables -P INPUT REJECT
iptables -P FORWARD REJECT
iptables -P OUTPUT REJECT
# Gib Loopback-Interfaces freie Hand, d.h. lokale Prozesse koennen
# sich mit den Listening-Ports anderer Prozesse verbinden.
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Rudimentaere Regeln zum Ablehnen von Paketen wegen IP-Spoofing
iptables -A INPUT -s 255.0.0.0/8 -j LOG --log-prefix 'Gefaelschte Quell-IP!'
iptables -A INPUT -s 255.0.0.0/8 -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j LOG --log-prefix 'Gefaelschte Quell-IP!'
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -s 127.0.0.0/8 -j LOG --log-prefix 'Gefaelschte Quell-IP!'
iptables -A INPUT -s 127.0.0.0/8 -j DROP
iptables -A INPUT -s 192.168.0.0/16 -j LOG --log-prefix 'Gefaelschte Quell-IP!'
iptables -A INPUT -s 192.168.0.0/16 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -j LOG --log-prefix 'Gefaelschte Quell-IP!'
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -s 10.0.0.0/8 -j LOG --log-prefix 'Gefaelschte Quell-IP!'
iptables -A INPUT -s 10.0.0.0/8 -j DROP
# Das folgende wird den lokalen Interprozess-Verkehr, dessen Pakete die
# Quell-IP des lokalen Loopback-Interfaces (z.B. 127.0.0.1) haben, nicht behindern
iptables -A INPUT -s 192.168.0.100 -j LOG --log-prefix 'Falscher GFW!'
iptables -A INPUT -s 192.168.0.100 -j DROP
# Sage netfilter, dass alle TCP-Sessions tatsaechlich mit SYN beginnen muessen.
# (Es koennte Anwendungen geben, die mit dem RFC nicht verträglich sind
# und ihre Transaktionen anders beginnen, aber mir sind sie noch nicht begegnet.)
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix 'Stealth Scan Angriff?'
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j REJECT
# Schliesslich das Kernstueck unserer Paketfilter-Strategie:
# INBOUND-Strategie
# (Bezieht sich auf Pakete, die aus dem Netzwerk auf unserem Interface
# eingehen und an diesen Rechner asresiert sind)
# Akzeptiere eingehende Pakete, die Teil von zuvor zugelassenen Sessions sind.
iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
# Akzeptiere eingehende Pakete, die SSH-Sessions einleiten.
iptables -A INPUT -p tcp -j ACCEPT --dport 22 -m state --state NEW
# Akzeptiere eingehende Pakete, die FTP-Sessions einleiten.
#iptables -A INPUT -p tcp -j ACCEPT --dport 21 -m state --state NEW
# Akzeptiere eingehende Pakete, die HTTP-Sessions einleiten.
#iptables -A INPUT -p tcp -j ACCEPT --dport 80 -m state --state NEW
# Akzeptiere eingehende Pakete, die eine Gameserver-Sessions einleiten.
iptables -A INPUT -p udp -j ACCEPT --dport 29070 -m state --state NEW
iptables -A INPUT -p udp -j ACCEPT --dport 29080 -m state --state NEW
iptables -A INPUT -p udp -j ACCEPT --dport 29090 -m state --state NEW
iptables -A INPUT -p udp -j ACCEPT --dport 29100 -m state --state NEW
# Protokolliere alles, was laut den obigen Regeln nicht akzeptiert wird
# (Wir wollen jedes Paket, das auf keine ACCEPT-Regel passt, aus Sicherheitsgruenden
# und zur Fehlerbehebung protokollieren. Beachten Sie die Redundanz der letzten "DROP"-Regel,
# wenn die Default-Strategie bereits DROP ist. Redundante Sicherheit ist aber immer gut.)
iptables -A INPUT -j LOG --log-prefix 'Abgelehnt (INPUT):'
iptables -A INPUT -j REJECT
# OUTBOUND-Strategie
# (Bezieht sich auf Pakete, die von lokalen Prozessen an das Netzwerk-Interface
# (NICHT das Loopback) gesendet werden).
# Lasse es zu, wenn es Teil einer genehmigten Verbindung ist.
iptables -I OUTPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
# Erlaube ausgehendes ping
# (Nur fuer Testzwecke! Wenn jemand in Ihr System eindringt, koennte er mit ping
# versuchen, andere aktive IP-Adressen in Ihrem DMZ zu identifizieren.
# Kommentieren Sie diese Regel aus, wenn Sie sie nicht benoetigen!)
iptables -A OUTPUT -p icmp -j ACCEPT --icmp-type echo-request
# Erlaube ausgehende DNS-Anfragen, z.B. um IP's in PROTOKOLLEN aufzuloesen
# (Viele Netzwerkanwendungen versagen oder laufen viel langsamer, wenn Ihnen
# kein DNS zur Verfügung steht. DNS-Anfragen verwenden normalerweise UDP 53
# manchmal auch TCP 53. Obwohl TCP 53 normalerweise fuer Zonen-Transfers
# eingesetzt wird, wird es auch von DNS-Anfragen mit groesseren Antworten als
# 512 Byte verwendet, also erlauben wir hier TCP und UDP 53.)
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
# Erlaube ausgehende Pakete an Masterserver für Gameserver:
iptables -A OUTPUT -p udp --dport 29060 -m state --state NEW -j ACCEPT
# Protokolliere  alles, was laut der obigen Regeln nicht erlaubt ist;
iptables -A OUTPUT -j LOG --log-prefix 'Abgelehnt (OUTPUT):'
iptables -A OUTPUT -j REJECT
# Protokolliere und verwerfe ALLE eingehenden Pakete, die einen anderen Bestimmungsort
# haben. (Wir haben bereits die Default-FORWARD-Strategie auf Drop gesetzt. Dies ist aber
# eine weitere Redundanz zur Absicherung, warum sollten wir sie also nicht einsetzen?)
iptables -A FORWARD -j LOG --log-prefix 'FORWARD? Abgelehnt:'
iptables -A FORWARD -j REJECT
#------------------------------------------------------#
echo;
echo "=======================================================================";
echo "New status of firewall using my own custom rules is:"
echo "=======================================================================";
echo;
#------------------------------------------------------#
#------------------------------------------------------#
echo;
echo "=======================================================================";
echo "NAT table - new status"
echo "=======================================================================";
echo;
#------------------------------------------------------#
# list current status of NAT table
iptables -t nat -L -v
#------------------------------------------------------#
#------------------------------------------------------#
echo;
echo "=======================================================================";
echo "MANGLE table - new status"
echo "=======================================================================";
echo;
#------------------------------------------------------#
# list current status of MANGLE table
iptables -t mangle -L -v
#------------------------------------------------------#
#------------------------------------------------------#
echo;
echo "=======================================================================";
echo "FILTER table - new rules"
echo "=======================================================================";
echo;
#------------------------------------------------------#
# list current status of FILTER table
iptables -L -v
#------------------------------------------------------#
# exit with a valid code
 exit 0
#------------------------------------------------------#
# end of firewall #
Danke schon mal im voraus
Buddy0815
