Asterisk

## Inštalácia

### Ze source

Ze source sa to dá kompilovat tiéž, já ale na to serem, lebo tie veci sú tak modulárne, že sa s tým jebať netreba.

Ak to už čovek ale kompilovat chce, tak aspoň cez nejaký už existujúci source port. Gentoo, alebo pkgsrc, ne?

### Binary balíky

#### CentOS/RHEL

Já uznávam len RPM repositorá, tié sa dajú neoficiálne nájt, keď čovek dost tvrdo kuká, hlavne ten rumun má tuším volačo pre CentOS.

#### OpenWRT

```
opkg update

```

A potom podla toho, čo máme, najlepšié najnovší Asterisk, ale to závisí aj od toho, aký máme hardware, pre novšie

Asterisk 13

```
opkg install asterisk13

```

ale staršie routre, hlavne tié čo nemajú až tak veľa RAM

```
opkg install asterisk18

```

Tam mýli vyššie číslo, ale v skutočnosti tým je myslený Asterisk 1.8

### Konfigurácia

Já to robím najprv teraz tak, že si skopírujem /etc/asterisk do /etc/asterisk\_config

```
cp -r /etc/asterisk /etc/asterisk_config

```

A potom je tiež dobrý nápad upraviť práva

```
chown -R asterisk:asterisk /etc/asterisk_config

```

Ak má group asterisk permissions na write do tých konfiguračiék, tak potom si móže čovek usera jebnút do asterisk skupiny a tým pádom sa móže prámo skrz neho menit konfigurácia

```
usermod -a -G asterisk janopalo2

```

Toď som použil ako príklad užívatela janopalo2, to je samozrejme iba exampleuser.

#### Init script

Tu je problém, že keď idem používať vlastnú konfiguráciu, tak mosím ten init script podla toho nastavit, aby bral

```
-C /etc/asterisk_config/asterisk.conf

```

V /etc/asterisk\_conf/asterisk.conf mosí ale byt aj etcfolder byť jebnutý na /etc/asterisk\_conf/, aby bral ostatné konfiguračky tiež odtál.

Keďže máme user a v skupine (okrem iných skupín samozrejme) asterisk, tak móžeme aj zariadiť to, že sa tento user bude mócť do asterisk konzoly dostať skrz asterisk -C /etc/asterisk\_config/asterisk.conf , áno, to mosi byt aj na "klientovi" nastavené, čiže na to by bol dobrý alias:

```
alias asterisk="asterisk -C /etc/asterisk_config/asterisk.conf -r"

```

Na to, aby to šecko fungovalo, mosí byť v /etc/asterisk\_config/asterisk.conf nakonfigurované

```
 [files]
 mode=660
 user=asterisk
 group=asterisk

```

Alebo tak nejak...

### SIP

#### Úvod

Keď sa do teho asterisku už dostaneme a vyhádzali sme nepotrebné moduly v modules.conf, ale aj bez toho, móžeme sa posunút smerom riéšeniá SIP userov.

Tam si treba položit otázku, že teda do sa prihlasuje k nám a kemu sa prihlasujeme my.

Vychádzam teraz z default konfigurácie, de šecko ide cez UDP. Samozrejme, dá sa spravit aj cez TLS, ak má čovek vygenerované SSL certifikát a key.

#### Provider

Nášmu providerovi sa prihlásime, aby vedel, že de nás nájde skrz:

```
register => udp://nasuser:naseheslo@voipprovider.kapitalista:5060/nastelefon

```

Teraz ten hajzel kapitalistický vié, že de nás nájde, ak nám niekdo sce zavolat. Ale ešte to nevié asterisk, to sa konfiguruje v peeroch:

```
[voipprovider]
context=venku
type=peer
host=voipprovider.kapitalista
port=5060
remotesecret=naseheslo
defaultuser=nasuser
fromuser=nasuser

```

#### Telefón

Naše telefóny sa ale prihlasujú k nám, spoločne s týpkami, kerý sa k nám prihlasujú, na to treba vygenerovať tiež peerof, ale teraz ako firendof:

```
[ciscotelefon]
context=doma
type=friend
host=dynamic
secret=nejakeheslo

```

Keďže sa registruje k nám, tak mosí byť host=dynamic, aj keď viéme, akú IP adresu má. To nevadí, môžeme to riešiť ACLkami a nehat povoliť jeho ako telefón prihlásiť len z jednej IP. Tým spôsobom, aj keď by niekdó došól na to, aké je heslo, bolo by mu nahovno, lebo by nebol v správnej sieti.

```
contactdeny=0.0.0.0/0
contactpermit=192.168.0.0/16

```

alebo

```
contactacl=mojetelfony

```

#### Context

Context je dóležitá súčast security (ak nie jediná security časť) Asterisku, kerá nám dáva možnosť limitovať peerov na určité extensie/telefónne čísla.

Tak zabezpečíme napríklad, že hajzel kapitalistický "venku" móže dosiahnuť naše telefóny, lebo mu to explicitne povolíme, aby sa k nám bolo možné dovolať, ale niekdo z jeho IP adresy, lebo ón sa k nám neregistruje, nemóže volať na náš účet, lebo to dokážu len telefóny, keré su v kontexte "doma".

### RTP a Firewall

V rtp.conf nájdeme, že aké proty otvára, keď ideme kecať, čiže tié by mali byť vo firewalli otvorené:

```
iptables -A INPUT -p udp --dport $rtpstart:$rtpend -j ACCEPT

```

alebo tak nejak...

Samozrejme, aj náš SIP port by mal byť otvorený, aspoň pre tých, s kerýma sceme kecať

```
iptables -A TCOM -p udp --dport 5060 -j ACCEPT

```

Tu vychádzam z toho, že chain TCOM je vytvorený, ako napríklad skrz:

```
iptables -N TCOM

```

a do neho idú telefonistické IP adresy

```
iptables -A INPUT -s $telekomv4/15 -j TCOM

```

alebo tak nejak...

### Dialplán

Tu sa stretávame zas s našima kontextámi a to vyzerá asi tak, že dialplán mosí byť pridelený contextu, resp naopak, každý context má vlastný dialplán. Čiže v našej príkladovej konfigurácii potrebujeme aspoň dva dialplány, pre každý náš context doma a venku. Lepšie je ale mat ich viác, aby sa dali volania ešte granulárnejšié kontrolovať, napr by mohli byť ďalšie kontexty

* deckaa
* ukecanaa\_dcera
* babka\_klebetnicka
* zena\_radodajka
* jehovovi\_svedkovia

a podobne

No a tod naše príkladové dialplány

```
[doma]
exten => _421XXXXXXXXXXXX.,1,Dial(SIP/voipprovider/${EXTEN})
exten => 35435,1,Dial(SIP/ciscotelefon)
exten => 35000,1,Dial(SIP/dcera&SIP/zena&SIP/babka) # SOS

[venku]
exten => nasetelefonnecislo,1,Dial(SIP/ciscotelefon)
exten => dcerinecislo,1,Answer()
      same => n,Play("DoNotTalkToMyDaughterEverAgain.mp3")
      same => n,Hangup()

```

A tak dalej...

Pre srandu tu este jebnem ten dialplán jehovovych svedkov, podla známeho vtipu:

```
[jehovovi_svedkovia]
exten => nasetelefonnecislo,1,Answer()
      same => n,Play("CoChcete.mp3")
      same => n,Play("Silence2seconds.mp3")
      same => n,Play("KolkiSte.mp3")
      same => n,Play("Silence2seconds.mp3")
      same => n,Play("TakSaRozpravajte.mp3")
      same => n,Hangup()

```

Samozrejme by na to bolo treba aj v kontexte "venku" nejaki GoTo, kerý by matchol telefonne cislo na jehovovi\_svedkovia\_blackiste. Ale to je out of scope tod.