iptables Script und Asterisk

Zotti_20

Neuer User
Mitglied seit
27 Okt 2005
Beiträge
30
Punkte für Reaktionen
0
Punkte
0
Hallo Ich habe ein Problem mit iptables und Asterisk.
Ich will meinen Asterisk Server etwas sicherer machen und da dachte ich, ich mach mal ein iptables Script drauf.
Dauraufhin habe ich mir mal ein Script zusammengebastelt und habe jetzt jedoch noch ein paar Probleme.

1) Wenn das Script aktiv ist, kann ich von einem Telefon ein anderes anrufen, die beiden klingeln auch, jedoch wenn abgenommen wird, werden keine Sprachdaten übermittelt.

2) Wenn die Voicemailbox nach ca. 30 Sekunden hingehen sollte, höre ich nichts mehr.

3) Der Mail Versand der Voicemail Nachrichten funktioniert auch nicht mehr. Ich habe Exim im Einsatz (vieleicht kann mir da ja auch jemand helfen, auch wenn es ne ganz andere Baustelle ist).

Alles in allem, funktioniert ohne das Script alles, jedoch mit dem Script gar nichts mehr, außer das ich ein Telefon anrufen kann, welches dann auch klingelt.

Ich habe schon die Daten Gesnifft um herauszubekommen, welche Ports ich genau benötige. Meiner Meinung nach habe ich alle Ports drin, die mein Sniffer Protokolliert hat.

Naja hier mal mein Script und meine RTP.CONF

rtp.conf
Code:
; RTP Configuration
;
[general]
;
; RTP start and RTP end configure start and end addresses
;
; Defaults are rtpstart=5000 and rtpend=31000
;
rtpstart=10100
rtpend=10500
;
; Whether to enable or disable UDP checksums on RTP traffic
;
;rtpchecksums=no
;
; The amount of time a DTMF digit with no 'end' marker should be
; allowed to continue (in 'samples', 1/8000 of a second)
;
;dtmftimeout=3000

Mein iptables Script sieht so aus
Code:
SIP_PORT=5060:5061
RTP_PORT=10100:65000
TCP=TCP
UDP=UDP
MAIL_PORT=25
POP_PORT=109:110
IMAP_PORT=1200:1300

#Es soll der SIP Verkehr ein und ausgehend zugelassen werden
iptables -A INPUT -p $TCP --sport $SIP_PORT -j ACCEPT
iptables -A OUTPUT -p $TCP --dport $SIP_PORT -j ACCEPT
iptables -A INPUT -p $UDP --sport $SIP_PORT -j ACCEPT
iptables -A OUTPUT -p $UDP --dport $SIP_PORT -j ACCEPT

#Es soll der RTP Verkehr ein und ausgehend zugelassen werden
iptables -A INPUT -p $TCP --sport $RTP_PORT -j ACCEPT
iptables -A OUTPUT -p $TCP --dport $RTP_PORT -j ACCEPT
iptables -A INPUT -p $UDP --sport $RTP_PORT -j ACCEPT
iptables -A OUTPUT -p $UDP --dport $RTP_PORT -j ACCEPT

#Diese Ports habe ich beim Sniffen des Netzwerkverkehrs herausgefunden, hab eaber keine Ahnung wofür Sie da sind
iptables -A INPUT -p $TCP --sport 8000:8100 -j ACCEPT
iptables -A OUTPUT -p $TCP --dport 8000:8100 -j ACCEPT
iptables -A INPUT -p $UDP --sport 8000:8100 -j ACCEPT
iptables -A OUTPUT -p $UDP --dport 8000:8100 -j ACCEPT

#Ab hier würde ich noch gern meinen EMail Verkehr für die Voicemailbox zulassen.
#Das funktioniert so leider auch noch nicht
iptables -A INPUT -p tcp --sport $MAIL_PORT -j ACCEPT
iptables -A OUTPUT -p tcp --dport $MAIL_PORT -j ACCEPT
iptables -A INPUT -p tcp --sport $POP_PORT -j ACCEPT
iptables -A OUTPUT -p tcp --dport $POP_PORT -j ACCEPT
iptables -A INPUT -p udp --sport $POP_PORT -j ACCEPT
iptables -A OUTPUT -p udp --dport $POP_PORT -j ACCEPT
#Dass ich normalerweise kein IMAP brauche, weis ich.
#Hab es nur reingemacht um dies als mögliche Fehlerquelle auszuschließen.
iptables -A INPUT -p tcp --sport $IMAP_PORT -j ACCEPT
iptables -A OUTPUT -p tcp --dport $IMAP_PORT -j ACCEPT
iptables -A INPUT -p udp --sport $IMAP_PORT -j ACCEPT
iptables -A OUTPUT -p udp --dport $IMAP_PORT -j ACCEPT

#Am Schluss alle Policys auf DROP, damit nur das durchkommt, was ausdrücklich erlaubt ist.
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

Danke schon mal für eure Hilfe,
Gruß

P.S.
Ich habe schon den ganzen Nachmittag im Internet und hier im Forum gesucht, jedoch keine Lösung gefunden. Ich bin mir auch nicht sicher ob das Thema hier im falschen Forum ist, aber da es ja mit den Ports von Asterisk zu tun hat, dachte ich es kommt hier rein.
 
Hi,

das Script ist ganz schlimm. So ein Rechner braucht auch DNS oder will mal die Uhrzeit stellen.
Es gibt auch kein spezielles Asterisk Script.
Du mußt Dich in iptables einarbeiten.
http://www.iptables.org/
Oder eine GUI benutzen die ein Script erzeugt. (z.B. SuSe Firewall)
Dort dann die paar relevanten Ports für Asterisk einbauen.
UDP/5060 für SIP UDP/4569 für IAX und Audio siehe rtp.conf.

Gruß

Thomas
 
Es läuft Debian auf dem Server.
Der Server läuft in einem 100MBits/s Ethernet Netzwerk.
Der Server hat nur eine Netzwerkkarte.

Danke schon mal für die Links,
aber kannst du mir vieleicht sagen, was ich auf dem Server für Protokolle zulassen muss (oder welche Ports), damit der Server mit aktiver Firewall richtig funktioniert.
 
schau Die mal dieses Script an.
Wenn Du nur eine Netzwerkkarte hast solltest Du diese der Variable $EXTERN zuordnen.


INTERN="eth0" kannst Du dann löschen, genau wie

iptables -A INPUT -i $INTERN -j ACCEPT
iptables -A OUTPUT -o $INTERN -j ACCEPT


RTP_RANGE=10000:10020 sollte an die Werte der rtp.conf des Asterisk angepasst werden.

Ich komme mit 20 RTP Ports aus.















Code:
#
# einfaches Konfigurationsscript eines Firewalls auf einem Rechner
#
#
# Description:   Script zum  Konfigurieren einer IPTABLES Firewall
# Autor:         Sven Neukirchner <[EMAIL="[email protected]"][email protected][/EMAIL]>
#                mit Hilfe von Newsgroups und Beispielen aus dem Internet
# Date           10.02.2006
# Version:       3.0
# Lizenz:        GPL
#
#
#################################################################################
#--- 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="21 25 53 80 110 443"
    # UDP Dienste die der Rechner zur Verfuegung stellt
    UDP_IN="53 "
    # erlaubte ICMP
    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 ########################################


Viele Grüße Sven
 
Hi,
einfaches Script für einen Rechner im Internet mit einer Karte
Verbindung zum Rechner mit ssh Port 22
Verbindungen werden für SIP, IAX und die Audio Ports angenommen


iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
# kein IP Forwarding
echo 0 > /proc/sys/net/ipv4/ip_forward
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
# kaputte Pakete gleich wegwerfen
iptables -A INPUT -i $I_INT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -i $I_INT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -i $I_INT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A INPUT -i $I_INT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -A INPUT -i $I_INT -p tcp --tcp-flags ACK,FIN FIN -j DROP
iptables -A INPUT -i $I_INT -p tcp --tcp-flags ACK,PSH PSH -j DROP
iptables -A INPUT -i $I_INT -p tcp --tcp-flags ACK,URG URG -j DROP
iptables -A INPUT -i $I_INT -p tcp ! --syn -m state --state NEW -j DROP
# Loopback Interface erlauben
iptables -A INPUT -i lo -j ACCEPT
# Pakete zu bestehenden Verbindungen werden sofort durchgelassen
# siehe cat /proc/net/ip_conntrack
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ssh Verbindungesversuche loggen
iptables -A INPUT -m state --state NEW -p TCP --dport 22 -m limit --limit 2/s --limit-burst 50 -j LOG --log-level 5 --log-prefix "SSH: "
# ssh erlauben
iptables -A INPUT -m state --state NEW -p TCP --dport 22 -j ACCEPT
#SIP erlauben
iptables -A INPUT -m state --state NEW -p UDP --dport 5060 -j ACCEPT
# RTP erlauben, Ports siehe /etc/asterisk/rtp.conf
iptables -A INPUT -m state --state NEW -p UDP --dport 5000:6000 -j ACCEPT
# IAX erlauben
iptables -A INPUT -m state --state NEW -p UDP --dport 4569 -j ACCEPT
# Ping Anfragen beantworten, max. 5 pro Sekunde mit burst 10
iptables -A INPUT -p ICMP --icmp-type 8 -m limit --limit 5/s --limit-burst 10 -j ACCEPT
# alles andere dropen, wer mag kann auch REJECT --reject-with tcp-reset, usw. machen
# der Befehl ist eigentlich ueberfluessig, da default policy fuer die chain DROP ist
iptables -A INPUT -j DROP
 
@konabi
Du warst meine Rettung, dein Script war ein SUPER BEISPIEL, für ein IP Tables Script das man für VoIP einsetzen kann.
Nach so was hab ich echt schon ewig gesucht.
Das einzige was ich noch ändern musste war, dass ich bei UDP_IN="53 5060" machen musste, da sonst kein SIP eingehend auf dem Server erlaubt wurde.
So wie das Script nun hier steht funktioniert es bei mir und ich hoffe es wird, wie auch mir, noch vielen Leuten weiter helfen.

Nachmal MEGA THANX an Konabi

Gruß Harald

Code:
#
# einfaches Konfigurationsscript eines Firewalls auf einem Rechner
#
#
# Description:   Script zum  Konfigurieren einer IPTABLES Firewall
# Autor:         Sven Neukirchner <[email protected]>
#                mit Hilfe von Newsgroups und Beispielen aus dem Internet
# Date           10.02.2006
# Version:       3.0
# Lizenz:        GPL
#
#
#################################################################################
#--- 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="21 25 53 80 110 443"
    # UDP Dienste die der Rechner zur Verfuegung stellt
    UDP_IN="53 5060"
    # erlaubte ICMP
    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 ########################################
 
...na das hört man doch gerne.

;-)


Auf meiner Seite http://www.konabi.de habe ich im Downloadbereich noch ein paar andere Firewallscripts, leider noch nicht an VoIP angepasst, aber da ist auch eine Script wie man die Firewall mittesl init Script aktiviert.

Sobals ich zeit habe passe ich die doch an.


Viele Grüße
Sven
 
Auf der Suche meinen Asterisk auf vServer mit iptables zu schützen bin ich auf diesen "uralten" Thread gestossen. Dazu habe ich folgende, zusätzlichen (Anfänger-)Fragen:

Was müsste in dem Script von konabi bzw. Zotti_20 für Asterisk auf vServer mit Debian Lenny angepasst werden?

Braucht es für den Zugang mit WinSCP (Putty) und Tunnelier (CLI) zusätzliche Anpassungen für Port 22?

Braucht es eventuell noch andere Anpassungen um sich nicht selbst auszusperren?

Wenn das Script dann einmal vollständig ist:
Wo wird es abgelegt?
Wo und wie wird es aktiviert oder deaktiviert?

Gruss MET
 

Neueste Beiträge

Statistik des Forums

Themen
246,418
Beiträge
2,251,748
Mitglieder
374,141
Neuestes Mitglied
user737942
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.