アサイド

postfixとdovecot2.x系でSSL通信で構築する場合の設定

はじめはWEB用の目的でSSLを購入しても、どうせだったらメールもより安全に通信を行いたい!!と思ったので、WEB用のSSLをメールにも使ってみた。

忘れないように自分用のメモ。

前提としては、

postfixとdovecot2.x系をpostfixadminで使っている。

また、メール情報はmysqlで保存している。

上記のやり方は様々なサイトに書かれているので、割愛。

また、メールサーバーのホスト名が取得したSSL証明書に設定したホスト名が一致している事が条件です。

一致していなければ、ワイルドカード「*.example.com」などのSSL証明書を購入する必要があります。

一番悩んだのは、postfixにもdovecotにも証明書をインストールしているのだけど、なぜか不明は証明書となっていまう。

テストしたクライアントはThunderbirdです。

色々悩んだ結果、メールにも中間証明書が必要だったということ・・・・

うーんここに行き着くのに時間がかかっていまった・・・

また、下記のようにそれぞれの設定ファイルに証明書のパスをインストール

もちろん中間証明書も忘れずに・・・

 vi /etc/postfix/main.cf
smtpd_tls_cert_file = /etc/pki/tls/certs/server.crt
smtpd_tls_key_file = /etc/pki/tls/certs/server.key
ssl_ca_file = /etc/pki/tls/certs/server-chain.crt←中間書証明書
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache

で、dovecotも同じように

smtpd_tls_cert_file = </etc/pki/tls/certs/server.crt
smtpd_tls_key_file = </etc/pki/tls/certs/server.key
ssl_ca = /etc/pki/tls/certs/server-chain.crt←中間書証明書

上記をいれるけど、注意したいのは、ssl_ca_fileではなくssl_caと言うことです。

上記で、問題なく設定完了

あとは、お決まりの再起動をします。

Gmailのフェッチでも問題なくSSLで使えました。

うーん時間かかったなぁ

phpMyAdmin 3.5.0で文字化けする場合の対処方法

現在動かしているサーバーのデフォルトの文字環境はUTF-8で動かしている。

でも、最新版phpMyAdmin3.5.0を入れるとおもいいきり文字化けした・・・・なんで・・・・

色々調べていると、いくつかの解決策のようなものがあった。

結論で行くとなんとか解決できた

インストール編

まずは、普通にダウンロードしてインストールを行う。

あっつちなみに参考にしたサイトは下記

http://9jp.info/archives/12024

ここで注目したのは下記

phpMyAdminディレクトリ以下の、examples/create_tables.sql のSQLを実行してphpMyAdmin用データベース()及びテーブルを作成する。
1
source SQLファイルを指定

上記に書いてあるように、SQLを実行してphpMyadmin用のデータベースを作る。

あれ?こんな事したことなかったような・・・

以上でインストール編は終わり

php.ini設定編

はじめにも書いたけど、UTF-8環境で動かすと言うことはphp.iniの設定もUTF-8に合わせていると思う。

でもこれだと文字化けが起こる。

なので、.htcaccessを使って下記内容を記述。

phpMyAdmin関係のディレクトリに置く。

<IfModule mod_php5.c>
 php_value default_charset "NULL"
 php_value mbstring.language "neutral"
 php_value mbstring.internal_encoding "NULL"
 php_value mbstring.detect_order "NULL"
 php_flag mbstring.encoding_translation Off
</IfModule>

早い話が、デフォルト設定に戻すということ。

以上で文字化けは回避できたのでした。

Apacheの構築

インストールと設定はroot権限が必要なコマンドばかりなので、各種インストールの間だけ、sudo ではなく su でrootになって進めましょう。

[admin@ ~]$ su -
 Password:
 [root@ ~]#

CentOSではパッケージのインストールと管理に yum というプログラムを使います。さくらのVPSでは最初から yum がインストール済みで、起動直後から使うことができます。一応、新しくインストールをする前に、既にインストールされているものを最新版にアップデートします。

[root@ ~]# yum -y install httpd

まずはインストールに問題がないか起動してみます。

[root@ ~]# /etc/rc.d/init.d/httpd start
 Starting httpd: [ OK ]

無事に起動できたら、続いて自動起動の設定をします。

[root@ ~]# chkconfig httpd on

設定を確認してみましょう。

[root@ ~]# chkconfig --list httpd
 httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

chkconfig –list を実行すると,起動設定されたラン・レベルの一覧が表示できます。(0:システムの停止,1:シングル・ユーザー,2:ネットワーク機能なしのマルチユーザー,3:CUIログインのマルチユーザー,4:カスタム,5:GUIログインのマルチユーザー,6:システムの再起動)さくらのVPSを起動した時に稼動状態になる為には 3 が on になっている必要があります。起動が問題ないようなので、続いてApacheの設定をします。

Apacheの設定

いちおう元ファイルをコピーしてから vi で開きます。

[root@ ~]# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
 [root@ ~]# vi /etc/httpd/conf/httpd.conf

1.レスポンスヘッダにOSのバージョンを表示させない

ServerTokens OS
   ↓
 ServerTokens Prod

2.KeepAliveを有効にする

KeepAlive Off
   ↓
 KeepAlive On

3.モジュールの読み込み設定

モジュールは必要に応じて設定してください。自分は以下のように設定しました。

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authn_alias_module modules/mod_authn_alias.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
#LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
#LoadModule headers_module modules/mod_headers.so
#LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
#LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule info_module modules/mod_info.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
#LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so

4.サーバー管理者の指定

ServerAdmin root@localhost

 
ServerAdmin admin@domain.com
5.サーバー名の指定

ServerName new.host.name:80

ServerName www.domain.com:80
6.DocumentRootの確認

DocumentRoot “/var/www/html”
7.ディレクトリ内のファイル表示を無効化

Options Indexes FollowSymLinks

Options -Indexes FollowSymLinks

8.indexの設定

DirectoryIndex index.html index.html.var

DirectoryIndex index.html index.php index.cgi index.html.var
9.ログの設定(414 ERROR は記録しない)

LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined

LogFormat “%h %l %u %t \”%!414r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined
10.カスタムログの設定(wormと画像のアクセスをログに記録しない)

CustomLog logs/access_log combined

SetEnvIf Request_URI “cmd\.exe” nolog
SetEnvIf Request_URI “root\.exe” nolog
SetEnvIf Request_URI “Admin\.dll” nolog
SetEnvIf Request_URI “NULL\.IDA” nolog
SetEnvIf Request_URI “^/_mem_bin/” nolog
SetEnvIf Request_URI “^/_vti_bin/” nolog
SetEnvIf Request_URI “^/c/” nolog
SetEnvIf Request_URI “^/d/” nolog
SetEnvIf Request_URI “^/msadc/” nolog
SetEnvIf Request_URI “^/MSADC/” nolog
SetEnvIf Request_URI “^/scripts/” nolog
SetEnvIf Request_URI “^/default.ida” nolog
SetEnvIf Request_URI “\.(gif)|(jpg)|(png)|(ico)|(css)$” nolog
SetEnvIf Remote_Addr 192.168. no_log
CustomLog logs/access_log combined env=!no_log
11.エラー画面でApacheのバージョン非表示

ServerSignature On

ServerSignature Off
12.indexesがOFFなのでファイル表示のアイコンの設定はコメントアウトします。

Alias /icons/ “/var/www/icons/”

Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all


#Alias /icons/ “/var/www/icons/”
#
# Options Indexes MultiViews
# AllowOverride None
# Order allow,deny
# Allow from all
#
13.ScriptAliasも使わないのでコメントアウト

ScriptAlias /cgi-bin/ “/var/www/cgi-bin/”

AllowOverride None
Options None
Order allow,deny
Allow from all


#ScriptAlias /cgi-bin/ “/var/www/cgi-bin/”
#
# AllowOverride None
# Options None
# Order allow,deny
# Allow from all
#
14.autoindexに関係する設定をコメントアウトする

#IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable
#AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
#AddIconByType (TXT,/icons/text.gif) text/*
#AddIconByType (IMG,/icons/image2.gif) image/*
#AddIconByType (SND,/icons/sound2.gif) audio/*
#AddIconByType (VID,/icons/movie.gif) video/*
#AddIcon /icons/binary.gif .bin .exe
#AddIcon /icons/binhex.gif .hqx
#AddIcon /icons/tar.gif .tar
#AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
#AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
#AddIcon /icons/a.gif .ps .ai .eps
#AddIcon /icons/layout.gif .html .shtml .htm .pdf
#AddIcon /icons/text.gif .txt
#AddIcon /icons/c.gif .c
#AddIcon /icons/p.gif .pl .py
#AddIcon /icons/f.gif .for
#AddIcon /icons/dvi.gif .dvi
#AddIcon /icons/uuencoded.gif .uu
#AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
#AddIcon /icons/tex.gif .tex
#AddIcon /icons/bomb.gif core
#AddIcon /icons/back.gif ..
#AddIcon /icons/hand.right.gif README
#AddIcon /icons/folder.gif ^^DIRECTORY^^
#AddIcon /icons/blank.gif ^^BLANKICON^^
#DefaultIcon /icons/unknown.gif
#ReadmeName README.html
#HeaderName HEADER.html
#IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
15.MIME 言語タイプの適用優先順位(日本語を優先)

LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ..

LanguagePriority ja en ca cs da de el eo es et fr he hr it ko ..
16.CGIスクリプト設定を有効化して拡張子 .pl を追加

#AddHandler cgi-script .cgi

AddHandler cgi-script .cgi .pl
17.保存して終了

ESC
:wq
設定の確認

設定ファイルの編集が終わったら、無事に設定ができているか文法チェックをしてみましょう

[root@ ~]# apachectl configtest

httpd: Syntax error on line 210 of /etc/httpd/conf/httpd.conf: Syntax error on line 2 of /etc/httpd/conf.d/proxy_ajp.conf:
Cannot load /etc/httpd/modules/mod_proxy_ajp.so into server: /etc/httpd/modules/mod_proxy_ajp.so: undefined symbol: proxy_module
なにやら /etc/httpd/conf.d/proxy_ajp.conf にエラーがあるとか言われてしまいました。(他のエラーがあったら記述ミスかもしれないので、httpd.confを確認しましょう)これは proxy_module をOFFにしたせいで mod_proxy_ajp も読めなくなったというエラーです。設定内の記述で、/etc/httpd/conf.d 内の設定ファイル(〜.conf)は自動で読み込まれるようになっているのですが、初期状態で入ってる proxy_ajp.conf も welcome.conf も今回の設定では必要ないので、まとめて読み込まないようにしちゃいましょう。

[root@ ~]# mv /etc/httpd/conf.d/proxy_ajp.conf /etc/httpd/conf.d/proxy_ajp.conf.bk
[root@ ~]# mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bk
そしてチェック。大丈夫なはずです。

[root@ ~]# apachectl configtest
Syntax OK
最後にhttpdを再起動します。

[root@ ~]# /etc/rc.d/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
iptablesの設定追加

80番ポートのパケットを許可するためにiptablesに設定を追加します。

[root@ ~]# iptables -A SERVICE -p tcp –dport 80 -j ACCEPT
iptablesの設定を保存

[root@ ~]# /etc/rc.d/init.d/iptables save
Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
そしてiptablesを再起動して反映させます。

[root@ ~]# /etc/rc.d/init.d/iptables restart
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: filter [ OK ]
Unloading iptables modules: [ OK ]
Applying iptables firewall rules: [ OK ]
Webブラウザで表示の確認

Webブラウザから設定したドメイン、もしくは http://XXX.XXX.XXX.XXX/ にアクセスしてみましょう。
通常、Apacheのインストール直後だとApacheのテストページが表示されるのですが、先ほどhttpd.confの設定でテストページを表示しないように設定してしまったので、「サーバーにアクセスできません」ではなく、「404 Not Found エラー」が表示されればApacheは問題なく起動しています。
ただ、このままではちょっと味気ないのでDocumentRootに簡単なテストページを作ってみましょう。

[root@ ~]# echo ‘HelloHello’ > /var/www/html/index.html
Webブラウザからアクセスして「Hello」と表示されればOKです。