2015年9月18日金曜日

Outlook for iPhone不審なアクセス

V1.3.8 Outlook for iPhoneでIMAP接続の設定をすると下記のようなログが表示された。

Sep 18 09:41:52 hogehoge.jp postfix/smtpd[54336]: connect from ec2-54-148-7-237.us-west-2.compute.amazonaws.com[54.148.7.237]
Sep 18 09:41:54 hogehogejp postfix/smtpd[54336]: verify password: AUTH LOGIN: authentication succeeded for user=xxxxxxxxxxxxxxxxxxxxxxxx
Sep 18 09:41:55 hogehoge.jp postfix/smtpd[54336]: disconnect from ec2-54-148-7-237.us-west-2.compute.amazonaws.com[54.148.7.237]

dovecotのログにもある。

# grep mailinglist /Library/Logs/Mail/mail-info.log
Sep 18 09:41:44 imap-login: Info: Login: user=<xxxxxxxxxxxxxxxxxxxxxxxx>, method=LOGIN, rip=54.148.7.237, lip=xxx.xxx.xxx.xxx, mpid=2170, TLS
Sep 18 09:41:45 imap(pid 2170 user xxxxxxxxxxxxxxxxxxxxxxxx): Info: Disconnected: Logged out in=9 out=490
Sep 18 09:41:57 imap-login: Info: Login: user=<xxxxxxxxxxxxxxxxxxxxxxxx>, method=LOGIN, rip=52.24.116.112, lip=xxx.xxx.xxx.xxx, mpid=2170, TLS
Sep 18 09:41:57 imap(pid 2170 user xxxxxxxxxxxxxxxxxxxxxxxx): Info: Disconnected: Logged out in=9 out=490

2015年9月13日日曜日

Mac OS XでVPNをログインなしで自動接続する方法

VPNで固定IPを手に入れたのは良いが、再起動したり切断されたりした場合、最接続してくれなくて困った。 ググったらそれっぽいのはあるのだが、ユーザーがログインしないと実行されないとか、Apple Scriptを利用するというものばかりだった。というかどこかのサイトが発祥で、それをコピペに近い状態でブログに転載しているのが多かったので新しい発見ができたサイトがあまりなかった。

とりあえず自分がしたいことは:
・ 起動時にLANに接続していたら、VPNへ自動で接続、ログインする必要無し。
・ 切断されたら最接続する。
・ apple scriptはよくわからないから使わない。
ということである。

自分で作ってしまうのが手っ取り早そうなので、作ってみた。下記のコードをvpn-connect.shというスクリプトを/etc/に作成。コードは下記の通り


#!/bin/bash
vpn="INTERLINK" #vpn名を入力。自分の環境に合わせる
localip="192.168.24.3" #ローカルIPアドレスを入力。固定IPにすると良い。自分の環境に合わせる

#modified from /etc/rc.common
CheckForNetwork()
{
    local test

    if [ -z "${NETWORKUP:=}" ]; then

#ここは$localipをgrepにて抽出し、1行以上あった場合NETWORKUPを-YES-に設定する。
#ここのgrep $localip 部分をを変更することでいろんな条件に変更できる。

        test=$(/sbin/ifconfig -a inet 2>/dev/null | grep $localip | wc -l)
        if [ "${test}" -gt 0 ]; then
            NETWORKUP="-YES-"
        else
            NETWORKUP="-NO-"
        fi
    fi
}

CheckForVPN()
{
    local test

    if [ -z "${VPNUP:=}" ]; then
#vpnに接続しているかを確認する
        test=$(/usr/sbin/scutil --nc status "$vpn" | sed -n 1p)
        if [ "${test}" = "Connected" ]; then
            VPNUP="-YES-"
        else
            VPNUP="-NO-"
        fi
    fi
}

# http://superuser.com/questions/358513/start-configured-vpn-from-command-line-osx
# を参考にする

#ここではVPNに接続したことを確認する。(20秒ほど)

isnt_connected() {
   /usr/sbin/scutil --nc status "$vpn" | sed -n 1p | grep -qv Connected
}

poll_until_connected() {
 let loops=0 || true
 let max_loops=200
 while isnt_connected "$vpn"; do
  sleep 0.1
  let loops=$loops+1
  [ $loops -gt $max_loops ] && break
 done
 [ $loops -le $max_loops ]
}

#ここから実行される
#ネットワークが起動しているかを確認する
CheckForNetwork
if [ "${NETWORKUP}" = "-YES-" ]; then
#ネットワークが起動していたら、VPNが接続しているかを確認
 CheckForVPN
 if [ "${VPNUP}" = "-NO-" ]; then
  #vpnが接続していなかったら、つなげる
  dt=$(/bin/date)
  echo "$dt: CONNECTING TO $vpn" 
  /usr/sbin/scutil --nc start $vpn
  if poll_until_connected "$vpn"; then
   echo "Connected to $vpn!"
   exit 0
  else
   echo "NOT CONNECTED"
   exit 1
  fi
 fi
fi 

これは一度実行するだけのコマンドであり、監視するわけではない。 次はlaunchdで上記スクリプトを実行し、1分単位で再実行する。 ログは/tmp/vpn-connect.outに書き出される。必要であればパスを変更してほしい。 下記コードを/System/Library/LaunchDaemons/jp.blogspot.r3wt3d.vpn-connect.plist という名前のファイルで(まあ名前はなんでも良い)保存する。
(2015/9/17 見直して全面的に書き直し)以前のものだとログがすごいことになるので、書き直した。
ただ実行毎にコンソールログに


2015/09/17 21:46:52.580 com.apple.xpc.launchd[1]: (jp.blogspot.r3wt3d.vpn-connect) Service only ran for 0 seconds. Pushing respawn out by 60 seconds.

と表示されまくるのが気に食わないが、10秒に一度表示されるよりは良いだろう・・・


<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

 
        Label
        jp.blogspot.r3wt3d.vpn-connect
        Program
        /etc/vpn-connect.sh
        KeepAlive
        <true/>
        RunAtLoad
        <true/>
        ThrottleInterval
        60
        StandardOutPath
        /var/log/vpn-connect.out
 

下記コマンドを実行する(その後再起動する必要はない)か、再起動をすれば良い。

launchctl load /System/Library/LaunchDaemons/jp.blogspot.r3wt3d.vpn-connect.plist
参考: launchd.info

2015年9月10日木曜日

OS X Server 4.x (Yosemite) のメールサーバーでキャッチオールアカウントを設定する方法

もともとメインがLinuxのサーバー構築なんだけれど、自分のサーバーにActiveSyncをオープンソースで構築するのが面倒で、メールサーバーがPush非対応だった。
すでに動いているのでなかなか手をつけれないからどうしようかな、Exchangeサーバーでも作って家で鯖立てようかなとか思ったんだけど、小さいPC買わないといけないからお金もったいないなとか思っていたら、Mac Miniがあることを思い出した。BootcampでWindows Server 2012でも突っ込んでExchangeにしようかなと思ったけどれど、MacはServer OSになんと2400円程度で変更できる。さらに調べたらAPNsとかいう素敵機能があるじゃない。うちはもうiOS端末しかないからこれでいいなということで、サクッとお金払ってメール構築。OCNなので固定IPが高かったり、色々ポートふさがれてそうだったりするので、VPNで固定IPをもらえるInterlinkのMyIPを利用することにした。

あらよあらよと物の10分程度でメールサーバー完成。Pushも動いているようで、すげーなAppleとか思っていたんだが、いつも全メールを受信する設定(これをcatch-all accountと言う)にしているのだがその設定方法がわからない。どういうことかというと、@の前の部分がなんであれ受信するアカウントを作る。これにより、bounceを起こさなくなる。また、サイトへ登録するとき等にメアドの名前部分を登録したサイトにしておけば、SPAMメールの流出元がわかるというメリットがある。

詳しく調べてみると、OS X Server 4.0はpostfixをMTAとして使っているようだ。
コマンドラインでつらつらと設定を書くのは簡単だが、ここはMACなのでGUIでできないか調べたところ、aliasは現在ユーザー設定のメールに書くことになっているらしい。
試しにメールアドレスに*@domain.con とか入れてテストメールを送ってみたがbounce。本来は@domain.con と@の前に何も入れないのだが、どうも無理なようだ。
そこで仕方なくvirtual_usersを編集してpostmapでハッシュテーブルを再構築してみたが、このファイルは自動で生成されているようでここに書いても無駄になるよとかいてある。そこで目をつけたのがvirtualという設定ファイル。どうやらなににも使われていないファイルでハッシュDBファイルもない。純正postfixの名残りか?
ということでこのファイルを利用しよう。

まずはrootになる。
sudo su -
と入力してパスワードを入力すればシェルのプロンプトが#に変わる。
次にvirtualを編集する。編集は好きなので行えばいいが自分はviを利用している。

# vi virtual

@domain.con hogeuser

と記入して(domain.conとhogeuserは各自の環境に揃える)保存する。

次にハッシュデータベースを作る

# postmap virtual

これでvirtual.dbというファイルができているはずだ。できていなかったらvirtualへフルパスでかいてみるといい。
これだけだとvirtual.dbが利用されているかどうかわからないので調べてみたら、やはり使われていないようだ。

main.cfの中を見ていくと

virtual_alias_domains = $virtual_alias_maps hash:/Library/Server/Mail/Config/postfix/virtual_domains
virtual_alias_maps = $virtual_maps hash:/Library/Server/Mail/Config/postfix/virtual_users

と書かれている。$virtual_mapsという変数があるのだが、これをサーチしてもファイルには書かれていないのでこれを利用することにした。

virtual_maps = hash:/Library/Server/Mail/Config/postfix/virtual

このように行を追加してから保存する。

そして最後に

メールをOFF/ONしてやればいい。コマンドでどうやるのか不明。
# systemadmin stop mail
# systemadmin start mail
でできること確認(2015/9/17)

しかしOS X Server 4.0なかなかよくできている。再起動しないでサーバーになってしまうのだから驚いた。