23.09.2013, 11:53
Moin Jungs,
nach fast einem halben Jahr hab ich mir nach der Umstellung auf KVM mal gedacht, dass ich meine IPTABLES Konfiguration mal richtig schön anpasse.
bis jetzt habe ich folgendes :
nach fast einem halben Jahr hab ich mir nach der Umstellung auf KVM mal gedacht, dass ich meine IPTABLES Konfiguration mal richtig schön anpasse.
bis jetzt habe ich folgendes :
Code:
#!/bin/bash
# ---------------------------------------------------------------------
# Linux-iptables-Firewallskript, Copyright (c) 2010 under the GPL
# Autogenerated by iptables Generator v1.22 (c) 2002-2010 by Harald Bertram
# Please visit http://harry.homelinux.org for new versions of
# the iptables Generator (c).
#
#
# If you have questions about the iptables Generator or about
# your Firewall-Skript feel free to take a look at out website or
# send me an E-Mail to [email protected].
#
# My special thanks are going to Lutz Heinrich (trinitywork at hotmail dot com)
# who made lots of Beta-Testing and gave me lots of well qualified
# Feedback that made me able to improve the iptables Generator.
# --------------------------------------------------------------------
# Besondere Hinweise fuer Nutzer einer Debian-Distribution oder eines Debian-Derivates (Ubuntu, Knoppix, Kanotix, ...)!
# Fuehren Sie die folgenden Kommandos aus, nachdem das Skript "firewall" nach /etc/init.d kopiert wurde:
# chmod 755 /etc/init.d/firewall
# update-rc.d firewall defaults
# /etc/init.d/firewall start
# --------------------------------------------------------------------
case "$1" in
start)
echo "Starte IP-Paketfilter"
# iptables-Modul
modprobe ip_tables
# Connection-Tracking-Module
modprobe ip_conntrack
# Das Modul ip_conntrack_irc ist erst bei Kerneln >= 2.4.19 verfuegbar
modprobe ip_conntrack_irc
modprobe ip_conntrack_ftp
# Tabelle flushen
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
# Default-Policies setzen
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# MY_REJECT-Chain
iptables -N MY_REJECT
# MY_REJECT fuellen
iptables -A MY_REJECT -p tcp -j REJECT --reject-with tcp-reset
iptables -A MY_REJECT -p udp -j REJECT --reject-with icmp-port-unreachable
iptables -A MY_REJECT -p icmp -j DROP
iptables -A MY_REJECT -j REJECT --reject-with icmp-proto-unreachable
# MY_DROP-Chain
iptables -N MY_DROP
iptables -A MY_DROP -j DROP
# Reject packets from RFC1918 class networks (i.e., spoofed)
iptables -A INPUT -s 10.0.0.0/8 -j DROP
iptables -A INPUT -s 169.254.0.0/16 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -s 127.0.0.0/8 -j DROP
iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A INPUT -d 224.0.0.0/4 -j DROP
iptables -A INPUT -s 240.0.0.0/5 -j DROP
iptables -A INPUT -d 240.0.0.0/5 -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -d 0.0.0.0/8 -j DROP
iptables -A INPUT -d 239.255.255.0/24 -j DROP
iptables -A INPUT -d 255.255.255.255 -j DROP
# Korrupte Pakete zurueckweisen
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
# Stealth Scans etc. DROPpen
# Keine Flags gesetzt
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j MY_DROP
# SYN und FIN gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP
# SYN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP
# FIN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROP
# FIN ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP
# PSH ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j MY_DROP
# URG ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j MY_DROP
# Loopback-Netzwerk-Kommunikation zulassen
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Connection-Tracking aktivieren
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# DNS
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 53 -j ACCEPT
# FTP
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 21 -j ACCEPT
# SSH
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 4837 -j ACCEPT
#HTTP
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 80 -j ACCEPT
# HALF-LIFE
# Es sind hier Beispielhaft Server auf den Ports 27115,27125,27135,27145 voreingestellt
# HL Shortpackeges Filtern fuer Gold Source Server DDos etc
iptables -A INPUT -i eth0 -p udp -m multiport -m udp --dports 27015,27016 -m length --length 0 -j DROP
iptables -A INPUT -i eth0 -p udp -m multiport -m udp --dports 27015,27016 -m length --length 28 -j DROP
iptables -A INPUT -i eth0 -p udp -m multiport -m udp --dports 27015,27016 -m length --length 39 -j DROP
iptables -A INPUT -i eth0 -p udp -m multiport -m udp --dports 27015,27016 -m length --length 48 -j DROP
iptables -A INPUT -i eth0 -p udp -m multiport -m udp --dports 27015,27016 -m length --length 105 -j DROP
# VAC Friends Autopudate etc
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 6000:6003 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 7001:7002 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 27005 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 27010 -j ACCEPT
# HALF-LIFE
iptables -A INPUT -i eth0 -m state --state NEW -p udp -m multiport --dports 27015,27016 -j ACCEPT
# HALF-LIFE RCON
iptables -A INPUT -i eth0 -p tcp -m multiport -m tcp --dports 27015,27016 -m hashlimit --hashlimit-upto 2/sec --hashlimit-burst 1 --hashlimit-mode srcip,dstip,dstport --hashlimit-name TF_PACKET_LIMIT -j ACCEPT
# Teamspeak3
iptables -A INPUT -i eth0 -p udp --dport 9987 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 1337 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 30033 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 10011 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 2008 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --dport 9987 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --dport 1337 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 30033 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 10011 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 2008 -j ACCEPT
# Unreal und Mods wie Killingfloor
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 7707 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 7708 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 7717 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 20560 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 28852 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 8075 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 28852 -j ACCEPT
# Default-Policies mit REJECT
iptables -A INPUT -j MY_REJECT
iptables -A OUTPUT -j MY_REJECT
# Max. 500/Sekunde (5/Jiffie) senden
echo 5 > /proc/sys/net/ipv4/icmp_ratelimit
# Speicherallozierung und -timing für IP-De/-Fragmentierung
echo 262144 > /proc/sys/net/ipv4/ipfrag_high_thresh
echo 196608 > /proc/sys/net/ipv4/ipfrag_low_thresh
echo 30 > /proc/sys/net/ipv4/ipfrag_time
# TCP-FIN-Timeout zum Schutz vor DoS-Attacken setzen
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
# Maximal 3 Antworten auf ein TCP-SYN
echo 3 > /proc/sys/net/ipv4/tcp_retries1
# TCP-Pakete maximal 15x wiederholen
echo 15 > /proc/sys/net/ipv4/tcp_retries2
;;
stop)
echo "Stoppe IP-Paketfilter"
# Tabelle flushen
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
# Default-Policies setzen
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
;;
status)
echo "Tabelle filter"
iptables -L -vn
echo "Tabelle nat"
iptables -t nat -L -vn
echo "Tabelle mangle"
iptables -t mangle -L -vn
;;
*)
echo "Fehlerhafter Aufruf"
echo "Syntax: $0 {start|stop|status}"
exit 1
;;
esac
Ich weiß nur nicht so recht was das Script macht.
Gerne würde ich noch ein "Limit" auf gewissen Ports anlegen.
Bsp.
iptables -A INPUT -i eth0 -m limit --limit 2/s –-limit-burst 10 --state NEW -p tcp --dport 21 -j ACCEPT
Stimmt das so?
Also maximal sind 2 Pakete pro sekunde erlaubt aber er darf kurzzeitig auch 10 senden.
ist das Script soweit in Ordnung? hab schon einen echten DDOS erlebt und damals konnte meine Firewall 0 ausrichten, aber gegen so ein paar Kiddiescripte sollte es wenigstens taugen.
MFG