- •Table of Contents
- •Introduction
- •What This Book Covers
- •Conventions
- •Reader Feedback
- •Customer Support
- •Errata
- •Questions
- •What is Asterisk?
- •Asterisk is a PBX
- •Station-To-Station Calls
- •Line Trunking
- •Telco Features
- •Advanced Call Distribution
- •Call Detail Records
- •Call Recording
- •Asterisk is an IVR System
- •Asterisk is a Voicemail System
- •Asterisk is a Voice over IP (VoIP) System
- •What Asterisk Isn't
- •Asterisk is Not an Off-the-Shelf Phone System
- •Asterisk is Not a SIP Proxy
- •Asterisk Does Not Run on Windows
- •Is Asterisk a Good Fit for Me?
- •Trade-Offs
- •Flexibility versus Ease of Use
- •Graphical versus Configuration File Management
- •Calculating Total Cost of Ownership
- •Return on Investment
- •Summary
- •The Public Switched Telephony Network (PSTN)
- •Connection Methods
- •Plain Old Telephone Service (POTS) Line
- •Integrated Services Digital Network (ISDN)
- •Voice over IP Connections
- •Determining Our Needs
- •Terminal Equipment
- •Types of Terminal Devices
- •Hard Phones
- •Soft Phones
- •Communications Devices
- •Another PBX
- •Choosing a Device
- •Features, Features, and More Features…
- •Determining True Cost
- •Compatibility with Asterisk
- •Sound Quality Analysis
- •Usability Issues
- •Recording Decisions
- •How Much Hardware do I Need?
- •Choosing the Extension Length
- •Summary
- •Preparing to Install Asterisk
- •Obtaining the Source Files
- •Installing Zaptel
- •Installing libpri
- •Installing Asterisk
- •Getting to Know Asterisk
- •Summary
- •Zaptel Interfaces
- •zaptel.conf
- •Lines
- •Terminals
- •zapata.conf
- •Lines
- •Terminals
- •SIP Interfaces
- •IAX Interfaces
- •Voicemail
- •Music On Hold
- •Queues
- •Conference Rooms
- •Summary
- •Creating a Context
- •Creating an Extension
- •Creating Outgoing Extensions
- •Advanced Call Distribution
- •Call Queues
- •Call Parking
- •Direct Inward Dialing (DID)
- •Automated Attendants
- •System Services
- •Summary
- •Call Detail Records
- •Flat-File CDR Logging
- •Database CDR Logging
- •Monitoring Calls
- •Recording Calls
- •Legal Concerns
- •Summary
- •CentOS
- •Preparation and Installation
- •The Asterisk Management Portal (AMP)
- •Maintenance
- •Setup
- •Flash Operator Panel (FOP)
- •Flash Operator Configuration Files
- •Web MeetMe
- •Flexibility When Needed
- •A Simple One-to-One PBX
- •Extensions
- •Trunks
- •Routes
- •Customer Relationship Management/SugarCRM
- •Adding Contacts
- •Call Scheduling
- •Administration of SugarCRM
- •Configure Settings
- •User Management
- •User Roles
- •Summary
- •Small Office/Home Office
- •The Scenario
- •The Discussion
- •The Configuration
- •zaptel.conf
- •zapata.conf
- •musiconhold.conf
- •voicemail.conf
- •modules.conf
- •extensions.conf
- •Conclusions
- •Small Business
- •The Scenario
- •The Discussion
- •The Configuration
- •zaptel.conf
- •zapata.conf
- •musiconhold.conf
- •agents.conf
- •queues.conf
- •sip.conf
- •meetme.conf
- •voicemail.conf
- •extensions.conf
- •Conclusions
- •Hosted PBX
- •The Scenario
- •The Discussion
- •The Configuration
- •zaptel.conf
- •zapata.conf
- •musiconhold.conf
- •sip.conf
- •voicemail.conf
- •extensions.conf
- •Conclusions
- •Summary
- •Backup and System Maintenance
- •Backing Up Configurations
- •Backing Up Log Files
- •Backup Scripts
- •Time Synchronization
- •Adding It All to cron
- •Rebuilding and Restoring the Asterisk Server
- •Disaster Recovery Plan (DRP)
- •Asterisk Server Security
- •Internal Access Control
- •Host Security Hardening for Asterisk
- •Integrity Checker
- •Root-Kit Detection
- •Automated Hardening
- •Role Based Access Control (RBAC)
- •Network Security for Asterisk
- •Firewalling the Asterisk Protocols
- •SIP (Session Initiation Protocol)
- •RTP—The Real-Time Transport Protocol
- •Controlling Administration of Asterisk
- •Asterisk Scalability
- •Load Balancing with DNS
- •Support Channels for Asterisk
- •Mailing Lists
- •Forums
- •IRC (Internet Relay Chat)
- •Digium
- •Summary
- •Index
Chapter 4
As you can see, the definitions can be as short as one line (assuming we defined our default context in the general section) or as long as we need them to be. Now we need to edit our SIP configuration file for our needs. Take a look at the terminal devices that we listed in Chapter 2 on which we selected SIP as our protocol. We now have enough knowledge to be able to create a user for each one of them.
IAX Interfaces
Asterisk provides another VoIP protocol, much like SIP, called Inter-Asterisk eXchange, or IAX. This protocol is easier to work with for many reasons, as we discussed in Chapter 2. For this section, we will need all of the terminal device details for which we selected IAX as the protocol.
Just as the name suggests, IAX is well-suited to connecting multiple Asterisk servers together. At this point in our work with Asterisk, this is not what we need, as we are limiting ourselves to one server. When we link multiple servers together, this feature will become useful.
Following the pattern established, the IAX protocol is configured in /etc/asterisk/ iax.conf. Just as the SIP file, it has a number of general settings, followed by settings for each individual users.
First we will discuss options for the [general] section. They include:
•port: set the port to listen on. The default is 5036, which we should not
change without a very good reason.
•bindaddr: set the IP address to bind to. By default, it will bind to 0.0.0.0,
meaning all available IP addresses.
•amaflags: just as for SIP and Zaptel interfaces, we can set amaflags
for IAX.
•accountcode: as for SIP and Zaptel interfaces, we can set an account code to
be used for billing purposes.
•language: we can specify a language. If omitted, Asterisk will default
to English.
•bandwidth: we can specify a level of bandwidth. This will automatically set
which codecs can and cannot be used. The valid choices are "low", "medium", and "high".
•Codec selection: just as in sip.conf. We can disallow all codecs, and only allow the codecs that we want to permit. If we use allow=all, it is the same as using bandwidth=high.
•jitterbuffer: this allows us to configure our jitter buffer. We should leave it at jitterbuffer=no unless our network is unusually jittery because of the added latency that using buffers will typically create.
59
Configuring Asterisk
•trunkfreq: we can set the number of milliseconds between trunk messages.
The default of 20 ms should be good enough for most installations.
•register: just as in sip.conf, we can register with a remote server. If our
username is "johndoe", and our password is "foo", and we want to register with reallycoolhost.com, then the statement would look like
register=>johndoe:foo@reallycoolhost.com.
•tos: here we set our TOS bits. Valid choices are "lowdelay", "throughput",
"reliability", "mincost", and "none". Usually "lowdelay" is desirable.
Now that we have set our options in the general section, we need to define users. We can see that it is very similar to the way we configured SIP. One difference between the SIP and IAX protocols is that IAX will support RSA public/private key encryption, along with the MD5 and plaintext authentication methods. If we choose to use RSA authentication, then we must put the keys in /var/lib/asterisk/keys/. All public keys must end with .pub, while private keys will end with .key.
There are a few options that can be set per user entry, in addition to the settings mentioned above. They include:
•type: just as in SIP, we can have "user", "peer", or "friend".
•auth: can be "md5", "plaintext", or "rsa".
•inkeys: name of the key file or files to use, with a colon between each
acceptable public key for RSA encrypted authentication.
•outkey: name of the private key file to use for RSA-encrypted authentication.
•secret: the password to use.
•notransfer: if set to "yes", this will disable IAX's ability to use
native transfers.
•Security: much like the allow/disallow pair for codec selection, we can use permit/deny directives for IAX connections.
o deny: list of all IP addresses and blocks to not allow access from. If we enter "0.0.0.0/0.0.0.0", then all access will be blocked.
o permit: list of all IP addresses (as individual addresses or blocks) to permit access from. If we enter "192.168.1.100/ 255.255.255.255", then the user at 192.168.1.100 will be permitted access.
•qualify: we set this to "yes" when we want to make sure a user's device is
connected before attempting to send calls to it.
•trunk: we set this to "yes" to use IAX trunking. Trunking refers to putting
multiple phone calls in the same stream to save the overhead of packaging each conversation individually. If we will often have multiple conversations in progress with the same host (i.e. another Asterisk server uses this account), then it is a good idea to set trunk=yes.
60
Chapter 4
Now we have enough information to create all of our IAX users, we will go through an example. Suppose we have a user who will be on extension 2000, with a password of 2000iscool. This is a hardware IAX phone, and as such, will be dynamic and be of the friend type. The user will be permitted to make long-distance telephone calls, and their telephone will send the correct caller ID name and number, and we will trust it. This user is only permitted to connect from our local subnet, which is the class C address of 192.168.1.0.
[2000]
type=friend
secret=2000iscool
host=dynamic
defaultip=192.168.1.200
callerid=asreceived
context=longdistance
deny=0.0.0.0/0.0.0.0
permit=192.168.1.1/255.255.255.0
We can now go through our listed devices and make similar entries for any of our terminal devices of the type of IAX.
Voicemail
Asterisk provides a voicemail program called Comedian Mail. Through /etc/asterisk/voicemail.conf, we can configure global options for our voicemail system as well as define different voicemail boxes.
In the configuration file, we first have our general options:
[general]
The first setting we get to decide on is how to write the voice files as they are recorded. The default is usually OK:
format=wav49|gsm|wav
Next, we get to set up email notification. Comedian mail will allow us to notify users of new messages via email, and optionally, we can attach the voice files directly to the message. This is the reason we select wav49 as a format above, as most computers will be able to play the files. We choose the email return address and whether we will attach the voicemail to the email with serveremail and attach respectively. We can also choose the display name that the email comes from, by setting fromstring. If we need to, we can also override the email sending program, in the mailcmd variable.
serveremail=asterisk@mydomain.tld fromstring=Asterisk PBX attach=yes mailcmd=/usr/bin/sendmail -t
61
Configuring Asterisk
Now we need to set some limits on messages. We will define maxmessage, which is the maximum length, in seconds, of a voicemail message. The variable minmessage is similar, in that it is the minimum length, in seconds, of a voicemail message. We also set maxgreet, which is the maximum length our users can record for a greeting, again measured in seconds. Through maxsilence, we set how many seconds of silence we accept before ending the recording. Thus, we could set:
maxmessage=180
minmessage=3
maxgreet=45
maxsilence=5
These are not the only variables for controlling the general behavior of Comedian Mail. We also have skipms, which defines the number of milliseconds to move ahead or back when fast forwarding and rewinding the message, maxlogins, which sets how many failed attempts users can have in one session before being disconnected, and silencethreshold, which allows us to configure what the system will consider to be silence. For the silence threshold, the smaller the number, the lower ambient noise will have to be before it is recognized as silence. To continue our example, we could have:
skipms=2000
maxlogins=3
silencethreshold=128
There are more options available for us to change the body of the email, notify external programs of new voicemail messages, change our character set, and a whole host of other options; however, the default settings should work in most installations. If they do not meet our needs, we can configure them at any time.
Now that we have configured the general options, we have the option of creating timezone messages. This is how we let Comedian Mail know what it should say when telling users about when messages arrived. For instance, if we lived in the Central timezone, we would have:
[zonemessages]
central=America/Chicago|'vm-received' Q 'digits/at' IMp
Each timezone is defined in /usr/share/zoneinfo/. Just find a city in the desired timezone to define the zone message.
Finally, we have to define actual mailboxes. We have to place each mailbox in a context. This context should be the same as the context that the users' extension will appear in, and if possible, the voicemail box should be the same as the extension of the user. The format for the configuration line is:
voicemailbox => password,username,emailaddress,pageraddress,options.
62