nginxでのリダイレクト

nginxが.htaccess使えないの忘れていたので、HTTPで来たアクセスをHTTPSにリダイレクトする設定を今更書いた

server {
    listen       80;
    server_name  www.jhhk-family.net;
    return 301 http://www.jhhk-family.net/$request_uri;
}

SMTPSとIMAPSで安全なセキュアなメールサーバーを作る

AWSにメールサーバーを移設した際に、STARTSSLからSMTPSとIMAPSの環境に変更したので、そのメモ


環境:
AWS EC2 (Amazon Linux AMI 2017.09.1 (HVM), SSD Volume Type)

セキュリティグループ:
22/tcp , 25/tcp, 80/tcp(Let’s Encryptの認証用に一時的に開ける), 465/tcp, 993/tcp を開けておく。


必要なパッケージをインストール

yum install postfix dovecot cyrus-sasl cyrus-sasl-plain

LetsEncryptでメールサーバー用の証明書を発行
wordpress をELB+EC2でHTTPS通信させる
を参照


(SMTPSに必要な箇所のみ記載)
/etc/postfix/postfix.cf

smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unauth_destination

smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.jhhk-family.net/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.jhhk-family.net/privkey.pem
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
tls_high_cipherlist = kEECDH:+kEECDH+SHA:kEDH:+kEDH+SHA:+kEDH+CAMELLIA:kECDH:+kECDH+SHA:kRSA:+kRSA+SHA:+kRSA+CAMELLIA:!aNULL:!eNULL:!SSLv2:!RC4:!MD5:!DES:!EXP:!SEED:!IDEA:!3DES
smtp_tls_ciphers = high
smtpd_tls_ciphers = high
smtpd_tls_mandatory_ciphers = high

/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
#  -o milter_macro_daemon_name=ORIGINATING

smtpd_client_restrictionsは未設定。必要に応じて。

/etc/dovecot/conf.d/10-auth.conf

auth_mechanisms = plain
!include auth-system.conf.ext

/etc/dovecot/conf.d/10-ssl.conf

ssl = yes
ssl_cert = </etc/letsencrypt/live/mail.jhhk-family.net/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.jhhk-family.net/privkey.pem
ssl_protocols = !SSLv2 !SSLv3 !TLSv1
ssl_cipher_list = HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!RC4:!3DES:!RSA

/etc/dovecot/conf.d/10-master.conf

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

最後にpostfix、dovecot、saslを起動する。

service saslauthd start
service postfix start
service dovecot start

randomモジュールを使う

pythonのramdomモジュールを使って、20人を超える飲み会の座席を固めてみる。

ramdomモジュールは、loop内で使っても、n個 – 1とかには出来ないらしく、10枚のカードから1枚選んで、また10枚の中に戻す。と言った動きになる。

member.yml

※氏名は平成21年生まれの名前ランキングから抜粋

[code]
member:
– "佐藤 優衣"
– "田中 美羽"
– "佐藤 花音"
– "鈴木 大翔"
– "吉田 悠人"
– "田中 優衣"
– "高橋 美結"
– "佐藤 愛莉"
– "鈴木 杏奈"
– "吉田 百花"
– "佐藤 翔太"
– "山口 結愛"
– "田中 大翔"
– "伊藤 悠真"
– "加藤 颯真"
– "佐藤 優成"
– "森 悠真"
– "中村 優希"
– "田中 悠翔"
– "鈴木 悠真"

table:
– A-1
– A-2
– A-3
– A-4
– A-5
– A-6
– B-1
– B-2
– B-3
– B-4
– B-5
– B-6
– C-1
– C-2
– C-3
– C-4
– C-5
– C-6
– C-7
– C-8
[/code]

lottery.py
[code]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os
import yaml
import random

base = os.path.dirname(os.path.abspath(__file__))
input = (os.path.join(base,’member.yml’))

f = open(imput, ‘r’)
result = yaml.load(f)
f.close()

members= (random.sample(source[‘member’],len(source[‘member’])))
tables = (source[‘table’])

for (t,m) in zip(tables,members):
print(t + ‘\t’ + m)

[/code]

[code]
(random.sample(source[‘member’],len(source[‘member’])))
[/code]

がramdomモジュールを使っている箇所で、
random.sample(配列,何個取るか?)と使う。

全メンバーを1度のみ抽出するので、len(source[‘member’])としている。

MySQL+EmbulkでBQにデータを送ってみる

MySQLのデータをBigqueryに転送する。

固定のテーブルを送信する方法は
https://qiita.com/tashiro_gaku/items/f7fa0f1a99c759d947a7
とかに書いているけどけど、やりたかったのは

1) ログ保存テーブルは、updateカラムを見て差分でBigqueryに送信する。
2) 一部のテーブルは、全レコードBigqueryに送信する。
3) 上記、1、2の対象テーブルはconfファイルを読んで動的に動かしたい
(出来れば運用側で勝手に対象テーブルの追加、削除をやって欲しい。。。)

Github

MakeJSON.py         # jsonとyamlを生成
Execue_embulk.py    # Embulk転送の実行
conf/embulk_json/   # 対象テーブルを元にBQ転送時の定義ファイルが作成される
     embulk_yaml/   # 対象テーブルを元にEmbulk実行時の定義ファイルが作成される
     keys/          # BQ接続時のjson_keyを置く
     conf.yaml      # MySQLのログイン情報、対象テーブルの情報を定義
     embulk_tmp     # Embulkのyaml生成で使うテンプレート

使い方
MakeJSON.pyの実行はいつでもいいがExecue_embulk.pyは前日分も送信するので、日付が変わってから実行する。

0 23 * * * python3 MakeJSON.py
30 0 * * * python3 Execue_embulk.py

wordpress をELB+EC2でHTTPS通信させる

wordpressの移設に少し手間取ったのでメモ

wordpressやELB、EC2の動かし方は割愛するが、普通のやり方。

ただ、以前に借りていたVPSでLets EncryptでHTTPS化していたブログを移設した。

ハマった所1: wp-adminのリダイレクトループ
管理画面での SSL 通信

リンク先に書いているけど、wp-includes/default-constants.phpの、

[code]
if ( !defined( ‘FORCE_SSL_ADMIN’ ) ) {
if ( ‘https’ === parse_url( get_option( ‘siteurl’ ), PHP_URL_SCHEME ) ) {
define( ‘FORCE_SSL_ADMIN’, true );
} else {
define( ‘FORCE_SSL_ADMIN’, false );
}
}
[/code]

[code]
if ( !defined( ‘FORCE_SSL_ADMIN’ ) ) {
if ( ‘https’ === parse_url( get_option( ‘siteurl’ ), PHP_URL_SCHEME ) ) {
define( ‘FORCE_SSL_ADMIN’, true );
if ( ! empty( $_SERVER[‘HTTP_X_FORWARDED_PROTO’] ) && $_SERVER[‘HTTP_X_FORWARDED_PROTO’] == ‘https’ ) {
$_SERVER[‘HTTPS’]=’on’;
}
} else {
define( ‘FORCE_SSL_ADMIN’, false );
}
}
[/code]

に変更する。

ハマった所2: WPやプラグイン更新のFTP設定
config.phpの末尾に、

[code]
define(‘FS_METHOD’,’direct’);
[/code]

を記載する。

dirnameが無い!?

centosでdirnameを実行すると、そんなコマンド無いよ!と怒られたのでメモ
※他のメンバーがOSインストールしたんだけど、baseだけしか入れてないのかな?

# dirname
dirname: missing operand
詳しくは `dirname –help’ を実行して下さい.

[code]
yum -y install coreutils.x86_64

[/code]

powershellでCPU情報を取得するアレコレ

[code]
# cpu情報を表示
Get-WmiObject -Class Win32_Processor

# 物理コア数を表示
Get-WmiObject -Class Win32_Processor | Format-List NumberOfCores

# 論理コア数を表示(THH)
Get-WmiObject -Class Win32_Processor | Format-List NumberOfLogicalProcessors
[/code]

と、色々と調べたけど、
[code]
Get-WmiObject -Class Win32_Processor | Format-List NumberOfCores, NumberOfLogicalProcessor
[/code]

が一番すっきりする

コマンドからWindowsFilewallを操作する

上手く動かねないじゃん!と思ってググった備忘録

一般的な事かもしれないけど、書き方のルールは以下の通り

  1. rule= や name=はダブルクォテーションで囲う
  2. profile=で複数プロファイルを指定する時もダブルクォテーションで囲う
  3. 既存のルールには同じ名前でプロファイルが異なる物が多い。
  4. その場合は設定変更の場合は、対象をユニークになるように指定する必要がある。
    netsh advfirewall firewall show rule name=”Windows リモート管理 (HTTP 受信)” dir=in
    → 2つある
    netsh advfirewall firewall show rule name=”Windows リモート管理 (HTTP 受信)” dir=in profile=”domain,private”
    → ユニーク
    netsh advfirewall firewall show rule name=”Windows リモート管理 (HTTP 受信)” dir=in profile=”pblic”
    → ユニーク

  5. 変更の場合は、set name=<対象の名前> <対象をユニークにする条件> new <変更後の設定> と書く
  6. netsh advfirewall firewall set rule name=”Windows リモート管理 (HTTP 受信)” dir=in profile=”domain,private” new profile=any

パフォーマンスカウンタのネットワークのスケール

スケール調整の覚書

グラフ枠のプロパティ/グラフ/垂直スケール の最大値を100から1000に上げる

NetworkInterface/NIC名/Bytes Sent/sec
 ・・・ GigaNicを積んでいる場合、スケールは0.00001 でxxxMB/s
     ※グラフ赤線

NetworkInterface/NIC名/Packet Sent/sec
 ・・・ GigaNicを積んでいる場合、スケールは0.001 でxxxMbps
     ※グラフ黄緑線

perfmon_20160913

windows2012のQoSが効かない場合の注意点

新規にwindows2012サーバーを準備し、WindowsでポリシーベースのQOSを使ってS3へのアップロードスピードを帯域制御する方法をトレースしてみた。

QoSの設定はこの通りだが、「出力方向のスロットル率を指定する」には注意が必要。

検証では200MBbpsに設定を行ったが、物理1Gの回線環境で800MBps以上トラフィックが流れてしまう。
qos_1

qos_2

MSに問い合わせをして調査、検証を行った結果、

windows2012のインストール時点のQoSのバグっぽい事まで突き止める。
(Windowsアップデートしたら動きが改善されているので、どこかでパッチが当たった模様)

Windowsアップデート前: 制限の設定値の10倍が実際の制限値となる。
 ・ QoSを200MBps(204800 KBps)に制限 → トラフィックが200MBps以上
 ・ QoSを 20MBps(20480 KBps) に制限 → トラフィックは200MBps以下になる

Windowsアップデート後: 制限の設定値と同じ値が実際の制限値となる。
 ・ QoSを200MBps(204800 KBps)に制限 → トラフィックが200MBps以下になる

MSからKB番号の返答が来たら追記します。