ESXiでプライベートなvSwithに接続するデータベースVMを作ってみた

データベースをプライベートサブネットに秘匿するのはAWSでもESXiでも同様にセキュリティ上で大事なことなので下記URLの記事を参考にメモしました。

ESXi】仮想スイッチとポートグループを作成してVMにネットワークを追加

1.物理NICによるアップリンクのない標準仮想スイッチを追加する

左ペインの[ネットワーク] を開いて[仮想スイッチ]タブの[標準仮想スイッチの追加]からvSwitch3を追加して行きます。

[ポートグループ]タグから、先ほど追加したvSwitch3 を[仮想スイッチ]に持つ、「Local Network」という名前(名前は適当でよい)のポートを[ポートグループの追加]から追加します。

2.mariaDBデータベースサーバーVMを作る

「DB Server」という名前でmariaDBデータベースサーバー用VMを作ります。

環境 要件
CPU
メモリ 8GB
ストレージ 100GB(シンプロビジョニング)
起動オプション EFI起動
OS CentOS7

先ほど作った、「Local Network」ポートを追加します。

前回の「Web Server」同様、パワーオンしてインストレーションDVDを起動します。今回はベースを「インフラストラクチャーサーバー」「mariaDB データベースサーバー」「開発ツール」にチェックを入れます。

ネットワーク設定は今回、以下の通りにしました。

プロパティ アドレス
IPアドレス 172.16.1.100
ネットマスク 23
ゲートウェイ 172.16.1.1
DNSサーバー 172.16.1.1
ホスト名 maria.stuffy.jp

ネットワークの設定でEthernet(ens192) を接続済み[ON] にしてからユーザー、パスワードを設定して再起動します。

3.「Web Server」に2枚目のポートグループを追加する。

既存のサブネット[192.168.1.0/24]である「VM Network」に加えて新規ネットワークアダプタ「Local Network」を追加、設定していきます。

# ip a で2枚目のens224が追加されていることを確認。

ここからはDEVICEの名前変更、2つ目のvNICのアドレスを [172.16.1.10] として固定IPの払い出し、DHCP無効のコマンドを設定しています。systemctl restart network でネットワークマネージャーを再起動して設定を反映します。

[root@www ~]# nmcli c a type ethernet ifname ens224 con-name ens224(DEVICE名変更
接続 'ens224' (80221264-033b-4385-8383-b893dd56dfdc) が正常に追加されました。

[root@www ~]# nmcli d s
DEVICE  TYPE      STATE                     CONNECTION
ens192  ethernet  接続済み                  ens192
ens224  ethernet  接続中 (IP 設定を取得中)  ens224
lo      loopback  管理無し                  --

[root@www ~]# nmcli c m ens224 ipv4.address 172.16.1.10/23
(固定IP払い出し [root@www ~]# nmcli c modify ens224 ipv4.method manual
(DHCP無効 [root@www ~]# nmcli d s DEVICE TYPE STATE CONNECTION ens192 ethernet 接続済み ens192 ens224 ethernet 接続中 (IP 設定を取得中) ens224 lo loopback 管理無し -- [root@www ~]# systemctl restart network
(network再起動 [root@www ~]# nmcli d s DEVICE TYPE STATE CONNECTION ens192 ethernet 接続済み ens192 ens224 ethernet 接続済み ens224 lo loopback 管理無し --

4.「Web Server」から 「DB Server」に ping を打ってみます。

疎通確認・・・

[root@www ~]# ping 172.16.1.100
PING 172.16.1.100 (172.16.1.100) 56(84) bytes of data.
64 bytes from 172.16.1.100: icmp_seq=1 ttl=64 time=0.159 ms
64 bytes from 172.16.1.100: icmp_seq=2 ttl=64 time=0.091 ms
64 bytes from 172.16.1.100: icmp_seq=3 ttl=64 time=0.075 ms
64 bytes from 172.16.1.100: icmp_seq=4 ttl=64 time=0.078 ms
64 bytes from 172.16.1.100: icmp_seq=5 ttl=64 time=0.078 ms
64 bytes from 172.16.1.100: icmp_seq=6 ttl=64 time=0.077 ms
^C
--- 172.16.1.100 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 4999ms
rtt min/avg/max/mdev = 0.075/0.093/0.159/0.029 ms

5.「Web Server」から「DB Server」にパスワードでSSHログインしてみます。

「Local Network」 のトポロジー

お疲れ様でした。

AWS SCPオプションでつまづく

AWS にデータベース用のインスタンスをプライベートネットワーク上に作成、ローカルからSCPを使ってキーファイルを転送しようとしたところ、connection refused で弾かれました。コマンドのポート指定オプションを間違えていたようです。

$ scp -P 20022 -i /path/to/identityfile localfilename remoteuser@hostname:~/

大文字の-Pで転送できました。(ホッ

追記) 踏み台サーバーからログインするために.ssh/config のパーミッション設定は必須でした。

# chmod 700 ~/.ssh
# chmod 600 ~/.ssh/config

root になれるユーザーの制限

今回は、su コマンドでroot になれるユーザーを制限するPAM を設定していきます。まず、/etc/login.defs の最下行に、

SU_WHEEL_ONLY yes

を追記。次に、useradd コマンドで、ユーザーをwheel グループに加えます。

usermod -aG wheel username

つづいて、/etc/pam.d/su に以下の行を追加、

auth  required  pam_wheel.so use_uid group=wheel

上記設定で、root になれるユーザーをwheel グループのみに制限できます。

参考URL: http://www.atmarkit.co.jp/ait/articles/0108/18/news003_3.html

CentOS7 の公開鍵認証でのSSHログイン

今回ははCentOS7 における、公開鍵認証でのTeraTerm ターミナルエミュレータによるSSH ログインを設定していきます。

まず、wheel グループに加えたユーザーのホームディレクトリで公開鍵を保存する隠しディレクトリ、.ssh を作成します。つづいてroot にスイッチしてパーミッションを一時的に777 に設定します。

$ mkdir .ssh
$ su (switch user してroot のパスワード入力
# chmod 777 .ssh

次に、TeraTerm のメニューバーの[設定]-[SSH鍵生成(N)…] から公開鍵と秘密鍵を[生成(G)] ボタンをクリックするとパスフレーズを求められるので入力、再入力をして生成します。

[公開鍵の保存] と[秘密鍵の保存] ボタンをクリックしてそれぞれ、id_rsa.pub, id_rsa という名前(デフォルト)でホストの適当なフォルダに保存します。

次にエクスプローラで、id_rsa.pub ファイルをホームディレクトリ上のTeraTerm 画面にドラッグ&ドロップすると以下の画面が表示されるので下図のように、SCP:[.ssh] と入力してファイル転送します。

再びターミナルに戻り、転送した公開鍵をauthorized_keys という名前に変更。(WinSCPなど複数の鍵を追加するときは、cat id_rsa.ppk >> authorized_keys など)鍵のパーミッションを600 に、.ssh ディレクトリのパーミションを700 に変更します。

# cd .ssh
# mv id_rsa.pub authorized_keys
# chmod 600 authorized_keys
# chmod 700 .

それから/etc/pam.d/sshd に以下の行を追記、

account    required     pam_nologin.so
account    required     pam_access.so (追記

デフォルトでは、/etc/security/access.conf を参照しますが、

account required  pam_access.so accessfile=/dir/to/ssh_access.conf

で指定したパスの.conf ファイルを指定することもできます。

一方、/etc/security/access.conf に +:wheel:ALL と、+:username:ALL と、– : ALL: ALL を追記。

# Disallow non-local logins to privileged accounts (group wheel). (の付近
#
#-:wheel:ALL EXCEPT LOCAL .win.tue.nl
+:wheel:ALL (追記
+:username:ALL(追記

# All other users should be denied to get access from all sources.
#- : ALL : ALL (その他のすべてのユーザーを拒否
- : ALL : ALL (wheel グループ以外をアクセス制限するには、- : ALL EXCEPT wheel : ALL

最後に/etc/ssh/sshd_config に公開鍵認証の設定をして

#ServerKeyBits 1024
ServerKeyBits 2048 (たぶん、必要

#PubkeyAuthentication no
PubkeyAuthentication yes (公開鍵認証をyes

#PasswordAuthentication yes
PermitEmptyPasswords no
PasswordAuthentication no (パスワード認証をno

sshd 再起動、ログアウトします。

# systemctl restart sshd

TeraTerm の新しいショートカットのプロパティを以下の属性で作ると、1クリックで公開鍵認証でログインできると思います。

"C:\Program Files (x86)\teraterm\ttermpro.exe" localhost:22 /ssh2 /auth=publickey  /user=username /ask4passwd /keyfile="C:\pass/to/id_rsa"

ログインできない場合、原因はいろいろあると思いますがfirewalld でのポート開放(SSHのポート番号の変更をしたとき。)、鍵やディレクトリの所有権、SeLinux のコンテキストの確認、PAM の書式(設定ファイルの行の前後位置)、ローカル、リモートでのアクセス制限、IPの設定はどうなっているなどを確認してみて下さい。

参考URL:http://qiita.com/tjinjin/items/ca6f5518e881bdf5488c

fail2banでSSHのセキュリティ

今回はSSHのセキュリティソフト、fail2ban をご紹介します。

yum でインストール

# yum enablerepo=epel install fail2ban

/etc/fail2ban/jail.conf 設定ファイルを開き、アクセス禁止時間、最大パスワード許容回数をコメント解除します。

[DEFAULT]
bantime = 3600
[SSHD]
enabled =true
maxretry = 5

/etc/fail2ban/fail2ban.local ファイルを作り、以下の設定をします。

[Definition]
logtarget = /var/log/fail2ban.log

サービスとして起動します。

# service fail2ban start

参考URL:http://s.webry.info/sp/vogel.at.webry.info/201506/article_6.html

SSHのリモートアクセス設定

リモートでSSHを許可するときにユーザーアクセス制限、ホストアドレス制限をするpam の使用はセキュリティ上、有効です。

まず、/etc/ssh/sshd_configでpamを有効に設定。

UsePAM yes

/etc/pam.d/sshd の account required に以下の2行を追加。

account    required     pam_access.so
account required pam_access.so accessfile=/etc/security/access.conf

/etc/security/access.conf で許可するユーザーとアドレスを設定。

+ : gusachan : 192.168.24.0/24
- : gusachan : ALL EXCEPT 114.13.80.173

SSHサービス再起動して設定を反映。

service sshd restart

Linuxのパスワードポリシー

/etc/pam.d/system-auth のauth行にpam_tally2.soを新規追加

auth        required      pam_env.so
auth        required      pam_tally2.so deny=3 even_deny_root unlock_time=1800 root_unlock_time=1800

deny=回数

unlock_time=ロック時間(秒)

even_deny_root 管理者アカウントも制限

でもブルートフォースアタック(パスワード総当たり攻撃)されると、設定が裏目にでて永遠にログインできないことになりませんかね。パスワードを/etc/pam.d/passwdでcracklib.so設定して保護すればいいだろぉ・・・あっ、そっかぁ~。(池沼)

参考URL http://hogem.hatenablog.com/entry/20121107/1352297631

ターミナルエミュレータにConsolasフォントを入れる

きっかけは、/tmpディレクトリに謎のvirtual-userディレクトリが大量に作られるというバグ。こちらのサイトに

増え続ける謎のディレクトリ | Ari’s Blog

/etc/rc.d/rc.sysinitの #Clean up various /tmp bitsの項目の最下行に/tmp/virtual-*を追加しよとあるので追加しようと試みましましたが、半角バックスラッシュが入力できませんでした。

・・・\
/tmp/virtual-*

Google先生に聞いてみるとConsolasフォントをインストールしてレジストリからFontLink機能をConsolasに追加、

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink

を開いて、ConsolasのREG_MULTI_SZに

MEIRYOKECONSOLE.TTF
MSGOTHIC.TTC,MS UI Gothic

TERATERM.INIのVTFontを再設定すると幸せになれるらしいです。

;VTFont=Terminal,0,-19,128(コメントアウト)
VTFont=Consolas,0,-19,128

ちなみにWordpress上で表示させたいときは、欧文フォントを指定してあげます。

<span style="font-family: Arial;">\</span>

参考URL http://tm.root-n.com/misc:consolas

http://d.hatena.ne.jp/ShiroKappa+_tech/20120303/1330727092

http://www.accacom.jp/blog/wordpress/170

TeraTermカスタムショートカット

毎回、SSH接続するときにユーザー名を入力する手間に辟易していたところ、TeraTermの便利なショートカットカスタム方法がヒットしたのでシェアしますね。

Tera TermでSSH接続する際に、自動ログインするショートカットを作成 – サラリーマンから起業するリアル

ショートカットのプロパティを開いて、リンク先を下記のように設定します。

"C:¥Program Files¥teraterm¥ttermpro.exe"  対象サーバ:22  /ssh2  /auth=publickey /user=ログインユーザ名 /ask4passwd /keyfile="証書ファイルの絶対パス"

property_teraterm

 

VirtualBoxのホストもカスタムショートカットを作ればデスクトップからダブルクリックひとつでログインできて便利ですね。