Asterisk Server absichern
Buch - Scripte

 

Das folgende Script dient zum starten einer iptables Firewall. Das Script sollte im Verzeichnis /etc/init.d abgespeichert und mit dem entsprechenden Runlevel verlinkt werden.

iptables Firewall Startscript


#!/bin/sh
#
# Script zum starten eines IP Packetfilters
#
# Description: Script zum starten und stoppen eines IPTABLES Firewall
# Autor: Sven Neukirchner < Diese E-Mail-Adresse ist gegen Spambots geschützt! JavaScript muss aktiviert werden, damit sie angezeigt werden kann. >
# Date 07.04.2006
# Lizenz: GPL
#


CONFIG=/etc/sysconfig/firewall

test -x $CONFIG || exit 1

# Connection-Tracking-Module
modprobe ip_conntrack
modprobe ip_conntrack_irc
modprobe ip_conntrack_ftp


case "$1" in
start)
echo -n "Starte iptable Firewall... "
echo ""
echo ""
echo " Loesche vorhandene Ketten..."
iptables -F
iptables -X
$CONFIG

echo
;;

stop)
echo -n "Beende iptable Firewall... "
echo " "
echo " Leere Ketten..."
iptables -F
iptables -X
echo " Oeffne Firewall..."
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
echo " "
echo -n " !!ACHTUNG Firewall offen!!"
echo " "
echo " "
;;

panic)
echo -n "Schliesse Firewall... "
echo " "
echo " Leere Ketten..."
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
;;

show)

iptables -L
;;

restart)

echo " Loesche vorhandene Ketten..."
iptables -F
iptables -X
$CONFIG
;;

*)

echo "Syntax: firewall {start|stop|restart|panic|show}"
exit 1
esac

exit 0

 

 

Das folgende Script kann genutzt werden wenn der Asterisk Server direkt mit dem Internet verbunden ist.
Diese Script sollte im Verzeichnis /etc/sysconfig abgepeichert werden.

 

iptables Firewall Stand-Alone

#
# einfaches Konfigurationsscript einer Firewall auf einem
# Stand-Alone Rechner ohne NAT
#
#
# Description: Script zum Konfigurieren einer IPTABLES Firewall
# Autor: Sven Neukirchner < Diese E-Mail-Adresse ist gegen Spambots geschützt! JavaScript muss aktiviert werden, damit sie angezeigt werden kann. >
# mit Hilfe von Newsgroups und Beispielen aus dem Internet
# Date 07.04.2006
# Version: 3.0
# Lizenz: GPL
#
## Inhalt aller Chains loeschen ist nicht notwendig da das schon im Startscript
# /etc/init.d/firewall durchgefuehrt wird
#
#################################################################################
#--- Hier werden ein paar Einstellungen vorgenommen ----------------------------#
#################################################################################

# meine beiden Netzwerkkarten
EXTERN="dsl0"
INTERN="eth0"

# TCP Dienste die der Rechner im Internet nutzt
TCP_OUT="21 25 53 80 110 443"

# UDP Dienste die der Rechner im Internet nutzt
UDP_OUT="53 5060"

# TCP Dienste die der Rechner zur Verfuegung stellt
TCP_IN="22"

# UDP Dienste die der Rechner zur Verfuegung stellt
UDP_IN=""

# erlaubte ICMP von aussen
ICMP_IN="8"

# VoIP RTP Ports
RTP_RANGE=10000:10020

#################################################################################
#--- Ab hier keine Aenderungen vornehmen ---------------------------------------#
#################################################################################

#------------------------------------------------------------------------#
#---Ketten loeschen------------------------------------------------------#
#------------------------------------------------------------------------#

# echo " Setze Firewall zurueck..."

# # Firewall Ketten loeschen
# iptables -F
# iptables -X

#------------------------------------------------------------------------#
#---POLICY setzen--------------------------------------------------------#
#------------------------------------------------------------------------#

echo " Schliesse Firewall..."

# erst mal alles dicht machen
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#------------------------------------------------------------------------#
#--- INTERNER NETZVERKEHR------------------------------------------------#
#------------------------------------------------------------------------#
echo " Konfiguriere Interface $INTERN..."

# Kommunikation Auf Loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Kommunikation interner Netzwerkkarte
iptables -A INPUT -i $INTERN -j ACCEPT
iptables -A OUTPUT -o $INTERN -j ACCEPT

#------------------------------------------------------------------------#
#--- VERBINDUNGEN ZUM INTERNET ------------------------------------------#
#------------------------------------------------------------------------#
echo " Konfiguriere Interface $EXTERN..."


# TCP Verbindung zum Internet
for port_range in $TCP_OUT ; do
iptables -A OUTPUT -o $EXTERN -p tcp --dport $port_range -j ACCEPT
iptables -A INPUT -i $EXTERN -p tcp --sport $port_range -m state --state ESTABLISHED -j ACCEPT
done

# UDP Verbindung zum Internet
for port_range in $UDP_OUT ; do
iptables -A OUTPUT -o $EXTERN -p udp --dport $port_range -j ACCEPT
iptables -A INPUT -i $EXTERN -p udp --sport $port_range -m state --state ESTABLISHED -j ACCEPT
done

# ICMP darf raus
iptables -A OUTPUT -o $EXTERN -p ICMP -j ACCEPT
iptables -A INPUT -i $EXTERN -p ICMP -m state --state ESTABLISHED -j ACCEPT


#------------------------------------------------------------------------#
#--- VERBINDUNGEN VOM INTERNET ------------------------------------------#
#------------------------------------------------------------------------#

# TCP Verbindung vom Internet
for port_range in $TCP_IN ; do
iptables -A INPUT -i $EXTERN -p tcp --dport $port_range -j ACCEPT
iptables -A OUTPUT -o $EXTERN -p tcp --sport $port_range -m state --state ESTABLISHED -j ACCEPT
done

# UDP Verbindung vom Internet
for port_range in $UDP_IN ; do
iptables -A INPUT -i $EXTERN -p udp --dport $port_range -j ACCEPT
iptables -A OUTPUT -o $EXTERN -p udp --sport $port_range -m state --state ESTABLISHED -j ACCEPT
done

# ICMP com Internet
for icmp_type in $ICMP_IN ; do
iptables -A INPUT -i $EXTERN -p icmp --icmp-type $icmp_type -j ACCEPT
iptables -A OUTPUT -o $EXTERN -p icmp --icmp-type $icmp_type -m state --state ESTABLISHED -j ACCEPT
done

#------------------------------------------------------------------------#
#--- RTP Stream -------------- ------------------------------------------#
#------------------------------------------------------------------------#
# ---VoIP RTP
for port_range in $RTP_RANGE ; do
iptables -A OUTPUT -o $EXTERN -p udp --sport $port_range -j ACCEPT
iptables -A INPUT -i $EXTERN -p udp --dport $port_range -j ACCEPT
done


################## ENDE FIREWALL ########################################

 

Das folgende Script kannauf einem Linux Router verwendet werden, wenn der Asterisk Server sich im Netzwerk auf einem separaten Rechner befindet.
Diese Script sollte im Verzeichnis /etc/sysconfig abgepeichert werden.

 

iptables Firewall NAT

#
# einfaches Konfigurationsscript einer Firewall auf einem
# Rechner mit NAT Unterstuetzung
#
# Gestartet wird diese Datei mit Hilfe der /etc/rc.d/init.d/firewall
# Description: Script zum Konfigurieren einer IPTABLES Firewall
# Autor: Sven Neukirchner < Diese E-Mail-Adresse ist gegen Spambots geschützt! JavaScript muss aktiviert werden, damit sie angezeigt werden kann. >
# mit Hilfe von Newsgroups und Beispielen aus dem Internet
# Date 07.04.2006
# Version: 3.0
# Lizenz: GPL
#
# Inhalt aller Chains loeschen ist nicht notwendig da das schon im Startscript
# /etc/init.d/firewall durchgefuehrt wird
#
#################################################################################
#--- Hier werden ein paar Einstellungen vorgenommen ----------------------------#
#################################################################################

# meine beiden Netzwerkkarten
EXTERN="dsl0"
INTERN="eth0"


#--- Aktivierung der verwendeten Dienste ------------------------------

# TCP Dienste die auf dem Gateway laufen
TCP_SERVICES_IN="22 10000"
# UDP Dienste die auf dem Gateway laufen
UDP_SERVICES_IN=""
# erlaubte ICMP Typen zum Gateway
ICMP_IN="8"

# TCP Dienste die das Gateway im Internet nutzt
TCP_SERVICES_OUT="20 21 22 25 53 80 110 "

# UDP Dienste die das Gateway im Internet nutzt
UDP_SERVICES_OUT="53 20 21"

# TCP Dienste die Netwerkclients im Internet nutzen
TCP_SNAT="80 53 20 21 22 25 110"

# UDP Dienste die Netwerkclients im Internet nutzen
UDP_SNAT="53 20 21"

# ICMP darf mein Netzwerk verlassen
# ICMP Antworen von ausserhalb sind erlaubt

# Diese Einstellungen sind für ein SIP Client hinter dem Router
# hier wird Port Forwarding durchgefuehrt
VoIP=1 # VoIP unterstuetzen 0=aus 1=an
VoIP_IP=192.168.255.150 # IP Adresse des SIP Client
SIP_PORT=5060 # SIP UDP Port
RTP_RANGE=10000:10020 # RTP Range



#######################################################################################
#--- Ab hier bitte keine Aenderungen mehr vornehmen - oder Du weisst was Du machst ---#
#######################################################################################



#------------------------------------------------------------------------#
#---POLICY setzen--------------------------------------------------------#
#------------------------------------------------------------------------#
echo " Schliesse Firewall..."

# erst mal alles dicht machen
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#------------------------------------------------------------------------#
#--- INTERNER NETZVERKEHR------------------------------------------------#
#------------------------------------------------------------------------#
echo " Konfiguriere Interface $INTERN..."

# Kommunikation Auf Loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Kommunikation interner Netzwerkkarte
iptables -A INPUT -i $INTERN -j ACCEPT
iptables -A OUTPUT -o $INTERN -j ACCEPT


#------------------------------------------------------------------------#
#--- EXTERNER NETZVERKEHR------------------------------------------------#
#------------------------------------------------------------------------#
echo " Konfiguriere Interface $EXTERN..."

#--- Verbindungen die aus dem INERNET zum GATEWAY erlaubt sind ------------------------------------

# erlaubte TCP Nachrichten zum Gateway
for port_range in $TCP_SERVICES_IN ; do
iptables -A INPUT -i $EXTERN -p tcp --dport $port_range -j ACCEPT
iptables -A OUTPUT -o $EXTERN -p tcp --sport $port_range -m state --state ESTABLISHED -j ACCEPT
done

# erlaubte UDP Nachrichten zum Gateway
for port_range in $UDP_SERVICES_IN ; do
iptables -A INPUT -i $EXTERN -p udp --dport $port_range -j LOG --log-prefix "IN GATEWAY " --log-level 6 -m limit --limit 3/m
iptables -A INPUT -i $EXTERN -p udp --dport $port_range -j ACCEPT
iptables -A OUTPUT -o $EXTERN -p udp --sport $port_range -m state --state ESTABLISHED -j ACCEPT
done

# erlaubte ICMP Nachrichten zum Gateway
for icmp_type in $ICMP_IN ; do
iptables -A INPUT -i $EXTERN -p icmp --icmp-type $icmp_type -j ACCEPT
iptables -A OUTPUT -o $EXTERN -p icmp --icmp-type $icmp_type -m state --state ESTABLISHED -j ACCEPT
done

#--- Dienste das Gateway im Internet nutzen -------------------#

# definierte TCP Dienste im Internet
for port_range in $TCP_SERVICES_OUT ; do
iptables -A OUTPUT -o $EXTERN -p tcp --dport $port_range -j ACCEPT
iptables -A INPUT -i $EXTERN -p tcp --sport $port_range -m state --state ESTABLISHED -j ACCEPT
done

# definierte UDP Dienste im Internet
for port_range in $UDP_SERVICES_OUT ; do
iptables -A OUTPUT -o $EXTERN -p udp --dport $port_range -j ACCEPT
iptables -A INPUT -i $EXTERN -p udp --sport $port_range -m state --state ESTABLISHED -j ACCEPT
done

# ICMP darf raus
iptables -A OUTPUT -o $EXTERN -p ICMP -j ACCEPT


#------------------------------------------------------------------------#
#--- FORWARD KETTE-------------------------------------------------------#
#------------------------------------------------------------------------#
echo " Konfiguriere NAT..."

# Packete fuer Detination NAT maskieren
iptables -t nat -A POSTROUTING -o $EXTERN -j MASQUERADE

#--- Dienste die Netzwerkclients im Internet nutzen -------------------#

# definierte TCP Dienste im Internet
for port_range in $TCP_SNAT ; do
iptables -A FORWARD -i $INTERN -p tcp --dport $port_range -j ACCEPT
iptables -A FORWARD -i $EXTERN -p tcp --sport $port_range -m state --state ESTABLISHED -j ACCEPT
done

# definierte UDP Dienste im Internet
for port_range in $UDP_SNAT ; do
iptables -A FORWARD -i $INTERN -p udp --dport $port_range -j ACCEPT
iptables -A FORWARD -i $EXTERN -p udp --sport $port_range -m state --state ESTABLISHED -j ACCEPT
done

# ICMP darf raus
iptables -A FORWARD -i $INTERN -p ICMP -j ACCEPT

#--- FTP nach aussen ermoeglichen --------------------------------------

# aktives FTP
iptables -A FORWARD -i $EXTERN -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $EXTERN -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT

# passives FTP
iptables -A FORWARD -i $EXTERN -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $INTERN -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT


#--- Portforwarding zu einem VoIP Client im Netzwerk --------------------

if [ $VoIP = 1 ]
then

iptables -t nat -A PREROUTING -i $EXTERN -p UDP --dport $SIP_PORT -j DNAT --to $VoIP_IP
iptables -t nat -A PREROUTING -i $EXTERN -p UDP --dport $RTP_RANGE -j DNAT --to $VoIP_IP

iptables -A FORWARD -i $INTERN -s $VoIP_IP -p UDP --sport $SIP_PORT -j ACCEPT
iptables -A FORWARD -i $INTERN -s $VoIP_IP -p UDP --sport $RTP_RANGE -j ACCEPT

iptables -A FORWARD -i $EXTERN -d $VoIP_IP -p UDP --dport $SIP_PORT -j ACCEPT
iptables -A FORWARD -i $EXTERN -d $VoIP_IP -p UDP --dport $RTP_RANGE -j ACCEPT

fi


################## ENDE FIREWALL ########################################