[asterisk-dev] Asterisk Network Security Idea (using tcp_wrappers)
Joseph Benden
joe at thrallingpenguin.com
Sat Mar 28 21:01:26 CDT 2009
Hello all,
There has been recent discussion regarding a needed network security
infrastructure for Asterisk. After some thought, I have come up with a
proposal for such an infrastructure. I would like the input of the
community on this idea and, if acceptable, I would be willing to start
the implementation.
I propose an idea based around an old concept that many existing
network daemons use, tcp_wrappers[1]. First things first, after
private discussion, it has been found that the license[2] of
tcp_wrappers is compatible with the dual-license nature of Asterisk.
Contrary to its name, TCP wrappers may be used for either TCP or UDP
connections and are mostly centered around filtering at the host or
subnet network address level. This concept mirrors the existing ACL
infrastructure in place within the SIP module[3] of Asterisk
(permit,deny). The benefit in using TCP Wrappers is centralized
management of ACLs across network daemons and the use of existing
tools that can utilize them, such as DenyHosts[4]. DenyHosts has the
capability of monitoring the syslog, using regular expressions, and
acting by the modification of /etc/hosts.deny, to stop attacks on a
system. DenyHosts supports many operating systems and would be of
benefit in our community, as attacks against SSH and other services
would instantly block access to Asterisk.
To implement TCP Wrappers, two functional changes to Asterisk would
need to be implemented. The first is a centralized syslog function
that logs invalid usage of Asterisk, such as from the SIP and IAX
channels, the Manager API, the HTTP server, the Skinny channel, etc.
The second is a function that these internal Asterisk services use to
determine if an incoming connection is authorized to communicate with
Asterisk. These two functional changes permit tools to monitor
Asterisk via syslog and allow the usage of /etc/hosts.allow and /etc/
hosts.deny via the TCP Wrappers library.
For the first function, a possible method signature could be:
void ast_log_invalid(const char *module, const char *reason, const
char *ipaddr, const char *for)
For the second function, a possible method signature could be:
int ast_permitted(const char *name, const char *addr, const char *for)
int ast_permitted_sin(const struct sockaddr_in *sin, const char *for)
The above function would use the passed information to call the
function hosts_ctl() of TCP Wrappers.
[1] tcp_wrappers: ftp://ftp.porcupine.org/pub/security/index.html
[2] tcp_wrappers license: ftp://ftp.porcupine.org/pub/security/tcp_wrappers_license
[3] Asterisk SIP permit-deny-mask: http://www.voip-info.org/wiki/index.php?page=Asterisk+sip+permit-deny-mask
[4] DenyHosts: http://denyhosts.sourceforge.net/
Comments, suggestions, or ideas are welcomed!
Best Regards,
Joseph Benden
.--.
|o_o |
|:_/ |
// \ \
(| | )
/'\_ _/`\
\___)=(___/
http://www.ThrallingPenguin.com/
--------------------------------
We design, develop, and extend
software technologies for the
most demanding business
applications, as well as
offer VoIP Consulting
services.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.digium.com/pipermail/asterisk-dev/attachments/20090328/d32f0864/attachment.htm
More information about the asterisk-dev
mailing list