備忘録とかいろいろ

駆け出しのインフラエンジニアです。自分用のメモです

Windows上のVirtualBoxでCoreOSを動かす

WindowsにインストールしたVirtualBoxでCoreOSを動かす手順のメモ

以下のサイトを参考にした。
http://logicflaw.info/blog/d/entry/coreos_on_windows_without_vagrant


CoreOSイメージのインポート

VirtualBoxubuntuが動いているのでこのマシンで作業していく。

まずVagrant用のboxファイルをダンロードする。

$ wget http://storage.core-os.net/coreos/amd64-usr/alpha/coreos_production_vagrant.box -P /tmp


解凍する

$ sudo tar zxvf /tmp/coreos_production_vagrant.box -C /tmp/
./
./Vagrantfile
./configure_networks.rb
./box.ovf
./change_host_name.rb
./metadata.json
./coreos_production_vagrant_image.vmdk
./base_mac.rb


展開した「box.ovf」と「coreos_production_vagrant_image.vmdk」をwinscp等でwindows上に移動させる。

次に、virtualboxマネージャーの「ファイル」→「仮想アプライアンスのインポート」をクリックし、移動させた「box.ovf」を指定する。

「インポート」をクリックすると仮想マシンが作成される

インポートが終われば、「box.ovf」と「coreos_production_vagrant_image.vmdk」は不要なので削除してOK。

SSHログイン用の鍵を用意

再びubuntuで作業。
vagrantdebパッケージのソースをダウンロード

$ sudo apt-get source vagrant


ダウンロードしたソースから鍵を探す

$ rgrep -l "BEGIN RSA PRIVATE KEY" ./vagrant-1.0.1/
./vagrant-1.0.1/keys/vagrant

見つかったファイルをwindowsに移動させる。

起動、ログイン

インポートしたcoreOSのネットワーク設定をNATからブリッジアダプターに変更し起動する。

IPアドレスが表示されているので、teraterm等のターミナルから先ほどの鍵を使って接続する。
ユーザ名は「core」でパスワードなしでログインする。
f:id:yuusuke1988:20140612200402p:plain
無事ログインできた。

初期設定

タイムゾーンの設定

デフォルトではUTCになっている。
タイムゾーンの設定はtimedatectlコマンドを使用する

$ date
Thu Jun 12 11:34:16 UTC 2014

$ timedatectl status
      Local time: Thu 2014-06-12 11:41:45 UTC
  Universal time: Thu 2014-06-12 11:41:45 UTC
        RTC time: Thu 2014-06-12 11:41:45
       Time zone: n/a (UTC, +0000)
     NTP enabled: no
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a


Asia/Tokyoに変更する

$ sudo timedatectl set-timezone Asia/Tokyo
$ timedatectl status
      Local time: Thu 2014-06-12 20:43:40 JST
  Universal time: Thu 2014-06-12 11:43:40 UTC
        RTC time: Thu 2014-06-12 11:43:40
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: no
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

$ date
Thu Jun 12 20:43:42 JST 2014

docker 0.11のHost networkingを試してみた

dockerの最新版0.11がリリースされたので、
新しい機能のHost Networkingを試した際のメモ。


まずはさくっとアップデートする。

現在のバージョン確認

$ docker -v
Docker version 0.10.0, build dc9c28f


アップデート

$ sudo apt-get install lxc-docker 


バージョン確認。OK。

$ docker -v
Docker version 0.11.1, build fb99f99


http://blog.docker.io/2014/05/docker-0-11-release-candidate-for-1-0/
に書いてある通りに--net=hostを指定してコンテナを起動する

$ sudo docker run -it --net=host ubuntu/base /bin/bash


起動できたのでIPアドレスを確認してみる

root@panda:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:15:5d:0a:d0:05 brd ff:ff:ff:ff:ff:ff
    inet 172.19.10.219/24 brd 172.19.10.255 scope global eth0
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff
    inet 172.17.42.1/16 scope global docker0


今まではコンテナを起動する際に

$ sudo docker run -it -p 8080:80 -p 2222:22 ubuntu/base /bin/bash

のようにしてポートフォワーディングでコンテナの80番ポートや22番ポートにアクセスしていたが、--net=hostを指定することで、コンテナのポートを直接叩くことができるようになる。

SSLサーバ証明書についてのまとめ

仕事でSSLサーバ証明書の作成、更新などを行うことがあるが、
仕組みや機能について漠然としか理解できていないので、まとめてみる。
後半は、自己認証局を立て、証明書を発行する手順と、自己署名証明書の作成手順についての記録。

SSLサーバ証明書の概要

SSLサーバ証明書とは

SSLサーバ証明書とはWebサーバの身分証明書のようなものでCA(Certificate Authority)と呼ばれる認証局が発行する。
誰でもCAになって証明書を発行できるため、必ずしも安全とは限らない。
このため、有力な商用CAが厳格な身元確認などの審査を要する「EV SSL証明書」の発行を行っており、
ブラウザ上の表示も通常とは区別されるようになっている。

SSLサーバ証明書の機能

SSLサーバ証明書は、以下の2つの機能により、インターネット上での情報のやり取りを安全なものにしてくれる。
 ・WebブラウザとWebサーバ間(もしくはサーバ同士)でSSL暗号化通信を行う機能
 ・通信先のサーバの運用組織が実在することを証明する機能

SSLサーバ証明書の種類

大きく分けて以下の3種類の証明書がある。
どちらもSSLによる暗号化は行われるが、証明書の信頼性が異なる。

種類 発行の仕組み
クイック認証SSL
ドメイン認証)
whoisデータベースに登録されている情報をもとに審査が行われる。対象ドメインの所有は証明されるが、組織や個人の実在は証明されない。
組織認証SSL
(組織実在認証)
whoisデータベースでの照会に加え、第三者データベース(帝国データバンクやDUNS)に組織情報の照会を行い、法的に実在している組織であるかを確認する。その後、登録されている代表電話番号に電話を行い、実在確認を経て証明書が発行される
EV SSL
(Extended Validation)
発行申請時に、申請者の印鑑証明書や登記簿謄本などの提出をする。次に、whoisデータベースでの照会に加え、第三者データベース(帝国データバンクやDUNS)に組織情報の照会を行い、物理的に実在している組織であるかを確認する。電話による実在確認を経て証明書が発行される


さらに、以下ような機能がついた証明書もある。

名称 機能
ワイルドカード 1枚の証明書でサブドメインを証明できる。例えば、「*.example.jp」というワイルドカード証明書は「www.example.jp」や「mail.example.jp」といったサブドメインに対しても正当な証明書として使用できる。ただし「*」は必ず1文字以上で置き換える必要があるため、「https://example.jp/」では利用できない。
マルチドメイン 1枚の証明書で複数のドメインを証明できる。通常、サーバのFQDNを「CN(Common Name)」というフィールドに格納するが、このCNは1つしか設定できない。これとは別に「SAN(Subject Alternative Names)」という拡張領域フィールドに別のドメイン名を複数格納することで、複数のドメイン名の証明をすることができる
サイトシール(SSLシール) 証明書によって証明されているドメイン名や有効期限などをWebサイトに表示する機能のこと。クリックすると証明内容を表示する画像が表示される。


一般的なSSLサーバ証明書発行の流れ

SSLサーバ証明書が発行されるまでには一般的に以下のような流れになる
1.Webサーバで秘密鍵を生成
2.秘密鍵を使用してCSRを生成
3.認証局CSRと本人証明データを提出
4.認証局による審査(証明書の種類によって審査項目は異なる)
5.SSLサーバ証明書の発行

SSLサーバ証明書の中身

証明書には以下のような項目が記載されている。
1.Webサーバの情報(識別名)
  ・Country(国コード)
  ・State(都道府県名)
  ・Locality(市区町村名)
  ・Organizational Name(組織名)
  ・Organizational Unit(部署名)
  ・Common Name(コモンネーム)
2.Webサーバの公開鍵
3.証明書発行局名
4.証明書発行局の電子署名
5.有効期間
6.証明書の基本情報
  ・証明書のバージョン(X.509 Ver.3など)
  ・証明書の通し番号
  ・電子署名に使われている暗号化方式


自己認証局での証明書の発行

本来であれば信頼のあるCAで認証してもらうが、今回は自分でCAを構築してみる。
そして構築したCAで作成したCSRに署名を行い、サーバ証明書を作成する

CAの構築

CAの構築にはopenssl付属のCA.shを使用する
CAは/usr/local/ssl/CAに構築する

予めCAの構築ディレクトリを作成しておく

$ sudo mkdir -p /usr/local/ssl/CA


CA.shをCAの作成場所にコピー

$ locate CA.sh
/usr/lib/ssl/misc/CA.sh
$ sudo cp /usr/lib/ssl/misc/CA.sh /usr/local/ssl/CA/


CA.shを修正する

$ sudo vi /usr/local/ssl/CA/CA.sh
CATOP=/usr/local/ssl/CA


同様にopenssl.cnfも修正する

$ sudo vi /etc/ssl/openssl.cnf
[ CA_default ]
#dir        = ./demoCA      # Where everything is kept
dir     = /usr/local/ssl/CA     # Where everything is kept


CA構築の準備ができたのでスクリプトを実行する

$ sudo ./CA.sh -newca
Enter PEM pass phrase: ←パスフレーズを入力
Verifying - Enter PEM pass phrase: ←パスフレーズを再入力
-----
Country Name (2 letter code) [AU]: ←国名
State or Province Name (full name) [Some-State]: ←都道府県名
Locality Name (eg, city) []: ←市区町村名
Organization Name (eg, company) [Internet Widgits Pty Ltd]: ←組織名
Organizational Unit Name (eg, section) []: ←部署名
Common Name (e.g. server FQDN or YOUR name) []: ←サーバのホスト名
Email Address []: ←連絡先メールアドレス

A challenge password []: ←ENTER
An optional company name []: ←ENTER

これでCAの構築は完了。
/usr/local/ssl/CA以下にcacert.pem(認証局の証明書)と
/usr/local/CA/private以下にcakey.pem(認証局秘密鍵)が作成されている。

作成した証明書は以下のコマンドで内容の確認ができる

openssl x509 -in /usr/local/ssl/CA/cacert.pem -text


サーバの秘密鍵を作成する

サーバの秘密鍵は/usr/local/ssl/SERVERに作成する

ディレクトリの作成、パーミッションの変更

$ sudo mkdir /usr/local/ssl/SERVER
$ sudo chmod 600 /usr/local/ssl/SERVER


サーバの秘密鍵の作成

$ sudo openssl genrsa -des3 -out /usr/local/ssl/SERVER/server.key 1024
Enter pass phrase for /usr/local/ssl/SERVER/server.key: ←パスフレーズを入力
Verifying - Enter pass phrase for /usr/local/ssl/SERVER/server.key: ←パスフレーズを再入力


apacheで利用すると、起動時にパスワードを要求されるのでパフレーズを解除しておく

$ sudo openssl rsa -in ./SERVER/server.key -out ./SERVER/server_nopass.key
Enter pass phrase for ./SERVER/server.key:
writing RSA key


鍵の中身を確認するには以下のコマンドを使う

$ sudo openssl rsa -in ./SERVER/server.key -text


CSR(署名要求書)を作成する

同一ホストの自己認証局を利用する場合、CA構築時とまったく同じ内容を入力する必要がある

$ sudo openssl req -new -days 365 -key ./SERVER/server.key -out ./SERVER/csr.pem
Enter pass phrase for ./SERVER/server.key: ←サーバの秘密鍵のパスフレーズ入力
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

A challenge password []:
An optional company name []:


CSRの中身を確認するには以下のコマンドを使う

$ sudo openssl req -in ../SERVER/csr.pem -text


サーバ証明書の作成

CAでCSRに署名をする

$ cd /usr/local/ssl/CA/
$ sudo openssl ca -in ../SERVER/csr.pem -keyfile ./private/cakey.pem -cert ./cacert.pem -out ../SERVER/cert.pem
Enter pass phrase for ./private/cakey.pem:
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y


サーバ証明書Apacheへ設定

まず、Apacheでmod_sslが有効になっているか確認する。

$ sudo apachectl -M | grep ssl

何も返ってこないので有効になっていない

mod_sslを有効にする

$ sudo a2enmod ssl
$ sudo service apache2 restart
$ sudo apachectl -M | grep ssl
   ssl_module (shared)


次にサーバ証明書秘密鍵を設置する

$ sudo mkdir /etc/apache2/ssl
$ sudo mv /usr/local/ssl/SERVER/cert.pem /etc/apache2/ssl/
$ sudo mv /usr/local/ssl/SERVER/server_nopass.key /etc/apache2/ssl/
$ sudo chmod 400 /etc/apache2/ssl/server_nopass.key


サイトの設定

$ sudo vi /etc/apache2/sites-available/default-ssl
   SSLCertificateFile    /etc/apache2/ssl/cert.pem
   SSLCertificateKeyFile /etc/apache2/ssl/server_nopass.key


サイトを有効にし、再起動

$ sudo a2ensite default-ssl
$ sudo service apache2 restart

ブラウザでhttps://(サーバのIPアドレス、またはサーバ名)/ にアクセスする。
ただし、自己認証局を利用して署名したサーバ証明書を利用しているため警告が表示される


自己署名証明書の作成

CAで署名せず、自己署名した証明書を作成することもできる
秘密鍵CSRを作成した後、以下のコマンドを実行する

$ sudo openssl x509 -days 3650 -in ./SERVER/csr.pem  -req -signkey ./SERVER/server.key -out ./SERVER/server.cert


ワイルドカード自己署名証明書の作成

ワールドカード自己署名証明書を作成するには、
CSR作成時のCNフィールドに「*.example.jp」のように入力する

Common Name (eg, your name or your server's hostname) []:*.example.jp

後の手順は他と同じ。


名前ベースのバーチャルホストでSSLを使用するには

以前は、名前ベースのバーチャルホストでは、複数のサーバ証明書を使用することはできなかった。
バーチャルホストで複数のサーバ証明書を使うには、IPベースのバーチャルホストにするか、ワイルドカードもしくはマルチドメイン証明書を使用する必要があった。

しかし現在では、SNI(Server Name Indication)という、SSLプロトコルに対する拡張機能をサポートするサーバとブラウザ間の通信であれば、名前ベースのバーチャルホストでもSSLが使えるようになった。


SNIを使用できる条件としては以下の通り。

  • Apacheのバージョンは2.2.12以降
  • OpenSSLのバージョンは0.9.8f以降でTLS拡張オプションを指定した状態でビルド
  • Apacheは上記のOpenSSLでビルド
  • ブラウザがSNI対応


設定として特別なことは不要で、HTTPの名前ベースのバーチャルホストと同じように設定すればよい。

Listen 443
NameVirtualHost *:443
SSLStrictSNIVHostCheck off
<VirtualHost *:443>
DocumentRoot /var/www/example1/
ServerName www.example1.jp
...
SSLEngine on
SSLCertificateFile    /etc/apache2/ssl/example1.pem
SSLCertificateKeyFile /etc/apache2/ssl/server_nopass.key
...

</VirtualHost>
<VirtualHost *:443>
DocumentRoot /srv/www/example2/
ServerName www.example2.jp
...
SSLEngine on
SSLCertificateFile    /etc/apache2/ssl/example2.pem
SSLCertificateKeyFile /etc/apache2/ssl/server_nopass.key
...
</VirtualHost>

「SSLStrictSNIVHostheck Off」はSNI未対応のブラウザからアクセスした際の挙動を制御する設定。
「Off」の場合は、デフォルトのバーチャルホストへリダイレクトされる。
「On」の場合は、サイトへのアクセス自体が拒否される。

treeコマンドで罫線が文字化けするときの対処法

teratermでサーバにssh接続し、treeコマンドを使用した際に
以下のように罫線が文字化けして表示される

f:id:yuusuke1988:20140120221247p:plain

TERATERM.INIに設定を書く方法もあるようだが、
手っ取り早く直すには「--charset」オプションを使用する

$ tree  --charset=C

「C」の部分はなんでも良い。
結果はこのようになる。

$ tree  --charset=o  -L  2
.
|-- bin
|   |-- bash
|   |-- bunzip2
|   |-- busybox
|   |-- bzcat
|   |-- bzcmp -> bzdiff
|   |-- bzdiff
|   |-- bzegrep -> bzgrep
|   |-- bzexe
|   |-- bzfgrep -> bzgrep

その他のオプション

オプション 機能
-L [number] 現在の位置から表示させる階層の数
-s ファイル・ディレクトリのサイズを表示(-hを併用するとわかりやすい単位で表示)
-d ディレクトリのみ表示
-o [file] 指定したファイルに出力
-a 隠しファイルも表示
-p パーミッションを表示
-D 最終更新日時を表示
-F ファイル名末尾に識別記号を付加(/、@など)
-f フルパスを表示
-P [pattern] パターンにマッチしたファイルのみ出力
-I [pattern] パターンにマッチしたファイルは出力しない

rsyncコマンドの使い方

rsyncコマンドの使い方をよく忘れるのでまとめておく。

書式

rsync [オプション] コピー元 コピー先

注意するのはコピー元の書き方

$ rsync  -avz  ./src ./dst/

のようにすると

$ ls  ./dst/
src

dst以下にsrcディレクトリがそのまま作成される。
srcディレクトリ以下のみをdst以下にコピーするには、
次のようにコピー元に/を付ける

$ rsync  -avz  ./src/  ./dst/

 

オプション

オプション 機能
-a コピー元のパーミッションやグループ情報などを保持。-a は -rlptgoDと同じ
-v 進行状況を詳細に表示。最大3個まで付けられる
-z データを圧縮する
-u 追加、更新されたファイルのみコピー
-n 実際には同期を実行せず、実行時の動作だけを表示
-r ディレクトリを再帰的にコピー
-l シンボリックリンクをそのまま(リンク先は変えずに)コピー
-L シンボリックリンクを通常のファイルのように扱う
-p パーミッションを保持
-t タイムスタンプを保持
-g グループを保持
-o オーナーを保持
-D デバイスを維持する (root のみ実行可能)
-b バックアップを作成する
-h バイト数をわかりやすい単位で表示
--delete コピー元で削除したファイルをコピー先でも削除する
--include=PATTERN 指定したパターンに一致するファイルを動機対象から除外しない
--include-from=FILE ファイルに記述されたパターンと一致するファイルを除外しない
--exclude=PATTERN 指定したパターンに一致するファイルを同期対象から除外する
--exclude-from=FILE ファイルに記述されたパターンと一致するファイルを除外する
--existing 新しいファイルを作成せず、受信側に既に存在するファイルだけを更新する
--status 転送効率を表示

 

使用例

リモートマシンへのコピー
$ rsync  -avz  ./src/  example.com:/dst/

通信にはsshが使用される
rshを使用するには以下のようにする

$ rsync  -avz  -e  rsh  ./src/  example.com:/dst/

同期する(全く同じ構造にする)

「--delete」オプションを付ける

$ rsync  -avz  --delete  ./src/  ./dst/

特定のファイルのみコピーする

「--include」オプションと「--exclude」オプションを使用する
拡張子が「.php」のファイルのみコピーする例

$ rsync  -avz  -n  --include="*.php"  --exclude="*"  ./src/  ./dst/

特定のファイル以外をコピーする

「--exclude」オプションを使用する。
拡張子が「.php」以外のファイルをコピーする例

$ rsync  -avz  -n  --exclude=".php"  ./src/  ./dst/

PAM認証についてのまとめ

PAMの設定ファイルの構文

type  control  module-path  module-arguments

type

typeでは、どの認証の方を使用するべきかPAMに知らせる。
PAMは次の4つの型を識別する。

type 意味
acount ユーザがサービスへのアクセスを許可されているかどうか確認する(パスワードの正誤は問われない)
auth パスワード認証によって本物のユーザかどうか確認する
password パスワード設定に使用される
session 認証の前後で実行することを指定。ログの記録やマウントなど

 

control

認証の失敗時にどのように処理するかPAMに知らせる。
次の4つの型がある。

control 意味
required このモジュールが成功しないと全体は認証されない。失敗した場合も次のモジュールがある場合は続けてそちらを参照する
requisite 認証に失敗した場合は即座に終了する
sufficient 他のモジュールが成功して、このモジュールも成功すると以降のモジュールは参照されずに認証される
optional 他に参照すべきモジュールがない場合だけ、成功すると認証される

なお以下のような指定もすることができる

[リターンコード1=アクション1,リターンコード2=アクション2...]

 

module-path

モジュールのパスを指定
 

module-arguments

モジュールに引数を渡す

Postfixについて

Postfixとは

Postfixの内部構成

キュー

・incoming
SMTPなどで外から受け付けたメールが格納される

・active
メールの配送が試みられるときにメールが格納される

・deferred
一時的なエラーで配送に失敗した場合に格納される
配送に失敗した理由などの情報はdeferディレクト配下のキューIDの名前のファイルに格納される

・maildrop
マシン内部で正世されたメールが最初に格納されるキュー

デーモン

【メールの取り込み】
・smtpd
SMTPクライアントからの接続を受付け、
接続元、送信元、宛先などの情報をもとにメールを受付けるかどうか判定する

・qmqpd

・pickup

【キューへの格納】
・cleanup

【キュー管理】
・qmgr

【配送エージェント】
smtp
・lmtp
・local
・virtual
・pipe
・error
・discard

【その他】
・trivial-rewrite
メールアドレスの正規化
配送先の選択

・showq

アクセス制御パラメータ

・smtpd_client_restrictions
 クライアントからの接続時に評価されるアクセス制御のリスト
 
・smtpd_helo_restrictions
 HELO/EHLOコマンド発行時に評価されるアクセス制御のリスト
 
・smtpd_sender_restrictions
 MAILコマンド発行時に評価されるアクセス制御のリスト
 
・smtpd_recipient_restrictions
 RCPTコマンド発行時に評価されるアクセス制御のリスト
permit_mynetworks
reject_unauth_destinations

・smtpd_data_restrictions
 DATAコマンド発行時に評価されるアクセス制御のリスト
 
・smtpd_end_of_data_restrictions
 DATAコマンド終了時に評価されるアクセス制御のリスト
 
・smtpd_etrn_restrictions
 ETRNコマンド発行時に評価されるアクセス制御のリスト
 
これらのパラメータは接続時/各コマンド発行時のタイミングで評価される
※ただし$smtpd_deley_rejectがyesの場合(デフォルト)、smtpd_client_restrictions、
smtpd_helo_restrictions、smtpd_sender_restrictions、smtpd_recipient_restrictionsは
RCPTコマンド発行時にまとめて評価される

smtpd_*_restrictionsに設定されたアクセス制御は記述された順番に評価される。
どのアクセス制御条件にも該当しない場合はアクセスは許可される

アクセス制御の種類

・permit
 アクセスを許可する

・defer
 アクセスを一時的に拒否する(エラーコード:450)

・defer_if_permit
 これ以降の評価結果でアクセスが許可される場合は代わりにdeferする

・defer_if_reject
 これ以降の評価結果でアクセスが拒否される場合は代わりにdeferする

・reject
 アクセスを拒否する(エラーコード:554)

・warn_if_reject
 この次に書かれたアクセス制御の評価の結果、アクセスが拒否される場合、
 ログに警告を出力して、評価結果を無視し評価を続ける
 
・sleep
 引数として秒数を指定する。指定された秒数だけ停止し、
 次の評価に進む

・check_client_access
 引数としてルックアップテーブルを指定する。
 クライアントのIPアドレスまたはDNSを逆引きしてホスト名をキーとして
 ルックアップテーブルを検索し、得られた値をアクセス制御として使用する
 

・permit_mynetworks
 クライアントのIPアドレスが$mynetworksに適合する場合にアクセスを許可する

・reject_invaild_helo_hostname
 引数としてルックアップテーブルを指定する。
 HELO/EHLOでクライアントが名乗ったホスト名をキーとしてルックアップテーブルを
 検索し、得られた値をアクセス制御として使用する

・reject_invaild_helo_hostname
 HELO/EHLOでクライアントが名乗ったホスト名が文法的に不正な場合アクセスを
 拒否する(エラーコード:501)

・reject_non_fqdn_helo_hostname
 HELO/EHLOでクライアントが名乗ったホスト名がFQDNでない場合アクセスを
 拒否する(エラーコード:501)

・check_sender_access
・引数としてルックアップテーブルを指定する。
 送信者メールアドレスをキーとしてルックアップテーブルを検索し、
 得られた値をアクセス制御として使用する
 
・reject_non_fqdn_sender
 送信者メールアドレスのドメイン部が不正な形式の場合アクセスを拒否する
 
・reject_unknown_sender_domain
 送信者メールアドレスのドメイン部に対するDNSのA,MXレコードが存在しない場合、
 アクセスを拒否する
 
・check_recipient_access
 引数としてルックアップテーブルを指定する
 宛先メールアドレスをキーとしてルックアップテーブルを検索し、
 得られた値をアクセス制御として使用する

・permit_auth_destination
 宛先メールアドレスのドメイン部が「$relay_domains」「$mydestination」
 「$inet_interfaces」「$proxy_interfaces」「$virtual_alias_domains」
 「$virtual_mailbox_domains」のいずれかに適合する場合アクセスを許可する

・reject_non_fqdn_recipient
 宛先メールアドレスのドメイン部が不正な形式の場合アクセスを拒否する

・reject_unauth_destination
 受信者アドレスのドメイン部が「$relay_domains」「$mydestination」
 「$inet_interfaces」「$proxy_interfaces」「$virtual_alias_domains」
 「$virtual_mailbox_domains」のいずれにも適合しない場合アクセスを拒否する
 
・reject_unknown_recipient_domain
 宛先メールアドレスのドメイン部に対するDNSのA,MXレコードが存在しない場合、
 アクセスを拒否する(エラーコード:450)

・reject_unlisted_recipient
 宛先メールアドレスのドメイン部が自分が受け取るべきものなのに、
 存在するユーザがいない場合アクセスを拒否する
 

ルックアップテーブル

postfoxのパラメータでルックアップテーブルを指定する場合は「タイプ名:引数」とする

・hash
 単純に検索キーと値のペアを指定するルックアップテーブル。
 ファイルはBerkeleyDBのhash形式のデータベース。
 
・dbm
 使用しているデータベースの形式がDBM形式であること以外はhashと同じ。

・cidr
 検索キーのパターンにネットワークアドレスを指定できる形式。

・static
 検索キーに係らず常に一定の値を返すルックアップテーブル。

・regexp
 検索キーに適合するパターンを正規表現で指定する。
 
unix
 passwd、groupデータベースを参照するルックアップテーブルをこちらで

mysql
 検索にmysqlを使用するルックアップテーブルをこちらで

コマンドラインユーティリティ

Postfixコマンド

postfix start
postfix stop
postfix status
postfix reload
postfix abort
postfix drain
postfix flush
postfix check

Postfixパラメータの管理

・postconf
・-nオプション
・-dオプション
・-eオプション
・-mオプション

・postmap
・-sオプション
・-qオプション
・-dオプション
・-i/-r/-wオプション

・postalias

・newaliases

キュー管理コマンド

・postqueue
・-pオプション

・postcat
・mailq
・postsuper



疲れたので詳細はまた後日・・・