アーカイブ

‘RasPi’ カテゴリーのアーカイブ

RasPi2 Zabbix

2015 年 5 月 8 日 コメントはありません

RasbianOSをインストールしたRasPi2にZabbixをインストールしてみる。
インストールはapt-getで入れる。

# apt-get install zabbix-server-mysql zabbix-frontend-php zabbix-agent
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
  apache2 apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common dbconfig-common fping
  heirloom-mailx javascript-common libaio1 libapache2-mod-php5 libaprutil1-dbd-sqlite3
  libaprutil1-ldap libdbd-mysql-perl libdbi-perl libhtml-template-perl libjs-prototype
  libjs-scriptaculous libmysqlclient16 libmysqlclient18 libonig2 libopenipmi0 libqdbm14 lsof
  mysql-client-5.5 mysql-common mysql-server mysql-server-5.5 mysql-server-core-5.5 php5 php5-cli
  php5-common php5-gd php5-mysql snmpd ssl-cert wwwconfig-common
提案パッケージ:
  apache2-doc apache2-suexec apache2-suexec-custom virtual-mysql-client mysql-client
  postgresql-client exim4 mail-transport-agent php-pear libipc-sharedcache-perl
  libterm-readkey-perl tinyca openssl-blacklist
推奨パッケージ:
  mailx
以下のパッケージが新たにインストールされます:
  apache2 apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common dbconfig-common fping
  heirloom-mailx javascript-common libaio1 libapache2-mod-php5 libaprutil1-dbd-sqlite3
  libaprutil1-ldap libdbd-mysql-perl libdbi-perl libhtml-template-perl libjs-prototype
  libjs-scriptaculous libmysqlclient16 libmysqlclient18 libonig2 libopenipmi0 libqdbm14 lsof
  mysql-client-5.5 mysql-common mysql-server mysql-server-5.5 mysql-server-core-5.5 php5 php5-cli
  php5-common php5-gd php5-mysql snmpd ssl-cert wwwconfig-common zabbix-agent zabbix-frontend-php
  zabbix-server-mysql
アップグレード: 0 個、新規インストール: 40 個、削除: 0 個、保留: 0 個。
23.0 MB のアーカイブを取得する必要があります。
この操作後に追加で 132 MB のディスク容量が消費されます

かなりたくさんのパッケージが入ります。
初期設定を聞かれます。
最初は、mysqlのroot password
raspi-mysql
続いてパスワードの確認が行われます。
raspi-mysql2
続いて、dbconfig-commonで管理できるよう、「はい」を選択しました。
先ほど設定したmysql passwordを入力します。
raspi-zabbix1
つづいて、mysql zabbix DBのパスワードを設定します。空欄で勧めるとランダムでパスワードが設定されるようです。
ここでは、自分でパスワードを設定します。
raspi-zabbix2
zabbix-frontend-phpのパスワードを聞かれます。
raspi-zabbix3
確認でもう一度 パスワードを入力します。
raspi-zabbix4
インストールが完了すると最低限WEB LOGINが可能になるようです。
http://raspi2/zabbix/
初期ID:admin
パスワード:zabbix
無事 zabbixのインストールが完了しました。
ここから設定に移っていきます。

まず、Zabbix本体の設定から。
Localeを日本語に
ProfileからLanguageをJapanese (JP)に変更する。

監視データを見ると、PHPあたりが注意されているので、php.iniを変更します。

/etc/php5/apache2/php.ini

post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = Asia/Tokyo

php.iniの変更が終われば、apacheを再起動する。

# /etc/init.d/apache2 restart

ダッシュボードのphp関連の注意が無くなりました。

設定-ホストを見てみます。
Zabbixをインストールしたホストが登録されています。
しかし、ステータスが無効になっていますので、有効にします。
無効をクリックすると有効になります。
無効に戻したい場合は、もう一度クリックですね。

細かな設定は後にして、ホストを追加してみます。
追加するホストは、RTX1200です。
テンプレートが転がっていたので、拝借します。
動作するかはわかりませんが・・・
zbx_export_templates_RTX1200.xml  使えなかった

Temp_RTX1200.xml 有り難く頂戴いたしました。
設定-テンプレートからインポートします。
raspi-zabbix5
インポート済 成功
と表示されたので、インポートは問題無いようです。
続いて、RTX1200をホストに追加します。
設定-ホスト-ホストの作成
名前、グループ、新規ホストグループ、DNS名、IPアドレス、接続方法、Zabbixエージェントのポート等 設定します。
テンプレートをRTX1200テンプレートにリンクします。

とりあえず、RTX1200が登録できたので、ダッシュボードに戻り、軽微な障害を直していきます。

カテゴリー: Linux, RasPi タグ:

RasPi2 Asterisk iptables

2015 年 4 月 29 日 コメントはありません

これまでの作業で内線通話が可能になりました。
会議室も使えるようになりました。
しかし、外線発信が出来ていません。
そこで、先日契約したOCNモバイルに付いている050plusを使いたいと思います。
もちろん、LTEを使って外から050plus回線を使うわけですから、セキュリティ的には十二分に注意を払わなければなりません。
まず、

  1. 050plusの契約を国際電話は利用できないよう設定しています。
  2. iptablesを使って、国内IPからのみ接続可能とします。
  3. iptablesのログを監視し、fial2BANで弾く設定をする。

今、これくらいしか思いつきません。

さて、iptablesですが正直今まであまり利用したことがありません。

基本RTX1200ですべて弾いていたものですから。

iptables

iptablesはdefaultでインストールされていますが、iptables-persistentをインストールします。

# apt-get install iptables-persistent

iptables-persistentをインストールすれば、boot時 自動的にruleを復元してくれます。

国外IPのはじき方
国外IPは国別のIP ADDRESS一覧を掲載してくれているところが多々ありますが、
今回は、http://www.ipdeny.com/を利用します。

国内限定と言ってもたくさん有るので、scriptで処理します。
JP_INPUT_OK.sh

ZONE_FILE_URL="http://www.ipdeny.com/ipblocks/data/countries"

#http://www.ipdeny.com/ipblocks/data/countries/jp.zone

for IP in $(wget -O - http://www.ipdeny.com/ipblocks/data/countries/jp.zone | grep -v "^#|^$" )
do
  iptables -A INPUT -s $IP -j ACCEPT
done

  iptables -A INPUT -s 60.37.58.74 -p udp -m udp --dport 5061 -j ACCEPT
  iptables -A INPUT -p udp -m udp --dport 4000:4009 -j ACCEPT
  iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

国内全てのIPを許可するのは危ないので、
“iptables -A INPUT -s $IP -j ACCEPT”を工夫すればいいでしょう。
また、ACCEPTには050plusのアドレスを別途記載しています。
これ以外は、DENNYしておきます。

fail2banのインストール

# apt-get install fail2ban

asteriskのログフォーマットを変更します。
/etc/asterisk/logger.conf

[deneral]
dateformat=%F %T

この状態だとFROMヘッダが偽装されたfail2banで対応できません。
http://www.voip-info.jp/index.php/SIP-Fail2banにあるpatchを適応することで、

Failed to authenticate user "Anonymous" <sip:anonymous@192.168.1.2>;tag=as105e401c (123.45.67.89:5060)

と表示されるようになり、fail2banで攻撃を防御出来るようなるとのことです。

このあたりの作業は、一番最初に行った作業なので不備間違いが多々あると思います。
よくよく確認しながら作業したほうがいいです。でないと電話代の請求が”どえらい”ことになる。

カテゴリー: RasPi タグ:

RasPi2 Asterisk 050plus 収容

2015 年 4 月 27 日 コメントはありません

asteriskに050plusを収容するには、先日記載したページで取得したID/PASSWORDが必要です。

050plusの通信はsrtpを使っているので、鍵の設定も必要です。

このサイトがわかりやすくて良かったです。

 

鍵の生成

$ sudo mkdir /etc/asterisk/keys
$ cd /etc/asterisk/keys
$ sudo ~/src/asterisk-1.8.32.3/contrib/scripts/ast_tls_cert \
 -C domain.com -O "My PBX" -d .
$ sudo ~/src/asterisk-1.8.32.3/contrib/scripts/ast_tls_cert \
 -m client -c ca.crt -k ca.key -C domain.com -O "My PBX" -d . -o 050plus

sip.conf

;050plus
maxexpirey=3600
defaultexpirey=3600
tlsenable=yes
tlsbindaddr=0.0.0.0
tlscertfile=/etc/asterisk/keys/asterisk.pem
tlscafile=/etc/asterisk/keys/ca.crt
tlscipher=ALL
tlsclientmethod=tlsv1
tlsdontverifyserver=yes
register = tls://[nicNm]:[sipPwd]:[sipID]@[tramGwAd]:[Port]/5075/200 ;← SIP番号の200を050plusに当てました。

[050plus]
type=friend
secret=[sipPwd]
port=5075
defaultuser=[sipID]
fromuser=[nicNm]
host=[tranGwAd]
fromdomain=050plus.com
context=default
insecure=invite,port
dtmfmode=inband
canreinvite=no
disallow=all
allow=ulaw
allowguest=no
callgroup=1
transport=tls
encryption=yes
nat=yes

のような記述になりますが、全て記述しているわけではありません。

extensions.conf

[default]
; 050plus 着信
exten => 200,1,Dial(SIP/201&SIP/202) ;← 内線201、202のみ着信を受ける。
exten => 200,n,Hangup()

; 発信
exten => .,1,Set(Language()=ja)
exten => _2.,1,Goto(naisen,${EXTEN},1)
; 050plus 発信
exten => _0.,1,Goto(outgoing,${EXTEN},1)
exten => _X.,n,Playback(privacy-incorrect)
exten => _X.,n,Hangup()

[naisen]
exten => _X.,1,NoOp(${CALLERID})
exten => _X.,n,GotoIf($["${EXTEN:0:1}" = "8"]?parkedcall)
exten => _X.,n,GotoIf($["${EXTEN:0:1}" = "9"]?voicemail)
exten => _X.,n,GotoIf($["${EXTEN:2:4}" = "99"]?groupcall)

[outgoing]
exten => _[*#0-9].,1,Dial(SIP/${EXTEN}@050plus,30,r)
exten => _[*#0-9].,n,Congestion
exten => _[*#0-9].,n,Hangup()

;/** to ParkedCall
exten => _X.,n(parkedcall),NoOp(${CALLERID})
include => parkedcalls
exten => _X.,n,ParkedCall(${EXTEN})
exten => _X.,n,Playback(pbx-invalid)
exten => _X.,n,Hangup()

;/** to VoiceMail
exten => _X.,n(voicemail),NoOp(${CALLERID})
exten => _X.,n,VoicemailMain(${CALLERID(num)},s)
exten => _X.,n,Hangup()

;/** error - busy
exten => _X.,n(busy),NoOp("---Calling but -BUSY---")
exten => _X.,n,Voicemail(${EXTEN})
exten => _X.,n,Hangup()

;/** error - noanswer
exten => _X.,n(noanswer),NoOp("---Calling but -NOAWNSER---")
exten => _X.,n,Voicemail(${EXTEN})
exten => _X.,n,Hangup()

extensions.confは理解するまで難しいですね。
このまま記述しても動かないと思います。
詳細は、vo-ip infoを見るといいでしょう。

気が向けば、自分なりに理解したsip.confとextensions.confの解説を書いてみたいと思う。

050plus接続確認

*CLI> sip show registry
Host                                    dnsmgr Username       Refresh State                Reg.Time
kar2-f2fcp.050plus.com:5075             N      fmc00000000       3585 Registered           Sat, 25 Apr 2015 15:39:30
カテゴリー: RasPi タグ:

RasPi2 Asterisk CLI について

2015 年 4 月 27 日 コメントはありません

Asterisk CLI

CLIでcore show helpとすれば、CLIで使えるコマンドのヘルプを見ることが出来ます。ただし非常に見にくい。
よく使うコマンドを書いておく。
*CLI> core show help

よく使いそうなコマンドを書いておく

コマンド 動作 備考
! shellの実行
ael reload ael リロード
config reload  config reload config_file
console dial CLIコンソールからダイアル  console dial 201
core reload 全体をリロード
core restart now asteriskを再起動
core restart when convenient
core show application
core show channel
core show codecs[audio/video] codecの表示  core show codecs audio
core show codec  core show codec 1
core show settings  asteriskの設定ファイルの場所などを表示
core show translation
dahdi restart
dialplan reload
module load moduleロード module load module_name
module show [like]
module unload module unoad module_name
moh reload

 

カテゴリー: RasPi タグ:

RasPi2 Asterisk sip.confとextensions.confとmeetme

2015 年 4 月 26 日 コメントはありません

Asteriskの設定ファイルは/etc/asteriskに設置されています。
されていない場合は、source dir で make sample とすれば、/etc/asterisk以下にサンプルファイルが作成されます。

/etc/astersik

:/etc/asterisk# ls
adsi.conf		 cel_pgsql.conf		  func_odbc.conf    queues.conf
agents.conf		 cel_sqlite3_custom.conf  gtalk.conf	    res_config_mysql.conf
ais.conf		 cel_tds.conf		  h323.conf	    res_config_sqlite.conf
alarmreceiver.conf	 chan_dahdi.conf	  http.conf	    res_curl.conf
alsa.conf		 chan_mobile.conf	  iax.conf	    res_fax.conf
amd.conf		 chan_ooh323.conf	  iaxprov.conf	    res_ldap.conf
app_mysql.conf		 cli.conf		  indications.conf  res_odbc.conf
asterisk.adsi		 cli_aliases.conf	  jabber.conf	    res_pgsql.conf
asterisk.conf		 cli_permissions.conf	  jingle.conf	    res_pktccops.conf
calendar.conf		 codecs.conf		  logger.conf	    res_snmp.conf
ccss.conf		 console.conf		  manager.conf	    res_stun_monitor.conf
cdr.conf		 dbsep.conf		  manager.d	    rtp.conf
cdr_adaptive_odbc.conf	 dnsmgr.conf		  meetme.conf	    say.conf
cdr_custom.conf		 dsp.conf		  mgcp.conf	    sip.conf
cdr_manager.conf	 dundi.conf		  minivm.conf	    sip_notify.conf
cdr_mysql.conf		 enum.conf		  misdn.conf	    skinny.conf
cdr_odbc.conf		 extconfig.conf		  modules.conf	    sla.conf
cdr_pgsql.conf		 extensions.ael		  musiconhold.conf  smdi.conf
cdr_sqlite3_custom.conf  extensions.conf	  muted.conf	    telcordia-1.adsi
cdr_syslog.conf		 extensions.lua		  osp.conf	    udptl.conf
cdr_tds.conf		 extensions_minivm.conf   oss.conf	    unistim.conf
cel.conf		 features.conf		  phone.conf	    users.conf
cel_custom.conf		 festival.conf		  phoneprov.conf    voicemail.conf
cel_odbc.conf		 followme.conf		  queuerules.conf   vpb.conf

複雑な多くの設定ファイルがありますが、まず最小設定で内線通話が可能になるよう設定していきます。
問題の切り分けのため、サンプルファイルはmvしておきます。

# cp -r /etc/asterisk /etc/asterisk.org
# mkdir /etc/asterisk
# cd /etc/asterisk

asteriskの音声はRTPで行います。
RTPはIP電話のデジタルデータを元にRTPパケットを構成し、IPネットワークに音声を送出します。IPパケットなので、ポートの指定をします。
今回は、内線のみの運用なのでポート使用は最小限に止めておきます。

rtp.conf

[general]
rtpstart=4000
rtpend=4010

読み込むモジュールの設定
読み込むモジュールの設定は、modules.confを使います。
多くのモジュール設定がありますから、sampleファイルを加工して使います。

# cp /etc/asterisk.org/modules.conf /etc/asterisk/modules.conf
# vi modules.conf

ほとんどのモジュールは、modules.confの

[modules]
autoload=yes

で自動的に読み込まれますから、不要なmoduleは”noload =>module_name”で読み込まないように設定します。

modules.conf

[modules]
autoload=yes
;
noload => pbx_gtkconsole.so
noload => pbx_kdeconsole.so
;
noload => app_intercom.so
;
noload => chan_mgcp.so
noload => chan_skinny.so
noload => chan_phone.so
;
noload => chan_modem.so
noload => chan_modem_aopen.so
noload => chan_modem_bestdata.so
noload => chan_modem_i41.so
noload => chan_misdn.so
;
load => res_susiconhold.so
;
noload => chan_alsa.so
noload => cham_oss.so
;
noload =>app_adsiprog.so
[global]
chan_modem.so=y

SIP電話機(sip client)から接続する際のIDとパスワード等を設定するファイルが、sip.confです。
sip.confを設定しますが、内線のみでテストするので、2台分のIDを登録します。

sip.conf

[general]
maxexpirey=3600
defaultexpirey=3600
content=test
port=5060
bindaddr=0.0.0.0
srvlookup=yes
disallow=all
allow=ulaw
allow=gsm
language=jp
localnet=192.168.1.0/255.255.255.0

[201]
type=friend
username=201
secret=password
canreinvite=no
host=dynamic
dtmfmode=auto
callgroup=1
pickupgroup=1

[202]
type=friend
username=201
secret=password
canreinvite=no
host=dynamic
dtmfmode=auto
callgroup=1
pickupgroup=1

ダイアルプランの作成
ダイアルプランは、何番を回せば、どういった処理をすると言ったことを記述していきます。
運用する上で非常に重要なファイルです。

extensions.conf

[general]
writeprotect=yes

[default]
exten => _20Z,1,Dial(SIP/${EXTEN},60,tT)
exten => _20Z,n,Congestion

ここまで設定が終われば、内線通話が可能になります。
asteriskを再起動するか、CLIで、

*CLI> sip reload
*CLI> dialplan reload

設定をreloadします。

SIP電話で内線の確認が出来れば、保留音と会議室を実装していきます。
保留音は、musiconhold.confを編集します。

musiconhold.conf

[default]
mode=mp3
directory=/var/lib/asterisk/mohmp3
;random=yes

/var/lib/asterisk/mohmp3が無いので、作成して適当なMP3ファイルを配置します。

# mkdir /var/lib/asterisk/mohmp3
# cp hoge.mp3 /var/lib/asterisk/mohmp3/
# chown -R asterisk:asterisk /var/lib/asterisk/mohmp3

会議室の設定
会議室(音声会議)の設定はmeetme.soで実現されます。この機能を利用するためにdahdiを作成したわけです。
設定は、meetme.confを使います。
ここでは、会議室の番号を「300」としました。

記述 意味 定義例
[general]
audiobuffers
audio bufferを設定
音声会議のジッタバッファとして動作
2-32
[room]
conf =>
会議室の設定を定義 会議室番号

[room]

conf => 300,4343 ←4343がPASSWORD

meetme.conf

[rooms]
conf => 300

300をダイアルすれば、会議室に繋がるようextensions.confに書き加えます。

extensions.conに追加

exten => 300,1,Meetme(300)
exten => 300,n,Hangup

すこしmeetme.confの説明を付け加える。
300番をダイアルすると、スグに会議室に繋がるが、誰も接続していない場合、無音になり稼働しているのかわからなくなります。そこで、extensions.confで、
exten => 300,1,Meetme(300|M) ← M を付け加えています。
こうすることによって、会議室に1人しか接続していない場合、保留音が流れるようになります。

ここまでの設定が終われば、asteriskを再起動するか、CLIでreloadします。

reload app_meetme.so
dialplan reload
カテゴリー: RasPi タグ: