筆者について
FreeBSDを通じてOSSにささかな貢献を。
- 日本xrdpユーザ会発起人
- xrdp developer
- FreeBSD developer
OSS活動をご支援いただける方を募集しています
2009-07-14 クラウドコンピューティング
■ iPhone のアドレス帳を OpenLDAP で管理する (OpenLDAP導入編)
なんでもオンラインで管理したい病なのでやっちゃいましょう。
サーバは基本的に FreeBSD です。
まず、OpenLDAP Server をインストールします。
# cd /usr/ports/openldap24-server && make install
次に /etc/rc.conf の編集。
# echo 'slapd_enable="YES"' >> /etc/rc.conf
/usr/local/etc/openldap/slapd.conf を編集。とりあえず書き換えるのは以下のところくらい。
suffix "dc=thelefty,dc=org"
rootdn "cn=Manager,dc=thelefty,dc=org"
rootpw {SSHA}aKeZVecq39wD/EVQiSVzxRsuAVMqqOE8
rootpw は slappasswd で生成します。
$ slappasswd
New password:
Re-enter new password:
{SSHA}R2h4fgMhbwZk7hb1ARyBJvuJeLqVSUhC
そして、slapd を起動。
# /usr/local/etc/rc.d/slapd start Starting slapd.
LDAPのツリーを作成します。以下のような内容のファイルを作成。
dn:dc=thelefty,dc=org objectClass:organization objectClass:dcObject o: thelefty.org address book dn: ou=AddressBook,dc=thelefty,dc=org objectClass: organizationalUnit ou: AddressBook
そして登録。
$ ldapadd -x -D cn=Manager,dc=thelefty,dc=org -W -f $INPUTFILE
登録されているか確認します。上のファイルの内容に似たものが出てくればOKです。
$ ldapsearch -x -W -D cn=Manager,dc=thelefty,dc=org -b dc=thelefty,dc=org Enter LDAP Password:
とりあえずこれでLDAPサーバ側の準備は完了。アクセス制限やSSLでの暗号化設定はまたの機会に。
2009-07-16 iPhone OS 3.0
■ iPhone OS 3.0 の Wi-Fi 自動接続
iPhone OS 3.0 になって、Wi-FiアクセスポイントのWeb上でのログインを自動で行ってくれる機能が付いたのは既知のとおりだが、釈然としない点がある。ソフトバンクモバイルのページによると、「インターネットテザリング、Wi-Fiへ自動ログインの機能は、日本では対応しておりません。」というのだ。
インターネットテザリングに対応しないのはキャリアの回線の都合なので許可するか否かや料金の設定はキャリア(国)によって異なるというのは理解できるが、Wi-Fiへの自動ログイン機能が使えるか否かにどの国で使うかが関係あるのだろうか。
納得のいかない点がいくつかあったので、iPhone OS 3.0 の Wi-Fi 自動ログイン機能がどのような仕組みなのか調べてみることにした。
FreeBSDとOpengateで公衆無線LANのような認証を設けたネットワークを構築し、Wi-Fi自動ログインの挙動を調べる。 Opengateではファイヤウォールにipfwを使用しており、未認証の端末の通信には以下のルールが適用される。
60000 fwd 127.0.0.1 tcp from 192.168.16.0/24 to any dst-port 80
要するに未認証の端末の外向き80番へのTCPパケットはすべてOpengateサーバにフォワードされる。フォワードされたHTTPアクセスへはOpengateサーバ上のApacheが応答し、認証ページへリダイレクトする。Apacheのログを調べると、
192.168.16.251 - - [01/Jul/2009:18:17:42 +0900] "GET /library/test/success.html HTTP/1.0" 404 833 "-" "CaptiveNetworkSupport/1.0 wispr" 192.168.16.251 - - [01/Jul/2009:18:18:46 +0900] "GET /library/test/success.html HTTP/1.0" 404 833 "-" "CaptiveNetworkSupport/1.0 wispr"
というログが残っていた。Wi-Fiアクセスポイントに接続すると同時に、
へのアクセスを試み 404 Not Found や 301 などのリダイレクトHTTP応答ならWeb認証のあるアクセスポイントとみなしログイン画面を出すようだ。
Opengateによる認証でも自動ログイン機能のログイン画面が表示されて、ネットワーク設定の画面では「自動認証」のスイッチも現れたが、切断後再接続したときに自動でログインするには至らない。
2009-07-17 SSHは万能?
■ OpenSSH による VPN
OpenSSH を使った簡易 VPN の構築 を参考にSSHでVPNを接続してみたときのメモ。サーバは 7.2-RELEASE、クライアントは 8-CURRENT。
目標状態はまあこんな感じ。
今回は tap デバイスを使ったトンネリングをするので、サーバ・クライアントの両方に tap デバイスが必要です。なければ、作る。ブリッジインターフェイスもあとで使うのでついでに作っておく。
# ifconfig tap0 create # ifconfig bridge0 create
SSH-VPN 用の鍵をあらかじめ作っておき、その鍵でrootでログイン出来るようにしておきます。そして、接続。
client# ssh -oTunnel=ethernet -w0:0 -i /root/.ssh/ssh_vpn example.vmeta.jp
オプションの詳細は man 1 ssh でも見てください。うまく接続できたら、こんな風になってるはずです。
server# ifconfig tap0 tap0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 00:bd:b0:39:c3:00 Opened by PID 73615
client# ifconfig tap0 tap0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 00:bd:8f:37:80:00 Opened by PID 54562
サーバとクライアント間でVPNが確立できたので、VPN回線とサーバ側のネットワークをブリッジで接続します。
server# ifconfig bridge0 addm em0 addm tap0 up server# ifconfig bridge0 bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 72:07:5d:cd:ba:b3 id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200 root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0 member: tap0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> ifmaxaddr 0 port 4 priority 128 path cost 2000000 member: em0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> ifmaxaddr 0 port 1 priority 128 path cost 200000
クライアント側も同様にして、
client# ifconfig bridge0 addm0 vr0 addm tap0 up
client# ifconfig bridge0
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 36:d3:e2:27:4f:d2
id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
member: vr0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 2 priority 128 path cost 200000
member: tap0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 6 priority 128 path cost 2000000
と設定すると、図のようにネットワークがつながります。
接続後のインターフェイスの設定を自動で行うには、上のページの「実際に運用する」あたりに習って設定すればOKです。
手軽に構築できるSSH-VPNですが、常用するには向いてないと思います。
2009-07-21 Mutt Sucks Less
■ muttrc の書き方 (Courier-IMAP PREAUTH編)
前回からだいぶ間が空いてしまいましたが、muttrc の書き方です。
自分のホームディレクトリにMaildirがある状態を想定して、メールボックスにIMAPでアクセスするための設定方法です。予めCourier-IMAPなどをインストールしておく必要があります。
PREAUTHとは予めSSHなどでログインして認証済みの状態でシェルからimapdを起動することで、IMAPプロトコルは標準入出力経由でやりとりすることになります。
$ /usr/local/bin/imapd ~/Maildir * PREAUTH Ready. INFO: LOGIN, user=meta, ip=[127.0.0.1], port=[0], protocol=IMAP
あらかじめ .mutt ディレクトリを作っておき、~/.mutt/muttrc に設定を記述します。
$ ( umask 077 && mkdir ~/.mutt )
muttc の中身はこんな感じ。
# 標準入出力経由でIMAPアクセスするための宣言 set tunnel="/usr/local/bin/imapd ~/Maildir" # INBOX, Sent, Drafts などの場所を指定 set folder="imap://localhost/" set spoolfile="imap://localhost/INBOX" set record="+INBOX/Sent" set postponed="+INBOX/Drafts" # お約束の設定 set hostname="example.jp" set send_charset="iso-2022-jp" set envelope_from="yes" # メールをスレッド順にソート set sort="threads" # SMTPサーバの設定 set smtp_url="smtps://smtp.example.jp:465/" # IMAPとSMTPで別のユーザで認証する account-hook imap://localhost/ 'set tunnel="/usr/local/bin/imapd ~/Maildir"' account-hook smtps:/example.jp:465/ 'unset tunnel' # ヘッダとメッセージのキャッシュ set header_cache=~/.mutt/cache/headers/ set message_cachedir=~/.mutt/cache/bodies/ # IMAPの新着メールを G で受信 bind index G imap-fetch-mail bind pager G imap-fetch-mail
以上がホームディレクトリ内のMaildirを直接IMAPで読むための設定です。 送信者(自分)の名前などはシステムのgecosフィールドの値が使われます。
明示的に設定するには、
set realname="Charlie Root"
と書いておけばOKです。