オレオレ認証局とサーバ証明書をつくる(CentOS7)

オレオレ認証局を作ってCA証明書をブラウザにインポートしておけば自作公開サーバをHTTPS化したときに楽にアクセスできる。

いつかは正式な証明書を発行してもらう予定だが、まずはオレオレで。

環境

  • CentOS 7.2
  • Apache 2.4.6
  • mod_ssl 2.4.6
  • openssl 1.0.2k-8

CA証明書作成

新規ディレクトリ作成とオリジナルファイルコピー

cd /etc/pki
mkdir tetsisCA
cp tls/misc/CA tetsisCA/
cp tls/openssl.cnf tetsisCA/
echo 01 > tetsisCA/crlnumber

設定ファイル編集

vim tetsisCA/CA
SSLEAY_CONFIG="-config /etc/pki/tetsisCA/openssl.cnf"  # 修正
if [ -z "$DAYS" ] ; then DAYS="-days 3650" ; fi # 10 year  # 修正
CADAYS="-days 3650" # 10 years  # 修正
REQ="$OPENSSL req $SSLEAY_CONFIG"
CA="$OPENSSL ca $SSLEAY_CONFIG"
VERIFY="$OPENSSL verify"
X509="$OPENSSL x509"
PKCS12="openssl pkcs12"
 
if [ -z "$CATOP" ] ; then CATOP=/etc/pki/tetsisCA ; fi  # 修正
vim tetsisCA/openssl.cnf
dir     = /etc/pki/tetsisCA     # Where everything is kept  # 修正
(中略)
[ req_distinguished_name ]
countryName         = Country Name (2 letter code)
countryName_default     = JP  # 修正
countryName_min         = 2
countryName_max         = 2
 
stateOrProvinceName     = State or Province Name (full name)
stateOrProvinceName_default = Tokyo  # 修正
 
localityName            = Locality Name (eg, city)
localityName_default        = Shinagawa-ku  # 修正
 
0.organizationName      = Organization Name (eg, company)
0.organizationName_default  = tetsis company  # 修正
(中略)
[ usr_cert ]
(中略)
# This is typical in keyUsage for a client certificate.
keyUsage = digitalSignature, keyEncipherment  # 修正
 
# This will be displayed in Netscape's comment listbox.
#nsComment          = "OpenSSL Generated Certificate"  # コメントアウト
(中略)
# This is required for TSA certificates.
extendedKeyUsage = serverAuth
(中略)
[ v3_ca ]
(中略)
# Key usage: this is typical for a CA certificate. However since it will
# prevent it being used as an test self-signed certificate it is best
# left out by default.
keyUsage = cRLSign, keyCertSign  # コメントアウト解除

CA証明書作成

# cd /etc/pki/tetsisCA
# ./CA -newca
CA certificate filename (or enter to create)  # エンター
 
Making CA certificate ...
Generating a 2048 bit RSA private key
........+++
...........................................+++
writing new private key to '/etc/pki/tetsisCA/private/./cakey.pem'
Enter PEM pass phrase:  # パスフレーズ入力
Verifying - Enter PEM pass phrase:  # パスフレーズ入力
 
Country Name (2 letter code) [JP]:
State or Province Name (full name) [Tokyo]:
Locality Name (eg, city) [Shinagawa-ku]:
Organization Name (eg, company) [tetsis company]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:tetsis CA
Email Address []:
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/pki/tetsisCA/openssl.cnf
Enter pass phrase for /etc/pki/tetsisCA/private/./cakey.pem:  # パスフレーズ入力
Check that the request matches the signature
Signature ok
(中略)
Write out database with 1 new entries
Data Base Updated
  • CA証明書: cacert.pem
  • CA秘密鍵: private/cakey.pem

証明書失効リスト作成

# openssl ca -config openssl.cnf -gencrl -out crl.pem
Using configuration from openssl.cnf
Enter pass phrase for /etc/pki/tetsisCA/private/cakey.pem: # パスフレーズ入力

サーバ証明書作成

Google CromeではIPアドレスでアクセスした場合SAN(Subject Alternative Name)を設定していないと”ERR_CERT_COMMON_NAME_INVALID”エラーが出てしまう。
(IPアドレスが原因かは不明。DNS名持っててもSAN設定しないといけないかも)

そのため、サーバ証明書にはSAN値を設定して作成する。
本当はもっとスマートな方法があるかもしれないが、とりあえずちゃんと動いたこの方法を書いておく。

新規ディレクトリ作成

cd /etc/pki
mkdir tetsis-server
cp tetsisCA/openssl.cnf tetsis-server/

設定ファイル編集

vim tetsis-server/openssl.cnf
req_extensions = v3_req # The extensions to add to a certificate request  # コメントアウト解除
(中略)
[ v3_req ]
 
subjectAltName = @alt_names
(中略)
# 末尾に追加
[alt_names]
IP.1 = 192.168.33.14  # サーバのアドレス

秘密鍵とCSR作成

# cd /etc/pki/tetsis-server
# openssl req -config openssl.cnf -new -days 3650 -keyout server.key -out server.csr
 
writing new private key to 'server.key'
Enter PEM pass phrase:  # 秘密鍵のパスフレーズ入力
Verifying - Enter PEM pass phrase:  # 秘密鍵のパスフレーズ入力
 
Country Name (2 letter code) [JP]:
State or Province Name (full name) [Tokyo]:
Locality Name (eg, city) [Shinagawa-ku]:
Organization Name (eg, company) [tetsis company]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:192.168.33.15
Email Address []:
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

秘密鍵のパスフレーズ削除

# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:  # 秘密鍵のパスフレーズ入力
writing RSA key

CA証明書で署名したサーバ証明書を作成

openssl ca -config openssl.cnf -days 3650 -extensions v3_req -extfile openssl.cnf -out server.crt -infiles server.csr
  • サーバ秘密鍵: server.key
  • サーバCSR: server.csr
  • サーバ証明書: server.crt

Apacheの設定

設定ファイルの編集

vim /etc/httpd/conf.d/ssl.conf
DocumentRoot "/var/www/html"  # コメントアウト解除
ServerName 192.168.33.14:443  # サーバのIPアドレスに変更
 
SSLCertificateFile /etc/pki/tetsis-server/server.crt
SSLCertificateKeyFile /etc/pki/tetsis-server/server.key
SSLCACertificateFile /etc/pki/tetsisCA/cacert.pem
SSLCARevocationFile /etc/pki/tetsisCA/crl.pem

Apacheの再起動

systemctl restart httpd

ブラウザにオレオレCA証明書(cacert.pem)を追加 (Google Chrome)

  • 「設定」画面の「詳細設定」をクリック
  • 「証明書の管理」をクリック
  • 「認証局」タブの「インポート」をクリック
  • 証明書ファイル(上記例通りならcacert.pem)を選択。「ウェブサイトの識別で…」をチェックし、「OK」をクリック
  • 「認証局」一覧に追加した認証局(例ではtetsis CA)が追加されている。

確認

Chromeで「https://(IPアドレス(今回の例では192.168.33.14))」にアクセスするとそのままページが表示される。
ちゃんと「保護された通信」として認められてる。

参考サイト

Djangoをmod_wsgiで動かす(CentOS7, Python2.7)

環境

  • CentOS: 7.3
  • Apache: 2.4.6
  • mod_wsgi: 3.4
  • Python: 2.7
  • Django: 1.11

Djangoの設定

Djangoのsettings.pyに以下の設定を追加し、デプロイ時のstaticディレクトリを指定する

STATIC_ROOT = "/var/www/static/"

デプロイユーザの作成

デプロイ用のユーザとしてwww-dataを追加。

ユーザ作成後はホームディレクトリにDjangoプロジェクトのデータを持ってくる。
(下の例ではgitからclone)

また、Apacheユーザからアクセスするためにはホームディレクトリに実行権限を持たせる必要があるため権限を変更する。

# useradd www-data -g apache
# su - www-data
$ git clone (gitリポジトリのURL)
$ exit
# chmod 770 /home/www-data/

staticディレクトリの作成

静的ファイルは専用のディレクトを用意。

その後、collectstaticコマンドで静的ファイルをコピーする。

こちらもApacheユーザ権限を追加する。

# mkdir /var/www/static
# chown www-data:apache /var/www/static
# su - www-data
$ cd (gitリポジトリ名)
$ python manage.py collectstatic
$ exit
# chmod -R 775 /var/www/static

Apacheの設定ファイルを編集

/etc/httpd/conf/httpd.confを編集し、以下を追記する。

以下の例は最小限の設定内容を記載している。

WSGIScriptAlias / /home/www-data/(gitリポジトリ名)/(Djangoプロジェクト名)/wsgi.py
WSGIPythonPath /home/www-data/(gitリポジトリ名)
Alias /static/ /var/www/static/

<Directory /home/www-data/(gitリポジトリ名)/(Djangoプロジェクト名)>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
<Directory /var/www/static>
Order deny,allow
Allow from all
</Directory>

Apacheの再起動

systemctl restart httpd

確認

ブラウザで「http://127.0.0.1/」にアクセス

bottleをmod_wsgiで動かす(CentOS7, Python2.7)

環境

  • CentOS 7.3
  • Apache 2.4.6
  • mod_wsgi 3.4
  • Python 2.7.5
  • bottle 0.12.13

上記環境を用意しbottleで作成したWebページを表示させます。
各バージョンはyumやpipを使ってデフォルトでインストールできるものです。
設定ファイル等は編集せずデフォルトのままでOKです。

参考にインストールコマンドを載せておきます。

# yum install epel-release
# yum install httpd mod_wsgi python-pip
# pip install bottle

Apacheの設定

/etc/httpd/conf/httpd.conf の末尾に以下を追加

WSGIScriptAlias / /var/www/html/adapter.wsgi

アダプタの作成・編集

/var/www/html/adapter.wsgi を作成し以下の内容を記述

# coding: utf-8
import sys, os
import bottle

dirpath = os.path.dirname(os.path.abspath(__file__))
print(dirpath)
sys.path.append(dirpath)
os.chdir(dirpath)

import index
application = bottle.default_app()

「import index」の位置が重要だったりします(最初import文を上にまとめて書いててハマりました)。

ページを記述

/var/www/html/index.py を作成し以下の内容を記述

# coding: utf-8
from bottle import route

@route('/')
def index():
return "Hello, world."

Apacheの再起動と確認

# systemctl restart httpd

Webブラウザで「http://127.0.0.1」にアクセスし、「Hello, world.」と表示されれば成功

ZBOX OI520にCentOS6をインストール

今流行りの小型PCですが、OSとしてLinuxを使うとなるといくらか障壁があるように感じます。
そこで今回ZATOC社の小型ベアボーンPCにCentOS6.8をインストールしたので、その結果をここに報告します。
筐体はZBOX OI520という形状が球体という面白いマシンで、意外とインターフェイスも充実しているというなかなかイケてるやつです。
インストール方法はインストールディスクをUSB接続のDVDドライブから読み込ませ、通常のタワーマシンなんかにインストールする方法と全く同じようにインストールすることができました。
現在自宅サーバマシンとして常時起動させていますが、特に問題なく動き続けています。

今後はハイパーバイザが入るか試してみたいです。

CentOS 6.7にRoundcube Webmail 1.1.4をインストール

CentOS 6.7にRoundcube Webmail 1.1.4をインストールする方法です。
既にメールサーバを構築している環境を想定します。
Roundcube Webmailはyumを使ってインストールできます。

# yum install roundcubemail

次にデータベースを作成してデータベースの初期設定を行います。

# mysql -u root -p
# create database roundcubemail default character set utf8;
# grant all privileges on roundcubemail.* to roundcubemail@localhost identified by 'password';
# flush privileges;
# exit
# mysql -u root -p roundcubemail < /usr/share/roundcubemail/SQL/mysql.initial.sql

次に設定ファイル(defaults.inc.php)を編集します。
この後で見るように今のRoundcubeはブラウザからのインストール設定ができるため、この設定ファイルを直接編集しなくても設定ができるようになっています。
しかしブラウザからでは編集できない項目がいくつかあり、結局はこの設定ファイルを編集する必要があるので、今回はまとめてこのファイルで設定する方針でいきます。

# vim /etc/roundcubemail/defaults.inc.php
$config['db_dsnw'] = 'mysql://roundcubemail:(password)@localhost/roundcubemail';
$config['default_host'] = 'ssl://www.tetsis.com';
$config['default_port'] = 993;
$config['smtp_server'] = 'ssl://www.tetsis.com';
$config['smtp_port'] = 465;
$config['smtp_user'] = '%u';
$config['smtp_pass'] = '%p';
$config['product_name'] = 'tetsis.com webmail';
$config['force_https'] = true;
$config['mail_domain'] = 'tetsis.com';
$config['default_charset'] = 'ISO-2022-JP';

次にブラウザを使ってインストール作業を行いますが、デフォルトでは外部のIPアドレスからの通信は遮断されています。
そこで接続に必要なIPアドレスを登録します。
(メインページに関してはどのIPアドレスからもアクセスできるようにしています)

# vim /etc/httpd/conf.d/roundcubemail.conf
<Directory /usr/share/roundcubemail/>
<IfModule mod_authz_core.c>
# Apache 2.4
Require local
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Allow from all
Allow from ::1
</IfModule>
</Directory>

<Directory /usr/share/roundcubemail/installer/>
<IfModule mod_authz_core.c>
# Apache 2.4
Require local
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Deny from all
Allow from 127.0.0.1 (インストールする端末のIPアドレス)
Allow from ::1
</IfModule>
</Directory>

Apacheを再起動します。

# service httpd restart

ブラウザで「https://(サーバのIPアドレス)/roundcubemail/installer/」にアクセスすると、以下のようなページが表示されます。

設定画面1
設定画面1

「OK」となっていることを確認します。
問題なければ一番下の「NEXT」をクリックします。

すると以下の画面が出てきます。
ここでいろいろな設定ができますが、今回は必要な設定はサーバ側で行っているのでここは変更せずに一番下の「CREATE CONFIG」をクリックします。

設定画面2-1
設定画面2-1

以下のような画面が出てくるので「Download」をクリックしてダウンロードしたファイルをサーバの「/etc/roundcubemail/config.inc.php」として保存します。
もしくは「<?php」から始まるテキストをコピーしてサーバの「/etc/roundcubemail/config.inc.php」ファイルにペーストします。
それが完了したら、「CONTINUE」をクリックします。

設定画面2-2
設定画面2-2

最後の設定画面です。「OK」となっているかを確認します。
必要であれば、「Test SMTP config」と「Test IMAP config」でテストします。

設定画面3
設定画面3

テストが完了したら「https://(サーバのIPアドレス)/roundcubemail/」にアクセスします。
すると以下のログイン画面が出てくるので後はユーザ名とパスワードを入力します。
これで、Roundcubeの使用が可能になります。

ログイン画面
ログイン画面

最後にインストール用ページのディレクトリを削除します。

# rm -rf /usr/share/roundcubemail/installer

CentOS6.6にownCloud8.0インストール

以前から気になっていたownCloudをインストールした時のログです。

まず始めに、ownCloudの推奨環境を調べたところ

  • PHP 5.4以上
  • MySQL 5.5.31以上

という記事を見つけたので上記パッケージを持っているremiリポジトリを追加し、アップデート、apacheの再起動

# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# yum update --enablerepo=remi mysql*
# service httpd restart

MySQLをアップデートする際に、依存関係によりPHPもアップデートしてくれたので上記コマンドでバージョンアップ終了

 

(余談)
ブログ執筆時に公式サイトを見に行ったらMySQLについて

  • MySQL/MariaDB 5.x

という記述を見つけたのでMySQLは無理して5.5にバージョンアップしなくてもよかった。。
(余談終わり)

 

次に、データベース作成

# mysql -u root -p
mysql&gt; create database owncloud default character set utf8;
mysql&gt; grant all privileges on owncloud.* to owncloud@localhost identified by '(パスワード)';
mysql&gt; flush privileges;
mysql&gt; quit

 

ownCloudをダウンロード
(2015年4月11日時点での最新安定版はバージョン8.0.2)

# wget https://download.owncloud.org/community/owncloud-8.0.2.tar.bz2
# tar jxvf owncloud-8.0.2.tar.bz2

 

解凍したディレクトリをDocumentRoot以下に配置し、オーナーを変更

# cp -r owncloud /var/www/ssl/
# chown -R apache:apache /var/www/ssl/owncloud/

 

データ用のディレクトリを別に作成し、オーナーを変更

# mkdir /data/owncloud
# chown -R apache:apache /data/owncloud/

 

ブラウザでownCloudを配置したディレクトリにアクセスすれば、初期設定画面が出てくるので、ユーザ名とパスワードを登録
(この時にPHP関連のパッケージが入っていないというメッセージが表示されたら適宜インストール)
(例)

# yum install --enablerepo=remi php-gd

初期設定画面
初期設定画面

 

「ストレージとデータベース」をクリックして、データ用ディレクトリとDB(MySQL/MariaDB)の設定を入力する

初期設定画面2
初期設定画面2

 

「セットアップを完了します」をクリックすれば完了

ownCloudのページ
ownCloudのページ

 

追記(2015年4月12日)

ファイルアップロードの上限値が2MBだったので、その上限値を1GBに変更

# vim /etc/php.ini
memory_limit = 1G
post_max_size = 1G
upload_max_filesize = 1G

# service httpd reload

CentOS6.5にfmlを導入

ConoHaでメールサーバを構築するで構築したメールサーバにfmlを導入してメーリングリスト(ML)機能を追加したので、その時のログです。
fmlを導入する際には、管理・運用体制をどのようにするかによってインストール方法が変わるのですが、今回は「グループfmlに所属しているユーザはMLの作成ができる」を運用ポリシーにしました。

fmlの実行スクリプトはperlで書かれているが、そのファイル内ではパスが「/usr/local/bin/perl」と指定されていて、元のパス(「/usr/bin/perl」)とは違っているのでシンボリックリンクを追加

# ln -s /usr/bin/perl /usr/local/bin/perl

グループfmlとユーザfmlを作成

# groupadd fml
# useradd -g fml fml

自分が普段使用している一般ユーザ(username)をグループfmlに追加

# vim /etc/group
fml:x:501(←ここの数字は環境によって違う):username

ディレクトリ作成とオーナー・権限変更

# mkdir /usr/local/fml
# mkdir /var/spool/ml
# chown fml:fml /usr/local/fml
# chown fml:fml /var/spool/ml
# chmod g+ws /var/spool/ml

fmlをインストールするディレクトリへ移動し、fmlのソースコードをダウンロード、fmlをインストール

# cd /usr/local/src

# wget ftp://ftp.fml.org/pub/fml/stable/fml-4.0-stable-20040215.tar.gz
# tar zxvf fml-4.0-stable-20040215.tar.gz

# cd fml-4.0-stable-20040215
# su fml
$ perl makefml install
unshift(@INC, /usr/local/src/fml-4.0-stable-20040215/src)
---NOT USING configuration file (for the first time)

THIS HOST (www.tetsis.com) IS [x86_64-unknown-linux-gnu]

---Please Define Your Fml System Configurations

Personal Use or ML-Admin-Group-Shared or fmlserv you use?
Personal, Group, Fmlserv (personal/group/fmlserv) [personal] group

Please define the group (in /etc/group) ML Operators use
Group of Mailing List Operators (fml or GID ([\w\d]+)) [fml]

DOMAIN NAME               [tetsis.com]
FQDN                      [www.tetsis.com]
EXEC FILES DIRECTORY      [/usr/local/fml]
TOP LEVEL ML DIRECTORY    [/var/spool/ml]

Language (Japanese or English) [English] Japanese

TimeZone (TZ: e.g. +0900, -0300) [+0900]

--- summary ---
DOMAIN: tetsis.com
FQDN: www.tetsis.com
EXEC_DIR: /usr/local/fml
ML_DIR: /var/spool/ml
Language: Japanese
TimeZone: +0900

15/03/29 00:27:04 makefml::mkdir /usr/local/fml/.fml (fml)

The current configuration is saved in /usr/local/fml/.fml/system

---Install the Fml system to /usr/local/fml. (y/n) [n] y

(以下インストールが始める)

$ exit

Postfixの設定を変更してPostfixを再起動

# vim /etc/postfix/main.cf
allow_mail_to_commands = alias, forward, include

# service postfix reload

テストMLを作成し、Postfixの設定を変更して、Postfixを再起動
(ここはmain.cfの設定を一度で済ませたいところだが、最初にalias_mapsとalias_databaseを変更すると、newmlを実行した際に/var/spool/etc/aliasesファイルがないとかで、処理が途中で止まってしまう。なので一旦newmlによりMLを作成し、aliasesファイルが生成された後にalias_mapsとalias_databaseに設定を加える流れを採用した。もっとスマートなやり方があればご教授願いたい)

# su fml
$ /usr/local/fml/makefml newml fml-test
$ exit

# vim /etc/postfix/main.cf
alias_maps = hash:/etc/aliases, hash:/var/spool/ml/etc/aliases
alias_database = hash:/etc/aliases, hash:/var/spool/ml/etc/aliases

# service postfix reload

newaliasesを実行し、aliases.dbファイルを生成
そして、aliases.dbのオーナー・権限を変更

# newaliases

# chmod 666 aliases.db
# chown root:root aliases.db

これによりfmlの導入は完了

あとはaddコマンドでメンバーを追加すればMLとして使用できる

$ /usr/local/fml/makefml add fml-test (メールアドレス)

 

おまけ

毎回makefmlする度に「/usr/local/fml/makefml」と打つのは面倒なのでシンボリックリンクによりパスを通す

# ln -s /usr/local/fml/makefml /usr/bin/makefml

 

(2015/06/19追記)

ずっと探していたテンプレートファイルの場所が分かった

/usr/local/fml/etc/makefml/cf

これを変更することでnewmlした際に作成されるML内のcfに反映される
でも、それよりもコマンドのほうが分かりやすいかも

$ makefml config-template

このコマンドで設定したファイルは「/var/spool/ml/etc/makefml/cf」に作成され、上記と同様にnewmlした際に反映される
ただしこの場合はcfファイルの権限をグループfmlに与えなければfmlグループの他のユーザが作成したMLには反映されないので注意

(参考文献)
http://www.fml.org/fml/INSTALL/9.html

http://www.fml.org/software/fml8/Documentation/ja/tutorial/changes.cui.html

ConoHaでメールサーバを構築する

ConoHaでメールサーバを構築しようとしたのだけれど薄い本(専門書)の設定をしただけではメールができなかったので、いろいろ調査して設定を試してみたらメールサーバが完成したので、その時のログです。
また、途中に参考にさせて頂いたサイトのリンクを載せています。

まずはConoHaの薄い本通りに設定

この時、/etc/postfix/main.cfの最後の設定(smtpd_recipient_restrictions)の項目はカンマかもしくは改行した時にスペースが必要
参考にしたのはこちら

それから、今回構築するメールサーバはドメインtetsis.com全体のメールサーバにする予定なのでmydestinationsを以下の様に変更

/etc/postfix/main.cf

mydestination = $myhostname, localhost.$mydomain, localhost
↓
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

それから、私の環境ではISPが25番ポートの通信を遮断しているみたい(OB25B)なので通常のSMTPではサーバと通信できないのでSubmission(587番)ポートを使ってサーバと通信するように設定
参考にしたのはこちら

/etc/postfix/master.cf

#submission inet n       -       n       -       -       smtpd
↓(コメントを外す)
submission inet n       -       n       -       -       smtpd

ここまででローカル配送ができる
しかし、Gmail配送できない。ログを見るとIPv6で通信しているので今回は通信をIPv4に限定する

/etc/postfix/main.cf

inet_protocols = all
↓
inet_protocols = ipv4

これでGmailに配送できる
しかし、迷惑メールトレイに入れられてしまうので、DNSにSPFレコードを追加する

以下の図はDNSのお名前.comにSPFレコードを登録した状態
VALUE部分は「v=spf1 +ip4:(IPアドレス) ~all」にする
参考にしたのはこちら
spf

ここまででGmailの受信トレイに入れられる
一応ConoHaにメールサーバを構築する目標が達成

メールの暗号化

SMTPS、POP3S、IMAPSに対応させる

まずは自己証明書を作成する

[root@www ~]# cd /etc/pki/tls/certs
[root@www certs]# make server.key
umask 77 ; \
/usr/bin/openssl genrsa -aes128 2048 &gt; server.key
Generating RSA private key, 2048 bit long modulus
.........................................+++
...............................+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
[root@www certs]# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:
writing RSA key
[root@www certs]# make server.csr
umask 77 ; \
/usr/bin/openssl req -utf8 -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []                                      ~
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:www.tetsis.com
Email Address []:info@tetsis.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@www certs]#
[root@www certs]# openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650
Signature ok
subject=/C=JP/L=Default City/O=Default Company Ltd/CN=www.tetsis.com/emailAddress=info@tetsis.com
Getting Private key
[root@www certs]# cp server.key ../private/

最後にPostfixとDovecotの設定をする

/etc/postfix/main.cfに以下を追加

smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/server.crt
smtpd_tls_key_file = /etc/pki/tls/private/server.key
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s

/etc/postfix/master.cfの以下のコメントを外す

smtps     inet  n       -       n       -       -       smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject

/etc/dovecot/conf.d/10-sslを以下のように修正

#ssl = yes
ssl_cert = &lt;/etc/pki/dovecot/certs/dovecot.pem
ssl_key = &lt;/etc/pki/dovecot/private/dovecot.pem
↓
ssl = yes
ssl_cert = &lt;/etc/pki/dovecot/certs/server.crt
ssl_key = &lt;/etc/pki/dovecot/private/server.key

/etc/dovecot/conf.d/10-master.confを以下のように修正

service imap-login {
inet_listener imap {
#port = 143
port = 0
}
inet_listener imaps {
port = 993
ssl = yes
}

service pop3-login {
inet_listener pop3 {
#port = 110
port = 0
}
inet_listener pop3s {
port = 995
ssl = yes
}
}

参考にしたのはこちらこちらこちら

最後にPostfixとDovecotを再起動する

# service postfix restart
# service dovecot restart

CentOS6.5にてネットワーク内のWindowsから誰でもアクセスできるネットワークドライブ作成(論理ボリューム使用)

今回やったのは2つ

  1. Sambaを使ってWindowsから誰でもアクセスできるネットワークドライブを作成する
  2. 論理ボリュームを作成したHDDをネットワークドライブ領域用にマウントする
    (論理ボリュームを使うのは、後々HDDを増設してネットワークドライブの容量を簡単に増加させるため)

Sambaを使ってWindowsから誰でもアクセスできるネットワークドライブを作成する

これはこのサイトを参考にさせて頂きました

なのでここでは省略

論理ボリュームを作成したHDDをネットワークドライブ領域用にマウントする

今回ネットワークドライブ領域用に使うHDDはsdbとして認識されている

(2015/01/25追記)
まずLVM用のパーティションを作成する
今回のHDDはAFTなのでパーティションはセクタで指定したいので-uオプションをつける

# fdisk -u /dev/sdb
コマンド (m でヘルプ):n
コマンドアクション
e   拡張
p   基本パーティション (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-4294967294, default 1): 2048
終点 シリンダ または +サイズ または +サイズM または +サイズK (2048-4294967294, default 4294967294):(空Enter)
コマンド (m でヘルプ): t
選択した領域 1
16進数コード (L コマンドでコードリスト表示): 8e
コマンド (m でヘルプ): w
パーティションテーブルは変更されました!
# pvcreate /dev/sdb1
# vgcreate vg_storage /dev/sdb1
# lvcreate -l 100%FREE -n lv_storage vg_storage
# mkfs -t ext4 /dev/mapper/vg_storage-lv_storage
# mount -t ext4 /dev/mapper/vg_storage-lv_storage /home/share

再起動してもマウントされるように/etc/fstabに記載

(末尾に以下を追加)
/dev/mapper/vg_storage-lv_storage /home/share	ext4	defaults	1 2

完了

今後の課題として・・・
ファイルシステムにNTFSを使ってみたかったけどできなかった
でもext4の最大ボリュームサイズは1EBらしいから将来1EBのネットワークドライブが作れるかもw
(NTFSの最大ボリュームサイズは256TB)

CentOS6.5でUSBをマウントする

CentOS6.5でUSBをマウントするときのやり方です

私はVirtualBoxの上にCentOSをゲストOSとしてインストールしているので
まずはVirtualBoxでゲストOSにUSBを認識させる方法から説明して
その次にCentOSでUSBをマウントする方法を説明します

 

  • VirtualBoxでゲストOSにUSBを認識させる方法

ちなみにVirtualBoxのバージョンは4.3.16

図1はゲストOSの「設定」ー>「USB」をクリックしたところで、最初は「USB2.0(EHCI)コントローラーを有効化」にチェックがついていないのでチェックをつける

すると、ウィンドウの下のほうに「Extension Packのインストールが必要」みたいなコメントがでるので、VirtualBoxのサイトに行ってダウンロードしてくる

図1 VirtualBox設定画面1
図1 VirtualBox設定画面1

ダウンロードしたファイルを実行すると図2のウィンドウ がでてくるので「インストール」をクリックするとインストールできる

図2 Extension Packのインストール
図2 Extension Packのインストール

すると、コメント文が消えてUSBを認識する準備が整う

図1の右側のUSBマークにプラスマークがついているアイコンをクリックすると、現在ホストOSが認識しているUSB機器の一覧が表示されるので、任意の機器を選ぶと図3のようになる

図3 VirtualBox設定画面2
図3 VirtualBox設定画面2

これで、ゲストOSがUSBを認識できるようになった

 

  • CentOSでUSBをマウントする方法

まずCentOSでUSBがどのように認識されているかを確認するためにdmesgコマンドを打つ

# dmesg
(中略)
sd 3:0:0:0: [sdb] 62127601 512-byte logical blocks: (31.8 GB/29.6 GiB)
sd 3:0:0:0: [sdb] Write Protect is off
sd 3:0:0:0: [sdb] Mode Sense: 43 00 00 00
sd 3:0:0:0: [sdb] Assuming drive cache: write through
sd 3:0:0:0: [sdb] Assuming drive cache: write through
sdb: sdb1
(後略)

今回は「sdb1」という名前になっていることが分かる

マウントにはmountコマンドを使う

# mount /dev/sdb1 /home/samba/

(マウント先は自分がマウントしたい場所を指定)

これでマウントはできたのだが、このままだと再起動したときにもう一度このコマンドを打たないといけないし、権限の設定とかが良く分からんので「/etc/fstab」ファイルに記述を加えることにする

# vim /etc/fstab
(末尾に以下を追記)
/dev/sdb1  /home/samba  vfat  defaults,umask=000  1 2

今回はUSBのファイルフォーマットがFAT32だったので「vfat」を指定

「umask」は権限に関する記述で、000にすると誰でも読み書き実行が可能になる(コマンドで確認すると権限がが777になる)

これで再起動してもマウントされる状態になった