文庫本買った。ジュラシック・パーク シリーズ

比較的新しい文庫だと思っていたが、かなり前の文庫ですね。
書店で探しても無いはずです。




RasPi2 Asterisk iptables

これまでの作業で内線通話が可能になりました。
会議室も使えるようになりました。
しかし、外線発信が出来ていません。
そこで、先日契約した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で攻撃を防御出来るようなるとのことです。

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

心臓僧帽弁弁膜症について

実は、昨年 心臓の手術をしました。

表題のとおり、弁膜症の手術です。手術は胸骨正中切開で施術してもらった。

ポートアクセスとか、小さな切開で行える手法もあるらしいが、あまり感心はなかった。

とにかく、無難に手術を終えることが出来る方法を選択した感じ。

自己弁を可能な限り温存し、壊れた部分を修復する形成術で施術してもらった。

病気発覚から約10年 どうにも普段の歩行や階段の昇降がつらく、いよいよダメかという状態での手術でしたが、時期的には心臓が大きくなり始めのいい時期に手術でき、術後 若干肥大した心臓は日に日に元の大きさに戻り、なんとか日々を過ごしていました。

術後 3ヶ月ほどは自宅療養し 仕事復帰して2週間ほど経過した頃、動機、息切れが酷くなった。
心タンポナーデを発症。緊急オペで心嚢穿刺、心嚢水ドレナージをしてもらった。
この穿刺がとんでもなく痛い、激痛です。なんども心嚢穿刺をされている方もいらっしゃるようですが、慣れてくるんでしょうかね?

心タンポの診断施術後、2週間ほど(入院は1週間ほど)で仕事に復帰した。

現在 術後9ヶ月経ったわけですが、一昨日 お風呂(術前から湯船に浸かるのはしんどいから、ずっとシャワー)から上がって、かなり調子が悪くなった。
いつものしんどさと明らかにちがう。

不安になり翌日 主治医に見てもらった。
検査は、聴診、脈拍、心電図、心エコーといつものセットだった。
術前に心エコーをして貰ったときや、心タンポで心エコーをしていただいた時のように、先生はいつもとは違う表情でエコー機材を見てはった。

なんか「やばそーやなー」と思った。

結果的に

今すぐ”どうこう”と言うことはないが、若干 血液の逆流が再発している。

とのことだった。正直 ショックを隠せなかったが、それを察したように、

この程度なら問題は、全くない。

と言ってくれた。

5月中頃に大学病院での定期検査なので、その時に施術した先生にも相談するつもり。

余談ですが、下の2冊は実際に購入してよく読みました。事前に少しは自分上病気を知っておくことも重要ですから。

RasPi2 Asterisk 050plus 収容

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

RasPi2 Asterisk CLI について

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