Sistemas‎ > ‎Linux‎ > ‎

Asterisk - VOIP

Montando um servidor VOIP com baixo custo.


- Necessita-se de um cartão internacional. Caso não possua, peça um na livraria saraiva, a anuidade é grátis.

- Criar um servidor na Amazon Web Service. Utilizando servidores no plano Spot (Rodando apenas na memória) o custo vai lá em baixo.

- Criar uma conta para terminação voip.



Valor do Investimento (Sem mão de obra)
  Cartão de crédito (Livraria Saraiva) = $0,00 (Anuidade grátis)
  Servidor Amazon (Spot) = $ 0.004/hora ( $0.004 * 24 * 30 = $2.88/mês)
  Terminação Voip Voxbeam (Standard) = $ 0.016/min (Fixo), $ 0.0295/min (Móvel)


Montando um servidor Asterisk na Amazon (ami-3a993c27)

1 - Crie um servidor e atribua um Elastic IP

No exemplo abaixo foi criado um servidor SPOT (somente na memória para teste), Amazon Linux AMI 2013.03.1 - 64bits, com Elastic ip  54.232.214.101, e ip interno 172.31.10.53

2 - Amazon - Atualizar Kernel otimizado para VOIP

# Baseado no "Amazon Linux AMI 2013.03.1 - 64bits"

# yum install gcc make bison ncurses-devel rpm-build

# cd /root
# wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.4.47.tar.xz
# tar -xJf linux-3.4.47.tar.xz -C /usr/src/kernels
# wget https://www.kernel.org/pub/linux/kernel/projects/rt/3.4/patch-3.4.47-rt62.patch.bz2
# bunzip2 patch-3.4.47-rt62.patch.bz2
# mv patch-3.4.47-rt62.patch /usr/src/kernels/linux-3.4.47
# cd /usr/src/kernels/linux-3.4.47
# patch -p1 < patch-3.4.47-rt62.patch
# make clean
# cp /boot/config-`uname -r` .config
# make menuconfig

General setup -> Local version -> "-voip"
Processor type and features -> Preemption Mode -> “Fully Preemptible kernel (RT)”
Processor type and features -> Time frequency -> “1000 HZ”
Device Drivers -> Character Devices -> Enchanced Real Time Clock Support -> M

Ao sair da configuração, será solicitado que você grave as alterações feitas. Responda Yes.

# make rpm   (vai demorar muito, cerca de 3 horas)
# ls -alh /root/rpmbuild/RPMS/x86_64
# rpm -ivh /root/rpmbuild/RPMS/x86_64/kernel-3.4.47_rt62_voip-1.x86_64.rpm
# ls /boot
# depmod 3.4.47-rt62-voip
# mkinitrd -v /boot/initramfs-3.4.47-rt62-voip.img 3.4.47-rt62-voip
# chmod 755 /boot/vmlinuz-3.4.47-rt62-voip

# vi /boot/grub/grub.conf

default=1

(Adicione abaixo da configuração do kernel atual)

title Amazon Linux 2013.03 VOIP (3.4.47-rt62-voip)
root (hd0)
kernel /boot/vmlinuz-3.4.47-rt62-voip root=LABEL=/ console=hvc0
initrd /boot/initramfs-3.4.47-rt62-voip.img

# reboot

3 - Instalando o Asterisk no servidor Amazon

# cp /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime

# vi /etc/security/limits.conf
root            soft    nofile          4096
root            hard    nofile          8196
asterisk        soft    nofile          4096
asterisk        hard    nofile          8196

# yum install gcc gcc-c++ compat-libtermcap sqlite-devel ncurses-devel openssl-devel libxml2-devel unixODBC-devel libcurl-devel

# cd /root
# wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-11-current.tar.gz
# tar -vzxf asterisk-11*.tar.gz

# cd /root/asterisk-11.4.0/contrib/scripts
# ./install_prereq install

# cd /root/asterisk-11.4.0
# ./configure
# make menuselect
# make
# make install
# make samples
# make config
# make install-logrotate

# vi /root/.bash_profile
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib
export PATH LD_LIBRARY_PATH

# asterisk -vvvc
# echo "/usr/sbin/safe_asterisk" >> /etc/rc.local
# yum update

# hostname
# vi /etc/hosts
127.0.0.1 localhost … resultadoDoHostname

# cd /etc/asterisk
# mv sip.conf sip.conf.ori
# mv extensions.conf extensions.conf.ori

asterisk.conf

[options]
internal_timing=yes

logger.conf

dateformat=%F %T

messages => notice,warning,error,security

sip.conf

[general]
port=5060
bindaddr=0.0.0.0
externip=54.232.214.101
localnet=172.31.0.0/255.255.240.0
disallow=all
allow=gsm
allow=ulaw
allow=alaw
allow=ilbc
alwaysauthreject=yes
allowguest=yes
nat=force_rport,comedia
qualify=yes
canreinvite=no
sipreinvite=no
insecure=port,invite

[voxbeam_outbound]
type=peer
defaultuser=voxbeam_outbound
secret=your_asterisk_password
host=sbc.voxbeam.com
context=voxbeam_outbound

[voxbeam_inbound]
type=peer
defaultuser=voxbeam_inbound
secret=your_asterisk_password
host=95.211.119.240
context=voxbeam_inbound

[contato]
fromuser=visitante
defaultuser=contato
context=disca
type=friend
host=dynamic
secret=sua_senha_de_contato


extensions.conf

[general]
TIMEOUT=14400

[disca]
 exten => _3788270766,1,Dial(SIP/voxbeam_outbound/0011103553788270766,40,tT)
  same => n,Set(TIMEOUT(absolute)=${TIMEOUT})
  same => n,HangUp()

 exten => _037XXXXXXXX,1,NoOp(CALLERID: ${CALLERID(all)} EXTEN: ${EXTEN})
  same => n,Set(TIMEOUT(absolute)=${TIMEOUT})
  same => n,Dial(SIP/voxbeam_outbound/001110355${EXTEN:1},40,tT)
  same => n,HangUp()

 exten => _0XXXXXXXXXX,1,NoOp(CALLERID: ${CALLERID(all)} EXTEN: ${EXTEN})
  same => n,Set(TIMEOUT(absolute)=${TIMEOUT})
  same => n,Dial(SIP/001110355${EXTEN:1}@sbc.voxbeam.com,40,tT)
  same => n,HangUp()

 exten => _0XXXXXXXXXXX,1,NoOp(CALLERID: ${CALLERID(all)} EXTEN: ${EXTEN})
  same => n,Set(TIMEOUT(absolute)=${TIMEOUT})
  same => n,Dial(SIP/001110355${EXTEN:1}@sbc.voxbeam.com,40,tT)
  same => n,HangUp()

 exten => 12345,1,Answer()
  same => n,Set(TIMEOUT(absolute)=${TIMEOUT})
  same => n,Wait(2)
  same => n,Playback(hello-world)
  same => n,Record(/tmp/teste.gsm,3,10)
  same => n,Playback(/tmp/teste)
  same => n,HangUp()

 exten => h,1,NoOp(CALLERID: ${CALLERID(all)} EXTEN: ${EXTEN})
  same => n,HangUp()

3 - Configurando Fail2Ban

# cd /root
# wget https://codeload.github.com/fail2ban/fail2ban/tar.gz/0.8.10
# mv 0.8.10 fail2ban-0.8.10.tar.gz
# tar vzxf fail2ban-0.8.10.tar.gz
# cd fail2ban-0.8.10
# python setup.py install

# vi /etc/fail2ban/jail.conf
bantime  = 259200
findtime  = 60

[asterisk-tcp]
enabled  = true
maxretry = 3
bantime  = 259200


[asterisk-udp]
enabled  = true
...
maxretry = 3
bantime  = 259200


# cat /root/fail2ban-0.8.10/testcases/files/logs/asterisk >> /var/log/asterisk/messages
# fail2ban-regex /var/log/asterisk/messages /etc/fail2ban/filter.d/asterisk.conf
# echo "" > /var/log/asterisk/messages
# fail2ban-client start
# echo "/usr/bin/fail2ban-client start" >> /etc/rc.local

Comments