Archive for the ‘SIP’ tag
Automatically Block Failed SIP Peer Registrations
Previously we posted a little script for quickly checking your asterisk log for failed peer registrations. Building on that script, and with the use of iptables and cron, you can easily (and automatically) block flooding traffic from your system. Iptables, a linux command line program to filter IP traffic, provides high level packet filtering before the traffic can be used to corrupt a program. Cron, the linux time scheduler, enables you to automatically run commands at scheduled time periods.
Set up IP Tables
We will not be discussing the intricacies of iptables in this post. There are excellent tutorials on iptables, and with most things linux, help is only a google away. To help identify the traffic blocked as asterisk related, a new chain will be created appropriately called… asterisk.
Here’s how to add the new chain:
iptables -N asterisk iptables -A INPUT -j asterisk iptables -A FORWARD -j asterisk
This will help identify hosts blocked for failed registrations.
Asterisk’s Log for Failed Registrations
In most cases of a sip flood attack, the host attempts registration to Asterisk. These hosts are identified in the Asterisk log (/var/log/messages) as “No matching peer found.” The following perl script scans /var/log/messages for these patterns, strips the IP address, and puts the IP address into an array.
After the file has been read, the IP addresses are counted (each count is a failed attempt), compared against the existing blocked hosts, and new occurrences are blocked. With this script we are blocking any host after the 4th failed attempt.
Here’s the script (last updated 21 APR 2010):
#!/usr/bin/perl -w
use strict;
use warnings;
my (@failhost);
my %currblocked;
my %addblocked;
my $action;
open (MYINPUTFILE, "/var/log/asterisk/messages") or die "\n", $!, "Does log file file exist\?\n\n";
while (<MYINPUTFILE>) {
my ($line) = $_;
chomp($line);
if ($line =~ m/\' failed for \'(.*?)\' - No matching peer found/) {
push(@failhost,$1);
}
}
my $blockedhosts = `/sbin/iptables -n -L asterisk`;
while ($blockedhosts =~ /(.*)/g) {
my ($line2) = $1;
chomp($line2);
if ($line2 =~ m/(\d+\.\d+\.\d+\.\d+)(\s+)/) {
$currblocked{ $1 } = 'blocked';
}
}
while (my ($key, $value) = each(%currblocked)){
print $key . "\n";
}
if (@failhost) {
&count_unique(@failhost);
while (my ($ip, $count) = each(%addblocked)) {
if (exists $currblocked{ $ip }) {
print "$ip already blocked\n";
} else {
$action = `/sbin/iptables -I asterisk -s $ip -j DROP`;
print "$ip blocked. $count attempts.\n";
}
}
} else {
print "no failed registrations.\n";
}
sub count_unique {
my @array = @_;
my %count;
map { $count{$_}++ } @array;
map {($addblocked{ $_ } = ${count{$_}})} sort keys(%count);
}
Schedule the script with cron
The final step is to schedule your script to run every X minutes in cron. We’ve chosen to run our script every 2 minutes, but you can change this to 1 minute or any other time period you choose. Just remember… you can receive thousands of attempts within 2 minutes.
If you have named your script check-failed-regs.pl and placed it in your /usr/local/bin directory, your cron statement would look like this:
*/2 * * * * perl /usr/local/bin/check-failed-regs.pl &> /dev/null
Questions? Comments? We love feedback. Or, contact us for more information.
Perl Script for Asterisk Failed Peer Registrations
I guess this might be better titled as the Quick and Dirty Perl Script… but here we go:
#!/usr/bin/perl -w
use strict;
use warnings;
my (@failhost);
open (MYINPUTFILE, "/var/log/asterisk/$ARGV[0]") or die "\n", $!, "Does log file file exist\?\n\n";
while (<MYINPUTFILE>) {
my ($line) = $_;
chomp($line);
if ($line =~ m/\' failed for \'(.*?)\' - No matching peer found/) {
push(@failhost,$1);
}
}
if (@failhost) {
&count_unique(@failhost);
} else {
print "no failed registrations.\n";
}
sub count_unique {
my @array = @_;
my %count;
map { $count{$_}++ } @array;
#print them out:
map {print "$_ = ${count{$_}}\n"} sort keys(%count);
}
And while we duck from @Merlyn’s criticisms (although we love his criticism), the basic usage is:
perl [Whatever you named it].pl messages
or perl [Whatever you named it].pl messages.1
Results look like:
184.73.53.22 = 13586
64.76.45.100 = 9895
78.46.87.14 = 9960
Or “no failed registrations.” if you have no failed attempts.
SIP Response Codes
The Session Initiation Protocol (SIP) is widely used to control VoIP, Video Calls, and other multimedia communication over a newtork. SIP uses design elements similar to HTTP requests/responses (although they are not 1 to 1).
Following is a list of SIP Response Codes: Read the rest of this entry »
Asterisk Consulting Services

Team Forrest offers Asterisk Consulting Services for a wide variety of VoIP, Call Center, and other Telephony Based needs. From small, family business to large Corporations, Team Forrest’s simple philosophy of “Help the Client” ensures we provide great service to meet your needs.
Asterisk Consulting
From carrier services to traditional PBX services, Team Forrest’s Asterisk Consulting Service provides you the solution you need. Services include:
- IVR Development
- Custom AGI Scripting / Programming
- OpenSER Integration
- Calling Card Systems
- Call Center / Sales Queue Development
- Call Recording (call spying, call barging, whisper, etc.)
- Database Integration (Microsoft SQL MSSQL, MySQL, Oracle, etc.)
- Custom Solutions
Emergency Asterisk Support
When a problem comes along, we provide 24/7 Emergency Support to bring your system back to life. Both new and existing clients benefit from our immediate support response.
For immediate support please contact us or call +1 (212) 937-7844.
Remote and Onsite Support
Team Forrest offers immediate remote assistance across the globe. Local, onsite service is also available, with quick response to Michigan, Florida, and New York locations.
Asterisk? Ask us.
With Team Forrest, you get professional consulting at a great price — increased productivity at a lower cost. To see how Team Forrest can help improve your communication needs, contact us. We enjoy talking with clients and look forward to seeing how we can help you.
Asterisk, developed and released by Digium, Inc., is the world’s leading open source telephony engine and tool kit. Asterisk empowers communication with it’s flexibility. Whether working as a simple office telephone system, a robust Call Center platform, or anything in-between, Asterisk provides advanced features at a very low deployment cost. Asterisk is released as open source under the GNU General Public License (GPL), and it is available for download free of charge. Asterisk is the most popular open source software available, with the Asterisk Community being the top influencer in VoIP.
Asterisk Security Advisory AST-2009-002
Digium announced today a Remote Crash Vulnerability in the SIP Channel Driver affecting recent versions of Asterisk 1.4 and 1.6 branches. The full Advisory can be read directly from the Asterisk Project Security Advisory:
Description: When configured with pedantic=yes the SIP channel driver performs extra request URI checking on an INVITE received as a result of a SIP spiral. As part of this extra checking the headers from the outgoing SIP INVITE sent and the received SIP INVITE are compared. The code incorrectly assumes that the string for each header passed in will be non-NULL in all cases. This is incorrect because if no headers are present the value passed in will be NULL.
The values passed into the code are now checked to be non-NULL before being compared.
Resolution: Upgrade to revision 174082 of the 1.4 branch, 174085 of the 1.6.0 branch, 174086 of the 1.6.1 branch, or one of the releases noted below.
The pedantic option in the SIP channel driver can also be turned off to prevent this issue from occurring.
Affected Versions
1.4.x (Versions 1.4.22, 1.4.23, 1.4.23.1)
1.6.0.x (All versions prior to 1.6.0.6)
1.6.1.x (All versions prior to 1.6.1.0-rc2)
C.x.x (Only version C.2.3)
If you need assistance in updating or reviewing your Asterisk installation, please contact Team Forrest today.
Using AGI to get Caller ID Name CNAM
Everyone has them — and here’s Team Forrest’s version of a Caller ID to Name (CNAM, CIDNAME, etc.) lookup using AnyWho, Google, and 411.com. The first file is the calleridname.pl: Read the rest of this entry »
VoIP Users Conference via SIP
UPDATE — Got HD? You can now connect to the VoIP Users Conference in HD Quality thanks to ZiPDX
The VoIP Users Conference gathers weekly on Fridays to discuss all things VoIP. Free, and open to the public, participants can listen live or download archived recordings.
There are three main ways to access the live conference:
- via SIP directly
- via HiDef SIP directly
- via PSTN (see below for the number)
- via the Talkshoe client
VoIP Users Conference via SIP
Recently, several participants experienced difficulties in connecting to the conference using SIP. The issue dealt with DTMF recognition and prevented the participant from entering the conference number and pin.
Thanks to the power of SIP, this problem can be circumvented using a SIP Header. Adding the SIP Header of Subject: <passcode>22622</passcode><pin>YOURPIN</pin> will bypass the DTMF needs and enter you into the conference automatically.
Using Asterisk, a SIP Header can easily be added to your dialplan. For example, if you wanted to dial *10 to reach the VoIP Users Conference, you would modify your extensions.conf to contain something like:
exten => *10,1,NoOp(VoIP Users Conference Fridays at 12pm EST. Replace YOURPIN with your talkshoe pin) exten => *10,n,SIPAddHeader(Subject: <passcode>22622</passcode><pin>YOURPIN</pin>) exten => *10,n,Dial(SIP/talkshoe@vuc.onsip.com)
VoIP Users Conference via Hi Def SIP
If you have an HD Voice / Wideband capable phone, you can connect directly to the conference using g722 at the following SIP URI:
- sip:200901@login.zipdx.com
So, in Asterisk’s extensions.conf, it may look something like this:
exten => *11,1,NoOp(VoIP Users Conference Fridays at 12pm EST. g722 connection) exten => *11,n,Dial(SIP/200901@login.zipdx.com)
REMEMBER! To use the wideband (g722) bridge, you need a wideband capable phone.
PSTN, Talkshoe, and Web
The VoIP Users Conference meets every Friday at 12pm Eastern Standard Time. More information can be found by following these links:
- VoIP Users Conference
- Talkshoe
- PSTN –> Dial (724) 444-7444 and enter 22622# 1#
Asterisk Dial Plan Basics
VoIP Insider has a great little article about basic dialplan building with Asterisk. It’s worth a read if Asterisk, VoIP, or PBX with Asterisk is on your mind.
VoIP Insider is a blog from VoIP Supply. VoIP Supply carries a variety of VoIP hardware, including Polycom SIP phones, Asterisk hardware, and pretty much any VoIP capable phone.