習うより慣れるtcpdump 3.3ウェイハンドシェイクを目視する

以下のエントリの続きです。

keikmobile.hatenablog.com

Cent OS6.5で以下の2ゲストOSを立ち上げています。

fe01 "Front End01" 192.168.33.11 telnetコマンドを使用して、TCPクライアントとして使用。 be01 "Back End01" 192.168.33.21 ncコマンドを使用して、TCPサーバーとして使用。

tcpdumpでの3ウェイハンドシェイクの確認

be01側のホスト上で以下のコマンドを実行します。

$  nc -l 23456

別ターミナルで、be01側のホストで、以下のコマンドを実行します。

$ sudo tcpdump -nn -i eth1 port 23456

fe01側のホスト上で以下のコマンドを実行します。

$ telnet 192.168.33.21 23456
Trying 192.168.33.21...
Connected to 192.168.33.21.
Escape character is '^]'.

tcpdumpを実行したホストのターミナルの以下の箇所を確認します。

IP 192.168.33.11.44325 > 192.168.33.21.23456: Flags [S]
IP 192.168.33.21.23456 > 192.168.33.11.44325: Flags [S.]
IP 192.168.33.11.44325 > 192.168.33.21.23456: Flags [.]

上記は、以下の情報を示します。

src > dst: flags 
src:送信元IP.ポート
dst送信先IP.ポート
flags:フラグ S (SYN), F (FIN), P (PUSH),  R  (RST),  W (ECN  CWR) ,  E  (ECN-Echo),  ‘.’ (no flags)の組み合わせ

さらにこの状態でbe01にて以下のコマンドを実行するとコネクションが確立( ESTABLISHED)されていることが確認できます。

$ netstat -n | grep 23456
tcp        0      0 192.168.33.21:23456         192.168.33.11:44325         ESTABLISHED 

習うより慣れるtcpdump 2.TCPサーバー・クライアント

習うより慣れるtcpdump 2.TCPサーバー・クライアント

習うより慣れるtcpdump 1.準備 - A MEMORANDUM PAPER LOG

上記エントリの続きです。前回インストールしたncコマンドをtcpサーバーとして、telnetコマンドをtcpクライアントとしてTCP接続を行います。

Cent OS6.5で以下の2ゲストOSを立ち上げています。

  • fe01 "Front End01" 192.168.33.11 telnetコマンドを使用して、TCPクライアントとして使用。
  • be01 "Back End01" 192.168.33.21 ncコマンドを使用して、TCPサーバーとして使用。
[fe01 TCP Client] <--> [be01 TCP Server]

TCPサーバー起動

be01側のホスト上で以下のコマンドを実行します。

$  nc -l 23456

※ nc: Address already in useの出力があった場合は、port(23456)を変更してください。

TCPサーバーの確認

以下の確認手順は、ncコマンド実行中のターミナルとは別のターミナルで、be01ホストに接続して実行します。

netstatコマンドで先程のncプロセスが23456 portでLISTEN(待ち受け状態)していることを確認します。

$ netstat -anp | grep 23456
tcp        0      0 0.0.0.0:23456               0.0.0.0:*                   LISTEN      2389/nc 
$

TCPクライアント接続

fe01側のホスト上で以下のコマンドを実行します。

$  telnet 192.168.33.21 23456
Trying 192.168.33.21...
Connected to 192.168.33.21.
Escape character is '^]'.

TCPクライアント接続の確認

以下の確認手順は、telnetコマンド実行中のターミナルとは別のターミナルで、fe01ホストに接続して実行します。

netstatコマンドでtelnetプロセスが192.168.33.21の23456 portとESTABLISHED(TCP接続確立状態)になっていることを確認します。

$ netstat -anp | grep 23456
tcp        0      0 192.168.33.11:37243         192.168.33.21:23456         ESTABLISHED 2438/telnet         
$ 

be01ホスト上からも同様の確認をします。

$ netstat -anp | grep 23456
tcp        0      0 0.0.0.0:23456               0.0.0.0:*                   LISTEN      2476/nc             
tcp        0      0 192.168.33.21:23456         192.168.33.11:37243         ESTABLISHED 2476/nc             
$ 

TCP接続の切断。

fe01ホスト上のtelnetをCtrl+]キーでエスケープし、一旦接続を切断します。

$ telnet 192.168.33.21 23456
Trying 192.168.33.21...
Connected to 192.168.33.21.
Escape character is '^]'.
^]

telnet> quit
Connection closed.
$ 

次回よりtcpdumpコマンドを実際に使用していきます。

習うより慣れるtcpdump 1.準備

習うより慣れるtcpdump 1.準備 目的

Vagrant MULTI-MACHINE 複数VM - A MEMORANDUM PAPER LOG

上記のエントリで作成したVagrantのMULTI-MACHINE環境で、tcpdumpを実行しながらtcpdumpの使い方を解説していきます。

環境

ソフトウェア バージョン 備考
Vagrant 1.6.3 -
VirtualBox 4.3.12 -

Cent OS6.5で以下の2ゲストOSを立ち上げています。

  • fe01 "Front End01"

    • IP: 192.168.33.11
    • memory: 512M
  • be01 "Back End01"

    • IP: 192.168.33.21
    • memory: 512M

パッケージインストール

準備として、それぞれのホストに以下のパッケージをインストールします。

tcpdump nc telnetをインストール。

※ ncはtcp server、telnettcp clientとして使用します。

$ sudo yum -y install tcpdump nc telnet

インストールされたことを確認する。

$ rpm -qa | egrep 'tcpdump-|nc-|telnet-'
telnet-0.17-47.el6_3.1.x86_64
tcpdump-4.0.0-3.20090921gitdf3cb4.2.el6.x86_64
nc-1.84-22.el6.x86_64
$ 

iptables 無効化

tcpdumpの使い方の解説にて、任意のportにアクセスするためiptablesを無効化します。

※ 外部からのアクセスの無い検証用等のサーバを想定しています。

$ sudo service iptables stop

無効になったことを確認します。

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    

その他使用コマンド

その他以下のコマンドを使用します。

  • ip (又はifconfig)
  • ss (又はnetstat)

Vagrant MULTI-MACHINE 複数VM

Vagrant MULTI-MACHINE 複数VM

Vagrant boxes作成 Virtualbox Cent OS 6.5 - A MEMORANDUM PAPER LOG

上記のエントリで作成したbaseboxを使ってVagrantでMULTI-MACHINE(複数VM)構成として起動します。

環境

ソフトウェア バージョン 備考
Vagrant 1.6.3 -
VirtualBox 4.3.12 -

Vagrantfile

以下はVagrantで一つのbaseboxから、MULTI-MACHINE(複数VM)構成として起動するサンプルです。 本サンプルは、以下の2VMで構成しています。

  • fe01 "Front End01"
    • IP: 192.168.33.11
    • memory: 512M
  • be01 "Back End01"
    • IP: 192.168.33.21
    • memory: 512M

gista864d342090bdcd2ecb3

Vagrantfileの各設定の詳細は以下。

MULTI-MACHINE(複数VM)構成のテスト

起動。status確認。sshでのLogin。

$ vagrant up
$ vagrant status
以下の出力が確認出来ること。
fe01                      running (virtualbox)
be01                      running (virtual box)
$ vagrant ssh fe01
$ vagrant ssh be01
それぞれsshでLogin可能なこと。

Vagrant boxes作成 Virtualbox Cent OS 6.5

Vagrant boxファイル作成 Virtualbox CentOS 6.5

VagrantのCentOS6.5のboxファイルをVirtualboxで作成します。

環境・前提条件

ソフトウェア バージョン 備考
Vagrant 1.6.3 -
VirtualBox 4.3.12 -
Cent OS 6.5 最小構成でインストール

OSイメージの取得サイト例。

Base Box(CentOS 6.5)作成

以下を参考にBase Boxを作成する。

Virtualbox GUI設定

  • Virtualboxを起動する。

  • メニューから[仮想マシン]->[新規]を選択する。ツールバーより、[新規]を選択する。

  • 名前とオペレーションシステム: 以下を設定する。
項目
名前 basebox_centos(任意の名前)
タイプ Linux
バージョン Red Hat(32bit or 64bit)
  • メモリーサイズ: 512MBを設定する。
  • ハードドライブ: 仮想ドライブを作成するを選択する。
  • ハードドライブのファイルタイプ: VDIを選択する。
  • 物理ドライブにあるストレージ: 可変サイズを選択する。
  • ファイルの場所とサイズ: 以下を設定する。
項目
場所 basebox_centos(任意のフォルダ)
サイズ 8G以上(任意のサイズ)
  • 作成されたbasebox_centosにカーソルを合わせ、メニューから[仮想マシン]->[設定]を選択する。またはツールバーより設定を選択する。
  • [ストレージ]->[コントローラー: IDE]->[CD/DVDデバイスの追加]を選択し、OSイメージ(CentOS-6.5-x86_64-minimal.iso)を選択。
  • [オーディオ]->[オーディオの有効化]のチェックを外す。
  • [ポート]->[USB]->[USBコントローラーの有効化]のチェックを外す。
  • [ネットワーク]->[アダプター1]->[ネットワークアダプターを有効化]のチェックを確認。割り当てが”NAT”を確認。高度をクリックし、[ポートフォワーディング]を選択。以下の値で新規ルールを追加する。
項目
名前 ssh
プロトコル TCP
ホストIP 127.0.0.1
ホストポート 2222
ゲストIP 10.0.2.15
ゲストポート 22

Cent OS インストール

  • basebox_centosにカーソルを合わせ、メニューから[仮想マシン]->[起動]を選択する。またはツールバーより起動を選択する。ここより先はCent OSインストーラーに従いインストールする。
  • “Welcome to CentOS 6.5!”の画面では”Install or upgrade an existing system”を選択する。
  • インストレーションメディアのテストは”Skip”を選択する。
  • “Welcome to CentOS 6.5!”で”OK”を選択する。
  • “Language Selection”で”English”を選択し、”OK”を選択する。
  • “Keyboard Selection”で”jp106”を選択し、”OK”を選択する。
  • “Warning Error processing drive”で”Re-initialize all”を選択する。
  • “Time Zone Selection”で”Asia/Tokyo”を選択し、”OK”を選択する。
  • “Root Password”で”vagrant”を入力し”OK”を選択する。
  • “Partitioning Type”で”Use entire drive”を選択し、”OK”を選択する。
  • “Writing storage configuration to disk”で”Write change to disk”を選択する。
  • “Complete”で”Reboot”を選択する。

SSH接続までの初期設定

  • VirtualboxコンソールにLoginプロントが表示されるので、root passwordでLoginする。
  • eth0の設定ファイルを編集する。
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
---
以下を編集
ONBOOT=yes # no => yes
  • 設定の反映のため、ネットワークの再起動
# service network restart
  • eth0のstateがUPであることを確認する。
# ip a
  • ターミナルからsshで接続
$ ssh root@127.0.0.1 -p 2222

ssh接続が失敗する場合は、Virtualbox GUI設定のネットワークのポートフォワーディング設定を見直す。

vagrant user 設定

  • vagrant グループ・ユーザの作成。パスワードの設定。
# groupadd vagrant
# useradd -g vagrant vagrant
# passwd vagrant
  • vagrantユーザをpasswordなしでsudoできるようにし、requirettyを無効化する。
# visudo
---
以下をコメントアウト。
#Defaults    requiretty
---
以下を末尾に追記。
vagrant ALL=(ALL) NOPASSWD: ALL
  • sudoの確認
# su - vagrant
$ whoami
vagrant
$ sudo whoami
root
$ mkdir ~/.ssh
$ chmod 0700 ~/.ssh
$ curl -L -o ~/.ssh/authorized_keys  https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub
$ chmod 0600 ~/.ssh/authorized_keys

VirtualBox Guest Additions インストール

  • VirtualBox Guest Additionsに必要なパッケージのインストール
$ sudo yum -y update
$ sudo yum -y install gcc kernel-devel perl
$ sudo reboot
  • Virtualboxのメニュー[Devices]->[install Guest Additions CD image]を選択。

  • VirtualBox Guest Additions インストール

# su - vagrant
$ sudo mkdir -p /mnt/cdrom
$ sudo mount -r /dev/cdrom /mnt/cdrom
$ sudo /mnt/cdrom/VBoxLinuxAdditions.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 4.3.12 Guest Additions for Linux............
VirtualBox Guest Additions installer
Copying additional installer modules ...
Installing additional modules ...
Removing existing VirtualBox non-DKMS kernel modules       [  OK  ]
Building the VirtualBox Guest Additions kernel modules
Building the main Guest Additions module                   [  OK  ]
Building the shared folder support module                  [  OK  ]
Building the OpenGL support module                         [  OK  ]
Doing non-kernel setup of the Guest Additions              [  OK  ]
Starting the VirtualBox Guest Additions                    [  OK  ]
Installing the Window System drivers
Could not find the X.Org or XFree86 Window System, skipping.
$ 
  • shutdown
$ sudo shutdown -h now

boxファイル作成

  • HOST OSのVirtualBox VMディレクトリでboxファイルを作成する。
$ cd ~/VirtualBox\ VMs/
$ vagrant package --base basebox_centos --output basebox_centos65.box
$ file basebox_centos.box

作成したboxのテスト

  • 作成boxファイルを Vagrant に登録する。
$ vagrant box add centos65 basebox_centos65.box
  • vagrantでの起動。ログインの確認。
$ vagrant init centos65
$ vagrant up
$ vagrant ssh

IMAPコマンド

IMAPコマンド

前回構築したdovecotIMAPコマンドを確認します。 http://keikmobile.hatenablog.com/entry/2014/05/12/テスト用dovecot_インストール

Any State Commands

以下のコマンドは、いずれの状態でも有効なコマンドです。

CAPABILITY
  • サーバがサポートする機能一覧を表示する。
  • 引数なし。
a001 CAPABILITY
* CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN
a001 OK Capability completed.
NOOP
  • 何もしない。サーバのauto logoutタイマーはリセットされます。
  • 引数なし。
a001 NOOP
a001 OK NOOP completed.
LOGOUT
  • ログアウトする。
  • 引数なし。
a001 LOGOUT
* BYE Logging out
a001 OK Logout completed.

Not Authenticated State Commands

以下のコマンドは認証されていない状態で有効なコマンドです。

STARTTLS
  • 暗号通信への切り替えを要求する。
  • 引数なし
a001 STARTTLS
a001 OK Begin TLS negotiation now.
AUTHENTICATE
  • 指定した認証方法でログインする。
  • 引数: 認証方式名
LOGIN
  • ログインする。
  • 引数: ユーザ名 パスワード
a login user password
a OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS] Logged in

Authenticated State Commands

以下のコマンドは認証されている状態で有効なコマンドです。

SELECT
a OK Expunge completed.
a001 SELECT INBOX
* OK [CLOSED] Previous mailbox closed.
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
* 0 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1399824069] UIDs valid
* OK [UIDNEXT 1] Predicted next UID
* OK [HIGHESTMODSEQ 1] Highest
a001 OK [READ-WRITE] Select completed.
EXAMINE
a001 EXAMINE INBOX
* OK [CLOSED] Previous mailbox closed.
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS ()] Read-only mailbox.
* 0 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1399824069] UIDs valid
* OK [UIDNEXT 1] Predicted next UID
* OK [HIGHESTMODSEQ 1] Highest
a001 OK [READ-ONLY] Select completed.
CREATE
a001 CREATE NEW_FOLDER
a001 OK Create completed.
DELETE
a001 DELETE NEW_FOLDER
a001 OK Delete completed.
RENAME
a001 RENAME FOLDER NEW_FOLDER
a001 OK Rename completed.
SUBSCRIBE
a001 SUBSCRIBE FOLDER
a001 OK Subscribe completed.
UNSUBSCRIBE
a001 UNSUBSCRIBE FOLDER
a001 OK Unsubscribe completed.
LIST
a001 LIST "" "*"
* LIST (\HasNoChildren) "." "NEW_FOLDER"
* LIST (\HasNoChildren) "." "FOLDER"
* LIST (\HasNoChildren) "." "INBOX"
a001 OK List completed.
LSUB
a001 LSUB "" "*"
* LSUB () "." "FOLDER"
a001 OK Lsub completed.
STATUS
  • メールボックスのステータスを表示する。
  • 引数: メールボックス名 ステータス名
  • ステータス名: MESSAGES , RECENT, UIDNEXT, UIDVALIDITY, UNSEEN
a001 STATUS INBOX (MESSAGES)
* STATUS "INBOX" (MESSAGES 0)
a001 OK Status completed.
APPEND
a001 APPEND INBOX {10}
+ OK
TEST TEST
a001 OK [APPENDUID 1399824069 3] Append completed.

Selected State Commands

以下のコマンドはメールボックスが選択されている状態で有効なコマンドです。

CHECK
  • 選択中のメールボックスのチェックポイントを要求する。
  • 引数なし
a001 CHECK
a001 OK Check completed.
CLOSE
a001 CLOSE
a001 OK Close completed.
EXPUNGE
  • Deletedフラグがセットされているメッセージ全てを削除する。
  • 引数なし
a001 STORE 1 +FLAGS (\Deleted)  
* 1 FETCH (FLAGS (\Deleted))
a001 OK Store completed.
a001 EXPUNGE
* 1 EXPUNGE
a001 OK Expunge completed.
SEARCH
  • 引数の条件にマッチしたメッセージのシーケンス番号を表示する。
  • 引数: [キャラクタセット] 検索条件
  • 検索条件:
    • ALL: メールボックスの全てのメッセージ
    • ANSWERED: Answeredフラグがセットされているメッセージ
    • BCC : エンベロープBCCを含むメッセージ
    • BEFORE : よりも前の内部日付のメッセージ
    • BODY : メッセージ本文にを含むメッセージ
    • CC : エンベロープCCにを含むメッセージ
    • DELETED: Deletedフラグがセットされているメッセージ
    • DRAFT: Draftプラグがセットされているメッセージ
    • FLAGGED: Flaggedフラグがセットされているメッセージ
    • FROM: エンベロープFROMにを含むメッセージ
    • HEADER: <field-name> : <field-name>ヘッダーにを含むメッセージ
    • KEYWORD : フラグがセットされているメッセージ
    • LARGER : メッセージサイズがより大きいメッセージ
    • NEW: Recnetフラグがセットされておりかつ、Seenフラグがセットされていないメッセージ
    • NOT <search-key>: <search-key>にマッチしないメッセージ
    • OLD: Recnetフラグがセットされていないメッセージ
    • ON: の内部日付のメッセージ
    • OR <search-key1> <search-key2>: <search-key1>かつ<search-key2>にマッチするメッセージ
    • RECENT: Recnetフラグがセットされているメッセージ
    • SEEN: Seenフラグがセットされているメッセージ
    • SENTBEFORE : よりも前のDateヘッダーのメッセージ
    • SENTON : のDateヘッダーのメッセージ
    • SENTSINCE : よりも後のDateヘッダーのメッセージ
    • SINCE : よりも後の内部日付のメッセージ
    • SMALLER : メッセージサイズがより小さいメッセージ
    • SUBJECT : エンベロープSUBJECTにを含むメッセージ
    • TEXT : ヘッダー又はメッセージ本文にを含むメッセージ
    • TO : エンベロープTOにを含むメッセージ
    • UID : で指定されたUIDのメッセージ
    • UNANSWERED: Answeredフラグがセットされていないメッセージ
    • UNDELETED: Deletedフラグがセットされていないメッセージ
    • UNDRAFT: Draftフラグがセットされていないメッセージ
    • UNFLAGGED: Flaggedフラグがセットされていないメッセージ
    • UNKEYWORD : フラグがセットされていないメッセージ
    • UNSEEN: Seenフラグがセットされていないメッセージ
a001 SEARCH ALL
* SEARCH 1 2 3 4 5
a001 OK Search completed (0.000 secs).
FETCH
  • 指定したメッセージ情報を取得する。
  • 引数: シーケンス番号 データアイテム名
  • データアイテム名:
    • ALL: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE)と同じ。
    • FAST: (FLAGS INTERNALDATE RFC822.SIZE)と同じ。
    • FULL: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODY)と同じ。
    • BODY
    • BODY.PEEK
    • BODYSTRUCTURE
    • ENVELOPE
    • FLAGS
    • INTERNALDATE
    • RFC822
    • RFC822.HEADER
    • RFC822.SIZE
    • RFC822.TEXT
    • UID
a001 fetch 1 RFC822
* 1 FETCH (FLAGS (\Seen) RFC822 {9}
TEST TEST)
a001 OK Fetch completed.
STORE
  • メッセージのフラグを変更する。
  • 引数: シーケンス番号 フラグ状態 フラグ名
  • フラグ状態
    • FLAGS : でフラグを置き換える。
    • FLAGS.SILENT : でフラグを置き換える。表示はしない。
    • +FLAGS : のフラグを追加する。
    • +FLAGS.SILENT :のフラグを追加する。表示はしない。
    • -FLAGS : のフラグを削除する。
    • -FLAGS.SILENT : のフラグを削除する。表示はしない。
COPY
a001 COPY 1 INBOX
* 6 EXISTS
* 1 RECENT
a001 OK [COPYUID 1399824069 3 8] Copy completed.
UID
  • COPY、FETCH、STOREコマンドをUIDを指定で実行する。
  • 引数: コマンド コマンド引数(UID)
a001 UID FETCH 3 RFC822
* 1 FETCH (UID 3 RFC822 {9}
TEST TEST)
a001 OK Fetch completed.

テスト用dovecot インストール

テスト用dovecot インストールの目的

テスト用のpop/imap serverが欲しくなったので、dovecotをインストールします。 本インストールの手順は、CentOS6でのpop/imapコマンド及び、pop/imapクライアントのテスト用pop/imap server構築を目的としています。実用的なpop/imapサーバーの構築は目的としていません。

dovecot 概要

dovecotのインストール

WikiのDevcot installationに従いインストールします。 今回は、ビルド済みバイナリ(RPM)をインストールします。

Fedora and RHEL (and CentOS/Scientific Linux/...)なのでyumでインストールする。

$ sudo yum install dovecot
$ rpm -q dovecot
$ dovecot --version

参考: http://wiki2.dovecot.org/FrontPage#Dovecot_installation

メールの配送場所の確認

Maildir形式を使用します。conf.d/10-mail.confに設定します。

$ sudo vi /etc/dovecot/conf.d/10-mail.conf 

    # See doc/wiki/Variables.txt for full list. Some examples:
    #   mail_location = maildir:~/Maildir
    上記サンプルに従い、以下を追記。保存して終了。

    mail_location = maildir:~/Maildir

テスト用のUnixユーザで、以下のコマンドを実行し、ユーザ用メールディレクトリを作成します。

$ mkdir ~/Maildir

参考: http://wiki2.dovecot.org/FindMailLocation

基本設定

基本設定を行います。以下コマンドでconfigurationファイルを場所を確認します。

doveconf -n | head -n1
認証設定

テスト用のユーザで、以下のコマンドを実行し、usersファイルを作成します。 passwordの箇所は変更を推奨です。

$ echo "$USER:{PLAIN}password:$UID:$GID::$HOME" > users

    # usersファイルの各値を確認する。環境変数がとれていない場合等は、以下のコマンドを実行。
    $ echo "`whoami`:{PLAIN}password:`id -u`:`id -g`::$HOME"

$ sudo mv users /etc/dovecot/

passwd-fileを使用するようにconf.d/10-auth.confを変更します。

$ sudo vi /etc/dovecot/conf.d/10-auth.conf 

    # 以下をコメントアウト。
    #!include auth-system.conf.ext

    # 以下のコメントアウトを削除。
    !include auth-passwdfile.conf.ext

conf.d/auth-passwdfile.conf.ext の記述を確認します。

$ cat /etc/dovecot/conf.d/auth-passwdfile.conf.ext 
...
passdb {
  driver = passwd-file
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
}

userdb {
  driver = passwd-file
  args = username_format=%u /etc/dovecot/users
}

以下のコマンドでも同様の結果を得られる事を確認します。

$ doveconf -n passdb userdb 
passdb {
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
  driver = passwd-file
}
userdb {
  args = username_format=%u /etc/dovecot/users
  driver = passwd-file
}

参考: http://wiki2.dovecot.org/BasicConfiguration

dovecot 起動

dovecotを起動します。

$ sudo dovecot

プロセス、ログ、pop port、imap portを確認します。

$ ps auxw | grep dovcot
$ sudo tail -f /var/log/maillog
$ ss -nl | grep '110'
$ ss -nl | grep '143'

参考: http://wiki2.dovecot.org/RunningDovecot,http://wiki2.dovecot.org/Logging

POP/IMAP導通確認

imapの導通

認証設定で作成したユーザで、導通確認します。

  • login
  • select
  • append
  • fetch
  • logout
$ telnet 127.0.0.1 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN] Dovecot ready.
a login USER PASSWORD # 認証設定で作成したユーザでlogin
a OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS] Logged in
b select INBOX
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
* 0 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1399824069] UIDs valid
* OK [UIDNEXT 1] Predicted next UID
* OK [HIGHESTMODSEQ 1] Highest
b OK [READ-WRITE] Select completed.
c append INBOX {9}
+ OK
TEST MAIL
* 1 EXISTS
* 1 RECENT
c OK [APPENDUID 1399824069 1] Append completed.
d fetch 1 rfc822
* 1 FETCH (FLAGS (\Seen \Recent) RFC822 {9}
TEST MAIL)
d OK Fetch completed.
e close INBOX
e OK Close completed.
f logout
* BYE Logging out
f OK Logout completed.
Connection closed by foreign host.
$ 
popの導通

認証設定で作成したユーザで、導通確認します。

  • user
  • pass
  • stat
  • list
  • retr
  • quit
$ telnet 127.0.0.1 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
user USER # 認証設定で作成したユーザでlogin
+OK
pass PASSWORD # 認証設定で作成したユーザでlogin
+OK Logged in.
stat
+OK 1 9
list
+OK 1 messages:
1 9
.
retr 1
+OK 9 octets
TEST MAIL
.
quit
+OK Logging out.
Connection closed by foreign host.
$ 

参考: http://wiki2.dovecot.org/TestInstallation

テスト用dovecotインストール完了。