opendkimを設定する

/etc/opendkim/keys/にキー作成

# opendkim-genkey -D /etc/opendkim/keys/

/etc/opendkim.confを編集

確認・変更箇所は以下

Mode  s
LogWhy        no
Domain *
Selector        default
KeyFile /etc/opendkim/keys/default.private
InternalHosts refile:/etc/opendkim/TrustedHosts

当該サーバをメール送信サーバとして他の機器から使う場合、 /etc/opendkim/TrustedHosts に内部ネットワークを記述する。

例)

192.168.100.0/24
192.168.101.0/24

opendkimを再起動

/etc/rc.d/init.d/opendkim restart

DNSに反映

/etc/opendkim/keys/default.txt の内容をdnsサーバに登録する

以上

【Java】 Javaの暗号制限を解除する

Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files はJava 9 および Java 8 Update 151以降では不要です。
java.securityファイルを編集し、crypto.policy=unlimitedとします。

例:

# vi /usr/java/jre1.8.0_151/lib/security/java.security
:
(823行目)
#crypto.policy=unlimited
↓ コメントを外す
crypto.policy=unlimited

【CentOS7】 firewalldを利用しているサーバで、特定のポートを公開する / 公開ポートを閉める

80番ポートを空ける

# firewall-cmd --zone=public --add-port=80/tcp --permanent
# firewall-cmd --reload

80番/443番ポートを空ける

# firewall-cmd --zone=public --add-port=80/tcp --permanent
# firewall-cmd --zone=public --add-port=443/tcp --permanent
# firewall-cmd --reload

連続したポートを空ける(例:45000-45300番ポートを空ける)

# firewall-cmd --zone=public --add-port=45000-45300/tcp --permanent
# firewall-cmd --reload

80番ポートを非公開にする

# firewall-cmd --zone=public --remove-port=80/tcp --permanent
# firewall-cmd --reload

80番/443番ポートを非公開にする

# firewall-cmd --zone=public --remove-port=80/tcp --permanent
# firewall-cmd --zone=public --remove-port=443/tcp --permanent
# firewall-cmd --reload

連続したポートを非公開にする(例:45000-45300番ポートを閉める)

# firewall-cmd --zone=public --remove-port=45000-45300/tcp --permanent
# firewall-cmd --reload

【CentOS7】 MySQL InnoDB Cluster の構築

詳しくは https://dev.mysql.com/doc/refman/5.7/en/mysql-innodb-cluster-production-deployment.html をご確認ください。


はじめに

CentOS7サーバを3から4台くらい起動します。
最低3台のDBサーバと一台のルーターサーバが必要です。
ルーターサーバはDBサーバと同居できますが、できれば分離した方が良いでしょう。
そうすると4台が最小構成となります(DBサーバx3台+ルーターサーバx1台)


初期設定

全台ともに
#vi /etc/selinux/config とし

SELINUX=disabled

としてから reboot し、

# yum install -y http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
# yum remove -y mysql-libs

を実行しておきます。


dbサーバの設定

下記の設定を3台かそれ以上のdbサーバに適用してください。

# yum install -y mysql-server mysql-shell
# service mysqld start

$ cat /var/log/mysqld.log | grep temporary とし、出てきたパスワードで mysql -u root -p とします。

SET PASSWORD = "MySQL_5.7";
UNINSTALL PLUGIN validate_password;
SET PASSWORD = "なにがしかのパスワード";
\q

$ mysqlsh とし、

    >dba.configureLocalInstance('root@localhost:3306')

    Please provide the password for 'root@localhost:3306':

    Detecting the configuration file...
    Found configuration file at standard location: /etc/my.cnf
    Do you want to modify this file? [Y|n]:  [Y|n]: Y

    MySQL user 'root' cannot be verified to have access to other hosts in the network.

    1) Create root@% with necessary grants
    2) Create account with different name
    3) Continue without creating account
    4) Cancel
    Please select an option [1]: 2

    account name= clusteradmin
    >\q

# service mysqld restart します。


クラスタの作成

クラスタのうちのどれかから以下を実行します。

$ mysqlsh

    dba.checkInstanceConfiguration('clusteradmin@クラスタ内dbサーバ1のIPアドレス:3306')
    dba.checkInstanceConfiguration('clusteradmin@クラスタ内dbサーバ2のIPアドレス:3306')
    dba.checkInstanceConfiguration('clusteradmin@クラスタ内dbサーバ3のIPアドレス:3306')
    shell.connect('clusteradmin@クラスタ内dbサーバ1のIPアドレス:3306')
    var cluster = dba.createCluster('Cluster001(←クラスタ名、任意の名前でokです)')
    cluster.addInstance('clusteradmin@クラスタ内dbサーバ2のIPアドレス:3306');
    cluster.addInstance('clusteradmin@クラスタ内dbサーバ3のIPアドレス:3306');

クラスタ化されたコンフィグの保存

各dbサーバで修正されたコンフィグをセーブします。
三台かそれ以上のdbサーバすべてで実行してください。

$ mysqlsh

    >dba.configureLocalInstance('clusteradmin@localhost:3306')

スレーブサーバの場合、以下のようになります

    Do you want to disable super_read_only and continue? [y|N]:y

routerサーバの設定

通常、dbサーバではないサーバでrouterを実行します。

# yum install -y mysql-router mysql-shell
$ mysqlrouter --bootstrap clusteradmin@クラスタ1のIPアドレス:3306 --user=mysqlrouter --conf-base-port 3306
# service mysqlrouter start

おまけ

ちゃんと動いてるかどうかテスト

# クラスタ内dbサーバ1が r/w serverになっていると思うので、 rootでログインし、以下のようにします。 本番環境ではadminの接続元を制限し、パスワードを設定してください。
create user admin@'%' identified by 'admin';
grant all on *.* to admin@'%';

# ルーターサーバで以下を実行し、sqlがクラスタ内dbサーバすべてに反映されているか確認します。
$ mysql-shell
mysql-sql> \connect admin@10.10.16.209   //ルーターサーバ自身のアドレス
create database testbase;
use testbase;
CREATE TABLE item (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(10),
  description VARCHAR(30),
  price INT UNSIGNED,
  created_at DATETIME
);

【CentOS7】 acme-tinyをyumでインストールし、let’s encryptでSSL証明書を取得する

acme-tinyはapacheの再起動とか余計なことをしないので、certbotより使いやすいと思います。
詳しくは https://github.com/diafygi/acme-tiny をご参照ください。

認証したいドメイン名が 171220.0x0c.info で、httpサーバに apache 2.4.8以降を用いる場合で説明します。


Step 1

このへんは環境に合わせてください↓

yum install httpd mod_ssl
yum install epel-release 
yum install acme-tiny

Step 2

acme-tinyをインストールすると /etc/httpd/conf.d/acme.conf/var/www/challenges/ ができるので、apacheをリロードするなりここから起動するなりします。

service httpd start

Step 3

アカウントキー作成

openssl genrsa 4096 > /var/lib/acme/private/account.key

Step 4

ドメイン用の秘密キー作成

openssl genrsa 4096 > /var/lib/acme/private/171220.0x0c.info.key

Step 5

リクエスト作成

openssl req -new -sha256 -key /var/lib/acme/private/171220.0x0c.info.key -subj "/CN=171220.0x0c.info" > /var/lib/acme/csr/171220.0x0c.info.csr

Step 6

let’s encryptにリクエストする

/usr/sbin/acme_tiny --chain --account-key /var/lib/acme/private/account.key --csr /var/lib/acme/csr/171220.0x0c.info.csr --acme-dir /var/www/challenges/ > /var/lib/acme/certs/171220.0x0c.info.crt

Step 7

できあがった証明書と秘密鍵をコピーしてapacheをリロード。
このあたりも環境に合わせてください。

cp /var/lib/acme/private/171220.0x0c.info.key /etc/pki/tls/private/localhost.key
cp /var/lib/acme/certs/171220.0x0c.info.crt /etc/pki/tls/certs/localhost.crt
service httpd reload

Step 8

以下のようなスクリプトを作り、一ヶ月に一回cronで回す。

#!/bin/sh
/usr/sbin/acme_tiny --chain --account-key /var/lib/acme/private/account.key --csr /var/lib/acme/csr/171220.0x0c.info.csr --acme-dir /var/www/challenges/ > /var/lib/acme/certs/171220.0x0c.info.crt || exit
cp /var/lib/acme/certs/171220.0x0c.info.crt /etc/pki/tls/certs/localhost.crt
/usr/sbin/service httpd reload

おまけ:nginxの場合

上記Step 5とStep 6の間に、以下のようにnginxを設定し、リロードしておきます。

server {
        listen 80 default_server;

の下に以下のように設定します。

        #for acme-tiny
        location /.well-known/acme-challenge/ {
            alias /var/www/challenges/;
            try_files $uri =404;
        }

【CentOS7】 ipv6を無効にする

Step 1

/etc/sysctl.conf に

net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1

の二行を追加する。

Step 2

/etc/sysconfig/network-scripts/ifcfg-*IPV6INIT=yes の記述があれば、 IPV6INIT=no に変更する。

Step 3

/etc/hosts にipv6ローカルアドレスの記述(::1から始まる行)があればコメントアウトする。

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

Step 4

再起動する。
# reboot