Personal tools
You are here: Home Dokumente OpenVZ Gibt es ein initiales iptables Script für den VPS [V1.1]?
Document Actions

Gibt es ein initiales iptables Script für den VPS [V1.1]?

by BeDa last modified 05-12-2007 22:10

Ja

#!/bin/bash
#
# ########################################
# iptables Script für 7X.4X.2XX.1XX #
# peter.grunert@gmail.com Version 1.1 #
# ########################################
#
### BEGIN INIT INFO
# Provides: IP-Paketfilter
# Required-Start: $network $local_fs
# Required-Stop: $local_fs
# Default-Start: 3 5
# Default-Stop: 0 1 2 4 6
# Short-Description: iptables Script für 7X.4X.2XX.1XX
# Description: iptables Script für den Server 7X.4X.2XX.1XX
### END INIT INFO
#

# Variablendefinitionen
int_dnsserver=$(grep ^nameserver /etc/resolv.conf | wc -l | tr -d " ")

# IP-Adressen fuer Netzwerkinterfaces besorgen
ip_venet0_0=`ifconfig venet0:0 | grep inet | cut -d: -f2 | cut -d" " -f1`
ip_lo=`ifconfig lo | grep inet | cut -d: -f2 | cut -d" " -f1`

# Pfade zu binarys besorgen
iptables=`which iptables`

case "$1" in
start)
echo "Starte IP-Paketfilter"

# Tabellen flushen
$iptables -F
$iptables -t mangle -F
$iptables -X
$iptables -t mangle -X

# Default-Policies setzen (sollte nie zutreffen)
$iptables -P INPUT DROP
$iptables -P OUTPUT DROP
$iptables -P FORWARD DROP

# Ungueltige Verbindungen aus der Statustabelle loggen und verwerfen
$iptables -A INPUT -m state --state INVALID -m limit --limit 1800/h -j LOG --log-level info --log-prefix "input_state ungueltig "
$iptables -A OUTPUT -m state --state INVALID -m limit --limit 1800/h -j LOG --log-level info --log-prefix "output_state ungueltig "
$iptables -A FORWARD -m state --state INVALID -m limit --limit 1800/h -j LOG --log-level info --log-prefix "forward_state ungueltig "
$iptables -A INPUT -m state --state INVALID -j DROP
$iptables -A OUTPUT -m state --state INVALID -j DROP
$iptables -A FORWARD -m state --state INVALID -j DROP

# bestehende Verbindungen aus der Statustabelle akzeptieren
$iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Verbindungen auf loopback zulassen
$iptables -A INPUT -i lo -m state --state NEW -j ACCEPT
$iptables -A OUTPUT -o lo -m state --state NEW -j ACCEPT

# DNS Anfragen von hoedur auf die DNS Server in /etc/resolv.conf
for ((I=1; $I <= $int_dnsserver; I++)) ; do

# Nameserver IP holen
ip_dns_server=$(grep ^nameserver /etc/resolv.conf | head -n $I | tail -n 1 | cut -d " " -f 2)

$iptables -A OUTPUT -o venet0 -p udp -s $ip_venet0_0 -d $ip_dns_server --dport 53 -m state --state NEW -j ACCEPT

# Schleifenabbruch
if [ $I -eq $int_dnsserver ] ; then
break
fi
done

# maximal 2/s ICMP Request von aussen und 2/s ICMP Reply von innnen
$iptables -A INPUT -i venet0 -p icmp -d $ip_venet0_0 --icmp-type "echo-request" -m limit --limit 2/s -j ACCEPT
$iptables -A OUTPUT -o venet0 -p icmp -s $ip_venet0_0 --icmp-type "echo-reply" -m limit --limit 2/s -j ACCEPT

# ssh whitelist von hoedur zulassen
# $iptables -A INPUT -i venet0 -p tcp -s 85.214.57.212 -d $ip_venet0_0 --dport 22 -m state --state NEW -j default_accept

# ssh aus dem Internet erlauben aber BruteForce verbieten
$iptables -A INPUT -i venet0 -p tcp -d $ip_venet0_0 --dport 22 \
-m hashlimit --hashlimit 1/hour --hashlimit-mode srcip --hashlimit-name ssh --hashlimit-burst 2 \
-m state --state NEW -j default_accept

# http aus dem Internet zulassen
# $iptables -A INPUT -i venet0 -d $ip_venet0_0 -p tcp --dport 80 -m state --state NEW -j ACCEPT

# https aus dem Internet zulassen
# $iptables -A INPUT -i venet0 -d $ip_venet0_0 -p tcp --dport 443 -m state --state NEW -j ACCEPT

# Teamspeak Server
# $iptables -A INPUT -i venet0 -d $ip_venet0_0 -p udp --dport 8767 --sport 1024:65535 -m state --state NEW -j ACCEPT

# Nginx darf sich per http und https auf hoedur verbinden
# $iptables -A OUTPUT -o venet0 -s $ip_venet0_0 -d 85.214.57.212 -p tcp --dport 80 -m owner --uid-owner 1003 -m state --state NEW -j ACCEPT
# $iptables -A OUTPUT -o venet0 -s $ip_venet0_0 -d 85.214.57.212 -p tcp --dport 443 -m owner --uid-owner 1003 -m state --state NEW -j ACCEPT

# Letzte Regel alles verwerfen (policies stehen zwar auf drop aber sicher ist sicher :-))
$iptables -A OUTPUT -j DROP
$iptables -A INPUT -j DROP
$iptables -A FORWARD -j DROP

;;

stop)
echo "Stoppe IP-Paketfilter (ACCEPT ALL)"

# Tabelle flushen
$iptables -F
$iptables -t mangle -F
$iptables -X
$iptables -t mangle -X

# Default-Policies auf ACCEPT setzen
$iptables -P INPUT ACCEPT
$iptables -P OUTPUT ACCEPT
$iptables -P FORWARD ACCEPT
;;

status)

echo "Tabelle filter"
$iptables -L -vn
echo "Tabelle mangle"
$iptables -t mangle -L -vn
;;

*)
echo "Fehlerhafter Aufruf"
echo "Syntax: $0 {start|stop|status}"
exit 1
;;

esac

Stoppt die Vorratsdatenspeicherung - www.vorratsdatenspeicherung.de