CentOS7 yum update が遅いときのチェックポイント

「yum update」をしていると、ものすごく遅いサーバーにあたってしまい、トロトロと中々進まず、下手をするとアップデートに失敗したりします。

大方の予想通り、わざわざ海外の遥か彼方のサーバーにアクセスしにいったりしているので、日本のサーバーにアクセスするようにする設定の覚書。

# vi /etc/yum/pluginconf.d/fastestmirror.conf

include_only=.jp ←追記

保存して、終了後、yum updateのキャッシュをクリアして、実行。

# yum clean all
# yum update

日本のサーバーにアクセスしているか?を確認する。

CentOS7で「Let’s Encrypt」を利用しバーチャルドメインで複数ドメインをSSL化

hostコマンドで正引き確認

まず、「Let’s Encrypt」を利用するにはホスト名が正引きできること(ホスト名からIPアドレスを参照可能)が条件となっているので、hostコマンドでホスト名からIPアドレスが引けることを確認します。

※hostコマンドはデフォルトでインストールされていないので、yumコマンドでインストールします。

# yum install bind-utils

インストールが完了したら、hostコマンドを使います。

#host www.hogehoge.com
www.hogehoge.com has address XXX.XXX.XXX.XXX

入力したホスト名からIPアドレスが表示されることを確認します。

ファイアウォールでHTTPSサービス(443)のポート開放

次に「Let’s Encrypt」を利用するには443ポートでWEBサーバーにアクセスできることが条件となっているので、firewallコマンドで443ポート開放の設定をします。

# firewall-cmd --add-service=https --permanent
# firewall-cmd --reload

設定が完了したら、実際にポート開放されているか?を確認します。

# firewall-cmd --list-all

「services:」のところに「https」と表示されていれば開放されています。更に「CMANインターネットサービス」様の「Portチェックテスト【外部からのPort開放確認】」で実際にWEBサーバーの443ポートへアクセスできるか?を確認します。

https://www.cman.jp/network/support/port.html

SSLモジュールのインストール

# yum install mod_ssl

インストールが完了したらhttpdを再起動します。

# systemctl restart httpd

epelレポジトリのインストール

「certbot」をインストールするにはレポジトリの「epel」が必要になります。前準備として「epel」レポジトリをインストールします。

# yum install epel-release

インストールが完了したらyumコマンドで利用可能なレポジトリリストを確認します。

# yum repolist

「epel」が表示されれば利用可能です。

certbotパッケージのインストール

# yum install certbot

python2-certbot-apacheパッケージのインストール

# yum install python2-certbot-apache

certbotパッケージのインストール確認

# yum list installed | grep  certbot

「certbot」「python2-certbot-apache」が表示されればインストールが完了しています。

certbotコマンドで証明書の発行

# certbot certonly --webroot -w /var/www/html/ -d www.hogehoge.com -d hogehoge.com

バーチャルホストで複数のドメインがある場合は、ドメインの数だけコマンドを実行

# certbot certonly --webroot -w /var/www/html/domain01/ -d www.domain01.com -d domain01.com
aving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): hoge@hogemail.co.jp ←メールアドレスを入力
Starting new HTTPS connection (1): acme-v01.api.Let'sEncrypt.org
 
-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A ←利用規約に同意するか?に「A(同意)」を入力
 
-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to Encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: N ←メーリングリストに加入するか?に「N(いいえ)」を入力

「Congratulations!」と表示されるとサーバーの証明書がサーバー内に保存されます。エラーが出た場合は証明書は発行されないので、再度、ホスト名の正引きの確認、WEBサーバーの80ポート、443ポートへのアクセス等に間違いがないか?を確認します。

サーバー内に保存された証明書ファイルの確認

# cd /etc/letsencrypt/live/www.hogehoge.com ←certbotコマンドで入力したドメインがフォルダ名になっています。

必要な3つのファイル「cert.pem」「chain.pem」「privkey.pem」があることを確認します。

ssl.confファイルの修正

まずは、オリジナルファイルのバックアップ

# cp -p ssl.conf ssl.conf.org

次にssl.confファイルの修正

<VirtualHost _default_:443> ←ここから
 ・
 ・
 ・
</VirtualHost>←ここまでを全て削除

メインのドメインのconfファイル作成

メインのドメインを「ServerName www.hogehoge.com」、「DocumentRoot /var/www/html」として設定します。

<VirtualHost *:80>
 ServerName www.hogehoge.com
 ServerAlias hogehoge.com
 DocumentRoot /var/www/html

 RewriteEngine on
 RewriteCond %{HTTP_HOST} ^hogehoge\.com$
 RewriteRule ^/(.*) http://www.hogehoge.com/$1 [R=301,L]

 RewriteEngine on
 RewriteCond %{HTTPS} off
 RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

 ErrorLog "logs/error_log"
 CustomLog "logs/access_log" combined
</VirtualHost>

<VirtualHost *:443>
 ServerName www.hogehoge.com:443
 DocumentRoot /var/www/html
 ErrorLog "logs/error_log"
 CustomLog "logs/access_log" combined

 SSLCertificateFile /etc/letsencrypt/live/www.hogehoge.com/cert.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/www.hogehoge.com/privkey.pem
 SSLCertificateChainFile /etc/letsencrypt/live/www.hogehoge.com/chain.pem

 SSLProtocol all -SSLv2 -SSLv3
 SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
 SSLHonorCipherOrder on
 Header always set Strict-Transport-Security "max-age=15768000"
</VirtualHost>

バーチャルホストのconfファイル作成

バーチャルホストのドメインを「ServerName www.domain01.com」、「DocumentRoot /var/www/html/domain01」として設定します。

<VirtualHost *:80>
 ServerName www.domain01.com
 ServerAlias domain01.com
 DocumentRoot /var/www/html/domain01

 RewriteEngine on
 RewriteCond %{HTTP_HOST} ^domain01\.com$
 RewriteRule ^/(.*) http://www.domain01.com/$1 [R=301,L]

 RewriteEngine on
 RewriteCond %{HTTPS} off
 RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

 ErrorLog "logs/domain01_error_log"
 CustomLog "logs/domain01_access_log" combined
</VirtualHost>

<VirtualHost *:443>
 ServerName www.domain01.com:443
 DocumentRoot /var/www/html/domain01
 ErrorLog "domain01_logs/error_log"
 CustomLog "domain01_logs/access_log" combined

 SSLCertificateFile /etc/letsencrypt/live/www.domain01.com/cert.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/www.domain01.com/privkey.pem
 SSLCertificateChainFile /etc/letsencrypt/live/www.domain01.com/chain.pem

 SSLProtocol all -SSLv2 -SSLv3
 SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
 SSLHonorCipherOrder on
 Header always set Strict-Transport-Security "max-age=15768000"
</VirtualHost>

confファイルの設定が完了したらhttpdを再起動します。

# systemctl restart httpd

ブラウザで確認

URLにドメインを入力し、chrome等で「保護された通信」と表示されれば正常にHTTPS通信が出来ています。

証明書の自動更新設定

# crontab -e
00 3 * * 1 certbot renew -q --deploy-hook "systemctl restart httpd"
00 5 * * 1 certbot renew -q --deploy-hook "systemctl restart httpd"

毎月1日の3時と5時に証明書を更新し、成功したら、httpdを再起動する

SSL証明書Let’s Encryptの有効期限確認方法と自動更新のコマンド覚書

証明書の有効期限を確認するコマンド

#certbot certificates

証明書の有効期限を更新するコマンド

#certbot renew

※有効期限が30日未満のときのみ更新される

ドライラン(テスト)するコマンド

#certbot renew --dry-run

証明書を強制更新するコマンド

#certbot renew --force-renew

自動更新設定

#vi /etc/crontab

00 5 1 * * certbto renew -q --deploy-hook "systemctl restart httpd"

毎月1日の5時00分に更新し、成功したらhttpdをリスタートさせる

URLのwwwあり・なし リダイレクト自分用まとめ

今まで中身をよく分かっていないまま設定してたけど、サイトのSSL化を進める中で、やはり正しく設定して、正しいリダイレクトができないとぐちゃぐちゃになるので、再勉強と自分用覚書。

実際にテストして挙動を確認したので、これがファイナルアンサーです。ありで統一する場合となしで統一する場合、更に自分用にバーチャルドメインでポート変更して設定する場合の設定例です。

「wwwあり」で統一の場合(ポート変更なし)

<VirtualHost *:80>
 DocumentRoot /var/www/html
 ServerName www.yocchi02.hoge.jp
 ServerAlias yocchi02.hoge.jp
 RewriteEngine on
 RewriteCond %{HTTP_HOST} ^yocchi02\.hoge\.jp$
 RewriteRule ^/(.*) http://www.yocchi02.hoge.jp/$1 [R=301,L]
 ErrorLog logs/yocchi02_error_log
 CustomLog logs/yocchi02_access_log combined
</VirtualHost>

「wwwなし」で統一の場合(ポート変更なし)

<VirtualHost *:80>
 DocumentRoot /var/www/html
 ServerName yocchi02.hoge.jp
 ServerAlias www.yocchi02.hoge.jp
 RewriteEngine on
 RewriteCond %{HTTP_HOST} ^www\.yocchi02\.hoge\.jp$
 RewriteRule ^/(.*) http://yocchi02.hoge.jp/$1 [R=301,L]
 ErrorLog logs/yocchi02_error_log
 CustomLog logs/yocchi02_access_log combined
</VirtualHost>

「wwwあり」で統一の場合(ポート変更あり)
※「RewriteCond」と「RewriteRule」にポートを設定しないとうまくリダイレクトしない。

<VirtualHost *:88>
 DocumentRoot /var/www/html
 ServerName www.yocchi02.hoge.jp
 ServerAlias yocchi02.hoge.jp
 RewriteEngine on
 RewriteCond %{HTTP_HOST} ^yocchi02\.hoge\.jp:88$
 RewriteRule ^/(.*) http://www.yocchi02.hoge.jp:88/$1 [R=301,L]
 ErrorLog logs/yocchi02_error_log
 CustomLog logs/yocchi02_access_log combined
</VirtualHost>

「wwwなし」で統一の場合(ポート変更あり)

<VirtualHost *:88>
 DocumentRoot /var/www/html
 ServerName yocchi02.hoge.jp
 ServerAlias www.yocchi02.hoge.jp
 RewriteEngine on
 RewriteCond %{HTTP_HOST} ^www\.yocchi02\.hoge\.jp:88$
 RewriteRule ^/(.*) http://yocchi02.hoge.jp:88/$1 [R=301,L]
 ErrorLog logs/yocchi02_error_log
 CustomLog logs/yocchi02_access_log combined
</VirtualHost>

バーチャルホスト「wwwあり」で統一の場合(ポート変更あり)

<VirtualHost *:88>
 DocumentRoot /var/www/html/blog01
 ServerName www.blog01.hoge.jp
 ServerAlias blog01.hoge.jp
 RewriteEngine on
 RewriteCond %{HTTP_HOST} ^blog01\.hoge\.jp:88$
 RewriteRule ^/(.*) http://www.blog01.hoge.jp:88/$1 [R=301,L]
 ErrorLog logs/blog01_error_log
 CustomLog logs/blog01_access_log combined
</VirtualHost>

<IfModule mod_rewrite.c>
 Redirect permanent /blog01/ http://www.blog01.hoge.jp:88/
</IfModule>

※バーチャルホストの設定の要注意点
上記の
「Redirect permanent /blog01/ http://www.blog01.hoge.jp:88/」
フォルダの設定はメインのホストの設定と合わせること!

www.yocchi02.hoge.jp/blog01/(wwwありへリダイレクト)

www.blog.hoge.jp(wwwあり、メインホストの設定が引き継がれる)

blog.hoge.jp(wwwなしへリダイレクト)

www.blog.hoge.jp(wwwありへリダイレクト)

blog.hoge.jp(wwwなしへリダイレクト)

の無限ループとなるため。

自宅サーバーのSSL化(自己署名証明書)

自己著名証明書は実際の運営に使うのは現実的ではないですが、ちょっとしたサーバーの挙動テスト等をするのにいちいち証明書を取るわけにもいかないので、そういうとき用の自己著名証明書を利用したサーバーのSSL化の覚書。

# cd /etc/pki/tls/certs/
# sed -i 's/365/3650/g' Makefile ← サーバー用証明書有効期限を1年から10年に変更
# make server.key ← サーバー用秘密鍵の作成

Enter pass phrase: ← パスワード入力
Verifying - Enter pass phrase: ← パスワードの再入力

# openssl rsa -in server.key -out server.key ← サーバー用秘密鍵からパスワード削除

Enter pass phrase for server.key: ← 先程のパスワードを入力
writing RSA key

# make server.crt ← サーバー用秘密鍵の作成

Country Name (2 letter code) [XX]:JP ← 国
State or Province Name (full name) []:Tokyo ← 都道府県名
Locality Name (eg, city) [Default City]:Ginza ← 市区町村名
Organization Name (eg, company) [Default Company Ltd]:Soshiki ← 組織名
Organizational Unit Name (eg, section) []: ← そのままエンター・キー
Common Name (eg, your name or your server's hostname) []:hogehoge.jp ← ドメイン名
Email Address []:webmaster@hogehoge.jp ← 管理者のメルアド

# chmod 400 server.* ← アクセス不可設定

参考サイト:「CentOS 7.0 で自宅サーバーのSSL(自己署名証明書)作成とWeb&Mailサーバーへの設定