zuntan02のはてなブログ

備忘録的なものです。時々職場の技術者ブログにも転記してますが、メインはこちらで。

【お名前.comとRoute53】ネームサーバをRoute53にしてても転送Plusを使いたい(使えた)

【まとめ】

お名前.comの「転送Plus」が使用できるドメイン日本語ドメインとかはダメ)の場合、ゾーンファイルをRoute53で運用していても、Route53側のMXレコードでお名前のサーバを指定してやればメール転送される。

【作業メモ】

お名前.com

1)[オプション設定]-[メール転送設定]
hogehoge.com
の右にある「設定する」ボタンをクリック

2)転送元/転送先の設定
転送元メールアドレス:otoiawase@hogehoge.com
転送先メールアドレス:otoiawase_hogehoge_com@fugafuga.jp

ドメインのネームサーバーを変更しないこと!
※表示される以下の設定をメモする

ホスト名	TYPE	VALUE	優先
hogehoge.com	MX	mailforward.dnsv.jp	10
Route53
Type:MX-Mail exchange
Value:10 mailforward.dnsv.jp
以下必要に応じて

# ※ACMの認証のためにSNSを設定していた
# 10 inbound-smtp.us-east-1.amazonaws.com
# →上記のMX設定変更を行うことで、今後ACMの承認メールがSES側に落ちなくなるため、
#  お名前の転送Plusでadmin@hogehoge.comを自分のメールアドレスに転送しておくこと

【AWS】Route53+S3でSorry出す(Route53のDNSFailover設定)

【概要】

AWSからサーバ強制再起動のお知らせが来た。事前に再起動するが、ELBの配下ではあるが冗長化できていないというレアな構成のためどうしても数分は止まってしまう。
その間Route53のDNSFailover設定を行った。

【参考】S3でSorryサーバ構築

>http://qiita.com/uzresk/items/48b81c8092b6423829f7
># Route53での設定はRoutingPolicyでPrimaryとSecondaryを設定します。
># Primaryの設定にELBのEndpointの設定をいれるとRoute53はELBのヘルスチェックを見るようになります。
># ヘルスチェックがOutOfServiceになるとSecondaryに切り替えます。
># SecondaryにSorryコンテンツが格納されているS3のEndpointを登録することでS3版Sorryサーバの出来上がりです。

【作業】

1)Sorry表示用S3バケットを用意

hoge.fuga.jp(バケット名はドメインと合わせる必要がある)
各種オプションはデフォルトのまま(パブリックアクセスはOFF)
Sorry文言(index.html)をアップロードし、
index.htmlのEveryoneパブリックアクセスについて「オブジェクトの読み取り:ON」とする

2)StaticWebsite hostingを有効にする

●このバケットを使用してウェブサイトをホストする
インデックスドキュメント
index.html
エラードキュメント
index.html
→エンドポイントが生成される

3)Route53にFailover設定を追加する

# 先に現在のDNSをfailoverにする

[Primary]

Name:hoge.fuga.jp
Alias:Yes
Alias Target:省略
Routing Policy : Failover
Failover Record Type: Primary 
SetID: hoge-Primary
Evaluate Target Health:Yes★これをYesにする
Associate with Health Check:No

[Secondary]
[Create Record Set]で以下を追加

Name:hoge.fuga.jp
Alias:Yes
Alias Target:
ここにs3のエンドポイント指定。出てこないときはバケット名はドメインと合ってるか確認のこと
Routing Policy : Failover
Failover Record Type: Secondary 
SetID: hoge-Secondry
Evaluate Target Health:No←こっちはNoのまま
Associate with Health Check:No

セカンダリを先にやると以下のエラーが出るので注意
RRSet with DNS name hoge.fuga.jp, type A, SetIdentifier lpo-Secondary, and marked as secondary cannot be created because a non-failover RRSet with the same name and type already exists.

以上

AmazonLinux+httpd(Apache2.2)にLet's Encrypt

AWS EC2で運用しているWebサイト(httpd/apache2.2)にLet's EncryptでSSL証明書設置したメモ。

【作業】

Webサーバ確認
/usr/sbin/apachectl -v
# Server version: Apache/2.2.34 (Unix)
# Server built:   Sep 15 2017 20:57:31

# SSLモジュール確認
/usr/sbin/apachectl -M | grep ssl
#  ssl_module (shared)

証明書発行用ドキュメントルート用意

Let's Encryptで証明書発行(ドメイン使用権認証)用のファイルを設置するドキュメントルートが必要です。
ここでは、既存のvhostについて、Let's encrypt が webroot 更新で使う部分だけを別のディレクトリに設定しています。

mkdir /srv/www/letsencrypt_webroot
chown apache:apache /srv/www/letsencrypt_webroot

cd /etc/httpd/conf.d/
vi hogehoge.conf
# 以下を追記する

Alias /.well-known/ /srv/www/letsencrypt_webroot/.well-known/
<Directory /srv/www/letsencrypt_webroot/>
    Order Allow,Deny
    AllowOverride All
</Directory>

※2.4系だと

<Directory /srv/www/letsencrypt_webroot/>
    Options FollowSymLinks
    Require all granted
</Directory>
書式テスト&反映

service httpd configtest
service httpd graceful

Let's Encrypt インストール

1. AWSのセキュリティグループを設定

→サーバに適用されているセキュリティグループのインバウンドのHTTP(80)、HTTPS(443)を許可(0.0.0.0/0)にしておきます。

2. certbotのダウンロード&配置&権限設定
curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
chmod 700 /usr/bin/certbot-auto
3. 証明書の発行

cerbotのコマンドで証明書が自動生成されます。

certbot-auto certonly --webroot -w /srv/www/letsencrypt_webroot -d hogehoge --email admin@hogehoge --debug

→ 不足している必須モジュールがインストールされる

# 必要なモジュールが追加インストールされる
★ここでエラーが出た場合は下端を参照してください

以下対話式で進める

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-staging.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: 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: Y

(省略)

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/hogehoge/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/hogehoge/privkey.pem
   Your cert will expire on 2017-12-04. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot-auto renew"
(省略)
4. 生成された証明書の確認

以下のディレクトリに証明書が生成されます。

/etc/letsencrypt/live/hogehoge/
5.httpd側に設定

vi /etc/httpd/conf.d/ssl.hogehoge.conf

NameVirtualHost *:443
<VirtualHost *:443>
    SSLEngine on
(省略)
    SSLCertificateFile /etc/letsencrypt/live/hogehoge/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/hogehoge/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/hogehoge/chain.pem
(省略)
</VirtualHost>
書式テスト&反映

service httpd configtest
service httpd graceful

6.確認

https://hogehoge/
SSL通信できていることを確認

# SSL脆弱性対策
# 【参照】https://qiita.com/kite_999/items/6243386fe9153e1c739c
# httpd.confに以下を追記

# for SSL
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES:!RC4:!DH
Header set Strict-Transport-Security "max-age=315360000;"

https://www.ssllabs.comで確認してランクA+であることを確認

# 有効期限確認

openssl s_client -connect "hogehoge":443 < /dev/null 2> /dev/null | openssl x509 -text | grep "Not"
7.証明書の自動更新

crontab -e

50 3 * * 0 /usr/bin/certbot-auto renew --post-hook "/etc/init.d/httpd graceful" > /path/to/log 2>&1

エラー対応メモ

# certbot-auto certonly で以下のエラーが出た
# 解決方法は:https://blog.yskw.info/articles/326/を参考にしました

ack (most recent call last):
  File "/opt/eff.org/certbot/venv/bin/letsencrypt", line 7, in <module>
    from certbot.main import main
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/certbot/main.py", line 9, in <module>
    import zope.component
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/zope/component/__init__.py", line 16, in <module>
    from zope.interface import Interface
ImportError: No module named interface
unset PYTHON_INSTALL_LAYOUT を実行
env | grep PYTHON_INSTALL_LAYOUT
# PYTHON_INSTALL_LAYOUT=amzn
unset PYTHON_INSTALL_LAYOUT
# 確認
env | grep PYTHON_INSTALL_LAYOUT
→設定が無くなった事を確認

# certbot-auto certonly再実行
# まだ以下のエラーが出る

Error: couldn't get currently installed version for /opt/eff.org/certbot/venv/bin/letsencrypt:
Traceback (most recent call last):
  File "/opt/eff.org/certbot/venv/bin/letsencrypt", line 7, in <module>
    from certbot.main import main
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/certbot/main.py", line 9, in <module>
    import zope.component
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/zope/component/__init__.py", line 16, in <module>
    from zope.interface import Interface
ImportError: No module named interface

→/opt/eff.org ディレクトリを退避(or 削除)して再実行

エラー対応メモ2

古いAmazonLinuxでいつの間にか以下のエラーが出ていたパターン

FATAL: Amazon Linux support is very experimental at present...
if you would like to work on improving it, please ensure you have backups
and then run this script again with the --debug flag!
Alternatively, you can install OS dependencies yourself and run this script
again with --no-bootstrap.

メッセージに従い、--debugを付加して実行

/usr/bin/certbot-auto renew --debug --post-hook "/sbin/service httpd reload"
(略)
Updated:
  python27-devel.x86_64 0:2.7.16-1.127.amzn1
  python27-tools.x86_64 0:2.7.16-1.127.amzn1

Dependency Updated:
  python27.x86_64 0:2.7.16-1.127.amzn1
  python27-libs.x86_64 0:2.7.16-1.127.amzn1

(略)

Creating virtual environment...
Traceback (most recent call last):
  File "/usr/bin/virtualenv", line 6, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 3049, in <module>
    @_call_aside
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 3033, in _call_aside
    f(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 3062, in _initialize_master_working_set
    working_set = WorkingSet._build_master()
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 660, in _build_master
    return cls._build_from_requirements(__requires__)
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 673, in _build_from_requirements
    dists = ws.resolve(reqs, Environment())
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 858, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'virtualenv==15.1.0' distribution was not found and is required by the application
Traceback (most recent call last):
  File "<stdin>", line 27, in <module>
  File "<stdin>", line 19, in create_venv
  File "/usr/lib64/python2.7/subprocess.py", line 190, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['virtualenv', '--no-site-packages', '--python', '/usr/bin/python2.7', '/opt/eff.org/certbot/venv']' returned non-zero exit status 1
■参考

https://serverfault.com/questions/912973/lets-encrypt-error-with-amazon-linux-with-virtualenv
virtualenvの再インストールで解決する模様

pip uninstall virtualenv
→以下のエラー
pkg_resources.DistributionNotFound: The 'pip==9.0.3' distribution was not found and is required by the application

# pipインストール
easy_install pip==9.0.3

# 再実行
pip uninstall virtualenv
pip install virtualenv


# 再テスト
/usr/bin/certbot-auto renew --debug --post-hook "/sbin/service httpd reload"

confファイルのコメントを消してすっきりさせる:egrep -v '^(#|$)'

例)

cat /etc/httpd/conf.d/ssl.conf | egrep -v '^(#|$)' > /etc/httpd/conf.d/ssl.conf_edited

■コマンドについて

egrep

egrep [オプション] [検索文字列パターン] ファイル
grepよりも高度な正規表現を使用できる。

-v

マッチしない行を出力する。

'^(#|$)'

・行頭が#(^#)←コメント行
OR
・行頭が行末(^$)←空行

【メモ】Linuxのディレクトリ構造(FHS)

このプログラムどこに置いたらいいの?みたいな時に手癖でやってたらFHS(Filesystem Hierarchy Standard)理解しろと怒られた気がしたのでちゃんと見直したい。

Wikipediaより抜粋

ディレクト 説明
/ ファイルシステム階層全体の第一階層(ルートディレクトリ)
/bin シングルユーザモード(英語版)で必要となる一般ユーザー向けの基本コマンドの実行ファイル (binaries)。例えばcat、ls、cpなど。
/boot ブートローダー (boot loader) 関連のファイル群。例えば、カーネルや initrd(初期RAMディスク)。
/dev 基本デバイス(device)。例えば、/dev/nullなど。
/etc システム全体に関わる固有設定ファイル群。
/etc/opt /opt/のための設定ファイル群。
/etc/X11 X Window System, version 11 用の設定ファイル群。
/etc/sgml SGML の設定ファイル群。
/etc/xml XML の設定ファイル群。
/home ユーザーの ホームディレクトリ (home directory) 群。セーブファイル、個人用設定など。別パーティションとすることが多い。
/lib /bin/ や /sbin/ にある実行ファイルの基本となるライブラリ (library) 群。
/media CD-ROMなどのリムーバブル媒体 (media) のマウントポイント(FHS-2.3 で追加)
/mnt ファイルシステムの一時マウントポイント (mount)
/opt オプション (option) のアプリケーションソフトウェアパッケージのインストール用
/proc カーネルやプロセス (process) の状態に関する情報を主にテキストで示す仮想ファイルシステム(例えば、実行時間やネットワークなど) 用。procfsのマウントポイント。
/root rootユーザのホームディレクトリ。
/run 実行時の可変データー。FHS3.0より新設。
/sbin システム管理系コマンドの実行ファイル群(例えば、init、ip、mount)。(system binaries)
/srv システムによって提供された (served) サイト固有のデータ
/tmp 一時ファイル置場 (temporary files)。/var/tmp も参照されたい。リブート時に内容が保持されない。
/usr 大部分のマルチユーザ(全ユーザのための)ユーティリティとアプリケーションを格納する。ホスト固有の情報や時間の経過に伴い変化する情報は他の場所に保存される(前者は /etc、後者は /var の下)。共有可能でリードオンリーのデータであるべき。この事は /usr がFHS準拠の様々なホスト間で共有可能であるべき事を意味しており、書き込みができないようにしなければいけない
/usr/bin 一般ユーザ向けだが基本的ではないコマンドの実行ファイル
/usr/include 標準 includeファイル群
/usr/lib /usr/bin/ や /usr/sbin/ にある実行ファイルの基本となるライブラリ (library) 群。
/usr/sbin 基本的でないシステム実行ファイル群。例えば、各種ネットワークサービス用デーモンなど。
/usr/share アーキテクチャに依存しない共有 (shared) データ
/usr/src ソースコード (Source code)。例えば、カーネルソースコードとそのヘッダファイル群など。
/usr/X11R6 X Window System, Version 11 Release 6
/usr/local ホスト固有のローカル (local) データを格納する第三階層。通常、さらにサブディレクトリとして bin/、lib/、share/ などを持つ[29]
/var 可変 (Variable) なファイル群。内容が常に変化するようなファイル群を格納する。例えば、ログ、スプール、一時的電子メールファイルなど。別パーティションとすることもある。
/var/cache アプリケーションのキャッシュデータ。時間のかかるI/Oや計算によって生成されたデータなど。従って再度生成することも可能なので、削除してもデータが失われるわけではない(時間は無駄となる可能性がある)。
/var/lib 状態情報。プログラムの実行によって更新された永続性データなど。例えばデータベース、パッケージングシステムのメタデータなど。
/var/lock ロック(Lock)ファイル群。使用中リソースを保持するファイル。
/var/log ログ(Log)ファイル。各種ログ。
/var/mail ユーザーのメールボックス(mail-box)
/var/run 最近のブート以降の走行中(runing)システムに関する情報。例えば現在ログイン中のユーザー、走行中のデーモンなど。FHS3.0 では /var/run は /run に置き換えられる。システムは後方互換性のために /var/run を提供するか、/var/run から /run へのシンボリックリンクを提供しなければならない。
/var/spool 処理待ち状態のタスクのスプール(spool)。例えばプリントキュー、未読メールなど。
/var/spool/mail 互換のために残された、かつてのユーザーのメールボックス(mail-box)の場所。
/var/tmp 一時ファイル置場(Temporary files)。 /tmp と異なり、リブートしても内容が失われることはない。

【メモ】MySQLでDBとテーブルのサイズを確認するSQL

【参考】

MySQLでDBとテーブルのサイズを確認するSQL - Qiita
じょうきのまんまコピペです。自分メモ用。

SQL

DB
SELECT 
    table_schema, sum(data_length) /1024/1024 AS mb 
FROM 
    information_schema.tables  
GROUP BY 
    table_schema 
ORDER BY       
    sum(data_length+index_length) DESC;
テーブル
use 対象DB;

SELECT  
    table_name, engine, table_rows AS tbl_rows,
    avg_row_length AS rlen,  
    floor((data_length+index_length)/1024/1024) AS 総容量(MB),
    floor((data_length)/1024/1024) AS データ容量(MB),
    floor((index_length)/1024/1024) AS インデックス容量(MB)
FROM 
    information_schema.tables  
WHERE
    table_schema=database()  
ORDER BY
    (data_length+index_length) DESC;  
binlogの確認

DBが増える可能性が低いのであれば、update/insertが増えたことによる
レプリケーション用のbinlogの増大が考えられます。
# binlogの確認
mysqlbinlog [options] LOG_FILE

【macOS】MacBook12インチに有線LAN:エレコム 有線LANアダプタEDC-GUA3-B→ドライバ有効化までのメモ

【状況】

MacBook12インチ(USB-CハブとしてAnskp HDMI/USB3.0/Type-Cハブ接続済み)に有線LANをつけたくて

エレコム 有線LANアダプタEDC-GUA3-B
を買って、説明書通りドライバをDLしてインストール、の後USBポートに繋いでみたけどネットワーク機器として有効にならない。OSXもといmacOSに慣れていないので半日ほどハマってしまった。

【原因及び解決】

エレコムのドライバをインストールしたが、macOSのセキュリティ設定で無効化されていた。
[システム環境設定]-[セキュリティとプライバシー]-[一般]でドライバがブロックされていたため解除した
→接続できた。

以上