Ubuntu で Wi-Fi を使う

我が家の配線の関係上、どうしてもサーバを無線の先に設置する必要が生じた。
なので今、アクセスが重くなっている。申し訳ない。

さて Ubuntu で Wi-Fi を設定するにあたって、思いきりハマってしまったのでメモを残す。

  1. 入っていなければ、wireless-tools と wpasupplicant を入れておく。
  2. iwconfig で無線チップが認識されているかチェック。no wireless extensions の行しかなければ、認識してないので、次の手順で何とかする。
    1. ドライバを確認する。まずは lspci コマンドで PCI カードやオンボードチップなどが何が搭載されているかチェックする。
    2. lsmod で対応するモジュールが組込まれているかチェックする。オンボードチップの場合、asus_wmiとかacer_wmiとかになってるかも。なかったら、apt-get して insmod するか、ベンダのページからソース落としてきて make する…んだと思うが、今回は認識してたのでよく分からん。
  3. 無線の設定を書く。
    以下は、WPA2-PSK(AES) で SSID をステルスに設定している場合。

    # wpa_passphrase SSID PASSPHRASE(PSKのこと) > /etc/wpa_supplicant/wpa_supplicant.conf
    # vi /etc/wpa_supplicant/wpa_supplicant.conf
    
    ctrl_interface=/var/run/wpa_supplicant
    ctrl_interface_group=0
    ap_scan=1
    network={
            ssid="SSID"
            scan_ssid=1 # ← ステルスモードの時
            #psk="PASSPHRASE"
            psk=************************************************************
            proto=WPA2
            key_mgmt=WPA-PSK
            pairwise=CCMP
            group=CCMP
            priority=2
    }
    
  4. おためしで接続(アソシエート)してみる。(以下は、WLAN I/F が1つしかなくて、そんなに古くない場合。)
    # wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf
    -D 以下は WLAN インターフェースの指定らしく、最近は wext を使うのが一般的っぽい。
  5. うまくいったら、コンソールが返ってこないので、Ctrl+C で落とす。
  6. うまくいくようなら、/etc/network/interfaces を書く。
    auto wlan0
    iface wlan0 inet dhcp
            wpa-driver      wext
            wpa-essid       SSID
            wpa-conf        /etc/wpa_supplicant/wpa_supplicant.conf
    

    私は、wpa-essid を記述していない解説サイトがあって、書き漏らしておりハマっていた。
    だって、wpa-conf の方に書いてあるし、いらんと思うじゃーん。

  7. 後から知ったが、次のコマンドで AP リストが見れる。
    $ iwlist wlan0 scan | grep ESSID

Linux のhosts.allow/deny

hosts.allow/deny をインポートすることができる。
1行1アドレス(IPでもNWでもドメイン名でも)のファイルを配置して、
hosts.allow などで、
sshd: /path/filename
とすればOK

Linuxのロギングについて

logrotate を使う方法。
logrotate は、 cron.daily で実行される。
logrotate の設定は、 /etc/logrotate.conf と /etc/logrotate.d/* に配置。
/etc/logrotate.d/rsyslog あたりを参考に手で書けばOK
空のファイルをrotateして、gzだけ増えていくのを防ぐには、notifempty を指定

rsyslog でログ出力の制御。
rsyslog でログを出力するデーモン等のログを残すか否かの設定は、 /etc/rsyslog.d/* を見る。
service rsyslog restart で反映。

cron の auth.log への出力を抑制

[SOLVED] remove cron from /var/log/auth.log [Archive] - Ubuntu Forums を参照。
答だけ書くと…

bio
December 27th, 2010, 01:42 PM
Don't touch /etc/pam.d/cron, just add the following line before the pam_unix.so call in /etc/pam.d/common-session-noninteractive:
session [success=1 default=ignore] pam_succeed_if.so service in cron quiet use_uid

cron の実行ログが見たければ、 /etc/rsyslog.d 配下の default.conf 的な名前のやつで、 cron の行の頭の コメントアウトを外せば、 /var/log/cron.log 辺りに実行ログが出てくるので、これで十分だと思う。

VPSを使う

転勤が決まったらしいので,引越しに備えてVPSを整えてみた.
お名前.com の VPS が,初期費用がかからず,安価に短期間利用できるので良さげ.
ubuntu 12.04 LTS が選択できるので,小躍りして申し込んだら,ubuntu server ではなく ubuntu desktop であることが分かってゲンナリ.
とりあえず,コンソールエキスパートモードからインストールすることにしたので,手順を軽くメモる.

VPS のインストールディスクを仮想ホストに仕込むところは,公式のヘルプを参照のこと.
起動したら ubuntu desktop のインストーラが起動するところまでは,進んでいることを想定.

  1. 起動してインストール開始.
    • Advanced options
    • Command-line expert install
  2. Ubuntu のインストーラは,上から順に設定していけばいいので簡単.
    • Choose Language
    • English
    • United States
    • en_US.UTF-8
    • ja_JP.UTF-8[space][tab][Enter]
    • en_US.UTF-8
    • Configure the keyboard
    • No
    • English (US)
    • English (US)
  3. ここからは,KVM初体験なので,よく知らない.勘で進める.
    • Detect Network Hardware
    • usb-storage (USB storage)に[*]が入った状態で,[tab][Enter]
    • Configure the network
    • NW設定がどうなっているかなど知らんので,自動でまずはやってみる
      Yes
    • 設定したいホスト名を入力し,[tab][Enter]
    • とりあえず空欄でもいいし,先々つけたいドメインを入れてもいい
    • Choose mirror of the Ubuntu archive
    • ftp
    • http://www.ubuntulinux.jp/ubuntu/mirrors から,ミラーを選択し,まずはFQDNを入力
    • 次に,HTTPで言うところのGETとかPOSTの後ろにつけるパスを絶対パスで指定
    • Proxy設定は知らんので,とりあえずなしで進めてみる
    • Download installer components (これはちょー時間かかる)
    • load-cdrom
    • Detect and mount CD-ROM
    • なんかエラーがでて,以降はだいたい ubuntu server のインストールと同じ.

インストールコンポーネントのとこは,なんか省略できる気がする.
これ終わった後,isoイメージを抜いて再起動かけても,なかなかコンソールに画面が表示されなくて焦るが,起動が遅いだけなので我慢すること.
とりあえずコンソールからssh-serverを入れて,鍵とか一通り共有したら,あとはssh経由で頑張ること.

SquirrelMail で web メール導入

IMAP サーバを Web メールの SquirrelMail から叩く設定.
ubuntu の場合,apt-get から入れることができる.
しかしその場合,いらんパッケージもセットでついてきて鬱陶しいので,SquirrelMail の tarball を拾ってきて,導入することにした.
この場合,root 権限の必要な場所に設置する必要すらないので,ユーザーディレクトリに設置することも可能である.

他のモバイル向けテーマも実装した Web メールを導入したかったが,何やら色々とパッケージが必要そうなのでやめた.
モバイルからは K-9 メールで直接 IMAP を叩くことにした.

事前準備

  • 必須の準備
    • web サーバを準備する
    • PHP を導入する
    • IMAP サーバを導入する.
  • ついでの準備
    • web サーバを SSL 対応させる.

SquirrelMail の展開

SquirrelMail - Webmail for Nuts! から,tarball を落とす.
展開してでてくるディレクトリ内の doc ディレクトリの INSTALL を読めば,基本的には OK のはず.
/var/local に置けとかゴチャゴチャ書いてあるが,さっくり無視して /home 配下に置く.

SquirrelMail の設定

カレントディレクトリを配置した squirrelmail のフォルダとする.
./config/conf.pl をコマンドラインから実行する.

  • D からサーバのソフトウェアを選択すると,簡単に設定をインポートしてくれるらしい.
    対した設定を読み込んでくれないので,手で設定してもいいと思う.
  1. Organization Preferences は,個人用途では設定しなくても問題なし.
  2. Server Settings は,設定する.
    1. Domain は,自ドメインを持ってたら設定する.でもどこでこれが使われるかは不明.
    2. Invert Time は,メール送信の時に時刻がズレたら(18時間ズレる),設定すると良いらしい.私のサーバでは,設定不要だった.
    1. Update IMAP Settings で,IMAP サーバの設定を変更する.
      7 の TLS は,SSL のこと(本来,TLS が標準).
      8 の Server software は,上記の D と違って,ここで選んでも設定をインポートしてくれない.でも気持ち悪いのでちゃんと選んでおく.
    2. Update SMTP Settings で,SMTP サーバの設定を変更する.
      7 で SMTP 認証の方法を自動検知する選択肢があるが,私の場合はうまく動作せず,応答が返ってこなくなってしまった.メッセージにもあるように,使わない方がいいかも.
  3. Folder Defaults は,D オプションで設定されていれば,ほとんど変更不要のはず.
    Bcc で運用する私みたいな人は,7 とか 8 あたりは不要.
    17 は,フォルダ削除時に Trash を迂回するか否かの設定.false で Trash に格納.
  4. General Options は,1 や 2 のディレクトリ設定を相対パスにするくらい.
  5. Language preferences は,文字コードを iso-2022-jp にしただけでは文字化けが完全に回避されない.言語を ja_JP とすること.

SSL の設定

SNI でホスト名を分ける場合は,/etc/apache2/sites-enabled の VirtualHost に設定を追記する.
これは詳しくは過去の記事(apache2 の設定メモ)を参照のこと.
SSL なしでのアクセスを拒否する場合,squirrelmail を設置したディレクトリに .htaccess を追加して,SSLRequireSSL と記載する.

fetchmail/procmail

せっかく,dovecot でサーバを立てたので,分散しているメールを集約してみる試み.
dovecot の設定は,こちらを参照のこと→dovecotの設定 | hadacchi blog

準備

dovecot が maildir を使って動いている環境は準備すること.
ここに,何らかの手段で pop したメールを振り分けて入れれば終わり.
自動的にポーリングし,フィルタしてローカルの Maildir に配送する手段は,わりと限られている.
今回は,かつて使っていた fetchmail/procmail を使うことにした.
他の選択肢としては,getmail を使う方法もあるけど,今回の場合はどちらにせよ procmail の設定が必要なので,わざわざ mua を変える理由がなかった.
もっと無駄だけど簡単なやり方としては,Sylpheed みたいな mua を使って pop したメールを振り分け機能で振り分けても同じことはできる.
他にも,とにかく pop する機能がついていれば,何でも良い.

fetchmail の設定

ちゃんとドキュメントを読めば,結構簡単に設定できる.
man の他は,ここを参考にした → fetchmailrc - 揮発性のメモ
というか,ほとんどそのまんまになってしまった.
続きの記事にも目を通しておいた方が良いかも → fetchmailrc 注意事項 - 揮発性のメモ

# 管理者
set postmaster LOCALUSERNAME

# no bouncemail エラーメールを管理者に送信する
# bouncemail    エラーメールを差出人に返送する
set no bouncemail

# デーモン時のログファイル
set logfile "/PATH/fetchmail.log"

# メールのチェック間隔(秒)
set daemon 600

# no spambounce  スパム差し戻しを返送しない
# spambounce     スパム差し戻しを返送する
set no spambounce

# -------------------------------------
defaults
  protocol pop3

  #----- サーバオプション
  # no uidl  未読チェックをサーバ側でつける (デフォルト)
  # uidl     未読チェックをクライアント側でつける
  uidl

  #----- ユーザオプション
  # keep     既読メールを削除しない
  # no keep  問い合わせ後にサーバ上の既読メールを削除する (デフォルト)
  no keep

  # flush     問い合わせ前にサーバ上の既読メールを削除する
  # no flush  既読メールを削除しない (デフォルト)
  no flush

  # no fetchall  未読メールのみの取り込み (デフォルト)
  # fetchall     全メールの取り込み
  fetchall

  # mimedecode     MIMEデコードする
  # no mimedecode  MIMEデコードしない (デフォルト)
  no mimedecode

# -------------------------------------
poll SERVERADDR1 proto pop3
        user    "USERNAME1"
        pass    "PASSWORD1"
        mda     "/usr/bin/procmail -m /PATH/SERVER1.procmailrc"

# -------------------------------------
poll SERVERADDR2 proto pop3
        user    "USERNAME2"
        pass    "PASSWORD2"
        mda     "/usr/bin/procmail -m /PATH/SERVER2.procmailrc"
        ssl

だいたいこんな感じ.
daemon モードで起動するには,fetchmail -d 600 とかする.
起動時に自動で daemon モードで起こしたい場合,root で使うなら /etc/default/fetchmail で daemon=yes とかで良いと思う.
ただしこの場合,/etc/fetchmailrc が必要.
ユーザー権限の場合,cron で @reboot fetchmail -d 600 とかするのが簡単.
.fetchmailrc は 700 に指定しておかないとエラーを吐いて動かないので注意.

久々に man 読むと,勉強になる.port という指定は古いぜ,って書かれていた.今はserviceで指定するらしい.

procmail の設定

fetchmailrc の mda で procmail を指定すると,.procmailrc とかに従って振り分けされる.
ただし今回は,宛先を見て振り分けるのが難しいので(Bcc で配送されたメールを振り分けられない),
procmail -m procmailrc_file と指定する方法を取る.
Maildir の場合,配置先の文字列の最後を「/」で終わらないといけないので注意.
procmailrc_file の例はこんな感じ.
単にサブディレクトリに突っ込む場合.

MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/.INBOX.SERVER1/
LOGFILE=$MAILDIR/SERVER1.log

振り分けする場合.

MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/.INBOX.SERVER2/
LOGFILE=$MAILDIR/SERVER2.log

:0 H
* ^From:.*(address1@host\.domain|address2@host\.domain)
.INBOX.SERVER2.From/

:0 H
* ^FROM_MAILER
.INBOX.SERVER2.DAEMON/

:0 H
* ^TO:.*address3@host\.domain
.INBOX.SERVER2.To/

man procmailrc とか読むと,^TO とか ^FROM_MAILER とかの正規表現が書かれているので,必要に応じてどうぞ.

Ubuntu 管理系の tips

知らんかったことをメモる.

linux-image は,新しいものを入れても古いものが残る.
apt-get autoremove で昔は消えていたが,最近は消えないらしい.
dpkg -l | grep linux-image として,出てくる 2つ前までのものは remove で消しても良いかも.
今のカーネルは,/proc/version を見るか,uname -r

apt による管理では,remove しても,設定ファイルが残る.
設定ファイルも消す時は,purge

その他の設定は,Ubuntu Server で単純にパッケージを削除しても設定ファイルは残る、残った設定ファイルを一括削除するには? | レンタルサーバー・自宅サーバー設定・構築のヒント を参考にすると良いかも.

dovecotの設定

  • apt-get install dovecot-imapd
    でインストール
  • /etc/dovecot/dovecot.conf へ listen = * を追記
  • /usr/share/dovecot/protocols.d/imap.protocol は protocols = imapがあればOK
    (dovecot 1.x とは異なり,2.x では pops とか imaps はプロトコル名として定義されていない)
  • conf.d/10-master.conf で,imaps のみ有効にしたい時は,imap-login の inet_listener imap でport=0と指定する.
    pop3 を殺す時は,inet_listener pop3-login のブロックを丸ごとコメントアウトすると共に,service pop3 のブロックもコメントアウトする.
  • conf.d/10-ssl.conf で,ssl = yes としつつ,cert,key,ca を指定する. "<" を path の直前に入れるのを忘れがちなので注意.
    ssl_key にパスワード付の鍵を使う場合,ssl_key_password で指定できる.
  • 必要に応じて,conf.d/10-logging.conf にログファイルを指定.基本的には,log_path を指定しておけばOK
  • その他,メモ
    • imapd: IMAPサーバ
    • sieve: メール振り分けの規格…らしい
    • lmtpd: メール配送プロトコル…らしい

cram-md5 を指定すると,何故かうまく動作しなかったので入れてない.md5 関連の何かパッケージが入ってないのだと思うけど,面倒くさいので放置.ssl でいいよ.

今後やりたいことは,

  • ローカルメール配送も dovecot にさせる
  • imaps 内で plain で認証かけている場合,本当に平文が流れていないかパケットキャプチャ

sshd 設定メモ

設定したものの中で知らなかったものや,設定してないけど man を読んで気になったものをメモ.
ssh v1 は使ったことないので,知らない.

設定項目 意味とか
Port セッションを受け付けるポートの指定.複数行記述することで,複数のポートで待てる.
UsePrivilegeSeparation sshの子プロセスの権限をユーザー `sshd' (yesの時) とするか,`root' (noの時) とするか.
LoginGraceTime ログインプロセスのタイムアウト.これ以上時間が経過してもユーザー名とか入れなかったら落ちる.
StrictModes 鍵の置いてあるところ (/home) の o に w 権限が付与されていたら拒否する.
RSAAuthentication ssh v1 の RSA 公開鍵認証の許可.
PrintMotd /var/run/motd の中身をログイン時に表示するか否か.yes だと表示するが,ログインメッセージが 2回表示されてしまう場合があるらしい.
TCPKeepAlive (ssh の man より)
(ClientAliveCountMax の項より) The TCP keepalive option enabled by TCPKeepAlive is spoofable.
(TCPKeepAlive の項より) Specifies whether the system should send TCP keepalive messages to the other side. If they are sent, death of the connection or crash of one of the machines will be properly noticed. However, this means that connections will die if the route is down temporarily, and some people find it annoying.
つまり,暗号化セッションの外で ack を投げる設定であって,途中経路で 1 回途絶えたら落ちて,ack の乗っ取りができるというもの.
ClientAliveCountMax (ssh の man より)
If this threshold is reached while client alive messages are being sent, sshd will disconnect the client, terminating the session. (中略) The client alive messages are sent through the encrypted channel and therefore will not be spoofable.
つまり,この数だけ ack が落ちたら切断するよ.TCPKeepAlive と違って乗っ取りされませんよ.という keepalive のこと.
ClientAliveInterval ClientAliveCountMax で言う ack が落ちる,の定義秒.
MaxStartups 認証セッションの許可数.x:y:z の形式で指定するもので,x セッションまでは 100% 受け付けるが,x+1 セッションからは確率 y で拒絶し,z セッションに達するまで拒絶率が線形に増加し,z セッションに達した後には全てのセッションを拒絶する,というパラメタ.
MaxAuthTries 1回の接続における認証のリトライ数の上限.
MaxSessions ssh は 1 接続で複数セッションを貼って通信ができ,その上限.具体的に,どのように動作に効いてくるかは不明…

あんま設定を載せたくないので,具体的にどうしてるかは秘密だけど,かなり固めに設定したと思う.
毎回,設定後に sshd を restart して,再接続を試験する時は緊張するぜ…勿論,既設のセッションは 1 つは残してテストするけど…接続できなくなった時の事を考えると怖い.