GCPのUbuntuのハードディスクを増やす

Bitcoinのブロックがでかくて容量がなくなりました。さっきメモリ増やして容量もちょっと増やしたけど、もう容量が100%になりましたので、さらに増やしたいと思います。100%になったらBitcoindが動かなくなりました。今SSD永続ディスクというのを使っていますが、これをどんどん増やすとお金がかかりそうなので、調べたいと思います。

SSD Persistant Diskの50GBだと、1月$11くらい。普通のPersistant Diskの50GBだと、1月$2.6くらい。4倍位違う。普通のやつ50GBにしようと思ったら、200GB未満だと性能悪くなるかもといわれた。200GBにしといた。ここに永続ディスクを追加した後にUbuntuに反映させる方法がのってる。ディスクをつくって、インスタンスに紐づけた後で、フォーマットしてマウントすればいいらしい。

diskを見つける

インスタンスと紐づけたディスクは下記にあるらしい。

$ ll /dev/disk/by-id
scsi-0Google_PersistentDisk_disk-1

フォーマットする

$ mkfs.ext4 -F -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/disk/by-id/scsi-0Google_PersistentDisk_disk-1

マウントする

$ mkdir /mnt/mydisk
$ mount -o discard,defaults /dev/disk/by-id/scsi-0Google_PersistentDisk_disk-1 /mnt/mydisk

再起動時の自動マウント設定

/etc/fstabに下記を追加する

/dev/disk/by-id/scsi-0Google_PersistentDisk_disk-1 /mnt/mydisk ext4 defaults 1 1

権限設定

デバイスの書き込みアクセスをすべてのユーザーに与えます。

chmod a+w /mnt/mydisk

これで出来たのかな?

認識されてるかチェック

$ df -h
/dev/sdb        196G   61M  186G   1% /mnt/mydisk

ちゃんといる。

再起動しても認識されるかチェック

いる。

Ubuntuの時間ずれの解消

Ubuntuの時間がずれてます。7時なのに前日の22時になります。9時間遅れています。

参考:Ubuntu インストールしたらやること:時刻を同期するNTPサーバーを変更する

systemd-timesyncdの状態確認

$ systemctl status systemd-timesyncd
$ systemctl status ntp

ntpが有効になっていました。

systemd-timesyncdを有効化

$ systemctl stop ntp
$ systemctl start systemd-timesyncd

timesyncd.confの設定

$ vim /etc/systemd/timesyncd.conf

timesyncd.confの中身

[Time]
NTP=ntp.ring.gr.jp

systemd-timesyncdを再起動

$ systemctl restart systemd-timesyncd

これで直った。

GCPのCompute EngineのUbuntuでvsftpdを使う

Ubuntu17.04にvsftpdを入れてみる。vsftpdはFTPサーバ。

インストール

$ apt-get install vsftpd

GCPのポートあける

参考:Google Compute Engineのファイヤーウォールを理解する #gcpja

vsftpd.confの設定

参考:
vsftpサーバ 設定ガイド
Ubuntu 12.04 サーバー再構築(10) FTPの導入

$ vim /etc/vsftpd.conf

設定ファイルの内容

listen=YES
#listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
write_enable=YES

chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
allow_writeable_chroot=YES
#chown_uploads=YES

userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/vsftpd.user_list

secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd

FTP接続してみる

$ ftp localhost
$ ftp 123.123.123.123

Let’s Encryptの更新方法と更新の自動化

この投稿でLet’s Encryptで無料でSSL証明書を作りましたが有効期限が切れそうなので更新します。
環境は、サーバはさくらのVPS、OSはUbuntu16.04、webサーバはnginxです。

更新方法

参考:https://certbot.eff.org/#ubuntuxenial-nginx

Automating renewal

有効期限が切れる前に自動的に証明書を更新するようにCertbotを設定することができます。 Let’s Encrypt Encryptは90日間使用できるので、この機能を利用することをお勧めします。このコマンドを実行すると、証明書の自動更新をテストできます。

$ letsencrypt renew --dry-run --agree-tos

Ubuntu Xenial上のCertbotのバージョンに「電子メールなしで登録する!」という警告が表示されるバグがあります。以前にCertbotに電子メールを送っていたとしても。これが起こっても心配しないでください。更新には影響しません。それが正しく動作していると思われる場合は、以下を実行するcronまたはsystemdジョブを追加して自動更新を手配できます

$ letsencrypt renew

更新する

更新はNginxをとめないといけません。止めずにrenewコマンドを実行すると、エラーがでます。

The program nginx (process ID 22394) is already listening on TCP port 80. This
will prevent us from binding to that port. Please stop the nginx program
temporarily and then try again. For automated renewal, you may want to use a
script that stops and starts your webserver. You can find an example at
https://letsencrypt.org/howitworks/#writing-your-own-renewal-script.
Alternatively you can use the webroot plugin to renew without needing to stop
and start your webserver.

手動で更新する

Nginxを停止したのちに、renewコマンドを実行して、Nginxを再開するか、webrootプラグインを利用して、renewコマンドを実行する必要があります。webrootプラグインを利用する場合、80ポートにアクセスしてNot Foundとかにならないようにする必要があるようです。私の場合、httpsでしか接続できない(httpの場合強制的にhttpsにリダイレクトさせる)ようにしてあるので、webrootは使えませんでした。Nginx停止&再開をrenewコマンドの前後でやってみます。

$ sudo systemctl stop nginx.service
$ letsencrypt renew
$ sudo systemctl start nginx.service

自動更新させる

自動更新はcronを使います。

$ cd 
$ vim .crontab

.crontabの中身を下記のようにします。

0 3 15 * * systemctl stop nginx.service; letsencrypt renew; systemctl start nginx.service

あるいは、ログを残しておく場合は下記のようにします。

0 3 15 * * systemctl stop nginx.service; letsencrypt renew > /var/log/cron.log 2>&1; systemctl start nginx.service

crontabに反映させます。

$ crontab .crontab
$ crontab -l
0 3 15 * * systemctl stop nginx.service; letsencrypt renew; systemctl start nginx.service

設定がうまく反映できているかの確認をしたい場合、一旦上記cronの実行頻度を変更してすぐに実行させるようにしつつ、下記のような感じでログ出力したらいいと思います。

* * * * * systemctl stop nginx.service; letsencrypt renew >> /var/log/cron.log 2>&1; systemctl start nginx.service

Ubuntu – cron

Ubuntu16.04です。

cronを使うには、crontabコマンドを使います。
crontab -e とやるとcronの編集ができますが、cron -rとやるとcronの設定内容が消えるので、危ないので気を付けるようにとネットでよく書いてあります。紹介されているのは、crontab -eで直接編集するのではなく、別ファイルでcron内容を作成・編集してcrontabで読み込むことです。

$vim .crontab
$crontab .crontab

これで.crontabに書いた設定が反映されます。
ubuntu16.04の場合、cronの実行ログはデフォルトでは表示されないぽいです。またログの表示設定をしても、デフォルトでは、/var/log/cron.logは出力されず、/var/log/syslogに出力されるようです。実行ログのみでエラー内容や標準出力はログには残りません。/var/log/syslogにcronログを出力させるには、下記ファイルのcron関連のコメントを外してrsyslogを再起動します。

$vim /etc/rsyslog.d/50-default.conf
$systemctl restart rsyslog.service

cronで実行結果をログに出力させるには、下記のようにします。
.crontab

* * * * * echo 123 >> /var/log/cron.log 2>&1

2>&1の2は標準エラー出力、1は標準出力です。2を標準出力にリダイレクトさせることによって、エラーも出力されます。

複数コマンドを実行する場合、;か&&でつなげます。;は、前のコマンドがエラーでも次を実行します。&&はエラーだったら次を実行しません。複数コマンドを1行でつなげた場合、例えば下記のようにやっても最後のコマンドの出力以外は受け取れません。

$ echo 123 && echo 456 >> hoge.log
$ cat hoge.log
456

下記のようにすると、最初のコマンドのエラーも含めた出力がファイルに保存されます。

$ echo 123 >> hoge.log 2>&1 && echo 456 >> hoge.log 2>&1

下記なら、最初のechoに誤字があるので、その時点でエラーで終了し、エラー内容がファイルに出力されます。

$ echoo 123 >> hoge.log 2>&1 && echoo 456 >> hoge.log 2>&1

さくらVPSにUbuntu16.04を入れた後の各種設定方法(1)

さくらVPSにUbuntu16.04を入れました。設定をしていきます。

参考:Ubuntuインストール

アップデート

$ sudo apt-get update
$ sudo apt-get upgrade

SSH関連の設定

.sshディレクトリの作成

とりあえず.sshディレクトリを作成します。

$ mkdir ~/.ssh

公開鍵・秘密鍵を作成して公開鍵をサーバに転送する

次にローカルで秘密鍵を作成します。今windows10を使っていますが、gitをインストールしたらssh-kegenが入っているのでそれを使えるようです。あるいは、Tera Termでも簡単に作れます。作成した公開鍵をサーバに転送します。scpの場合下記のようになります。

$ cd .ssh
$ scp hoge.pub hoge@hogehogehoge.sakura.ne.jp:~/.ssh/.

サーバでauthorized_keysを作成する

サーバで、転送した公開鍵を./ssh/authorized_kesyに追加します。

$ cd
$ cat hoge.pub >> ~/.ssh/authorized_keys
$ rm hoge.pub

SSHログインチェック

ローカルで下記のようにやってみます。windowsの場合、TeraTermを使ったりします。下記のhoge_rsaは秘密鍵です。

$ cd .ssh
$ ssh -i hoge_rsa hoge@hogehogehoge.sakura.ne.jp

パスワード聞かれずにログインできたら成功です。

パスワードログインを禁止にする

$ sudo vi /etc/ssh/sshd_config
  • Portを1万台にする
  • ルートログインを禁止する
    PermitRootLogin no
  • パスワードログインを禁止する
    PasswordAuthentication no
  • 指定したユーザーだけログイン可能にする(最下段に追加)
    AllowUsers ユーザー名
$ sudo vi /etc/services

ファイル内のポート番号22を上記で変更した値にすべて変える

$ sudo sshd -t

何も起こらなければ成功

sshサーバの再起動

$ sudo service ssh restart

TeraTermのマクロ作成

私はwindows10を使うときに、Teratermのマクロを使っていますので、それを作成します。

username = 'hoge'
hostname = 'hogehogehoge.sakura.ne.jp'
keyfile  = 'C:\Users\hoge\.ssh\hoge_rsa'

msg = hostname
strconcat msg ':11223 /ssh /auth=publickey /user='
strconcat msg username
strconcat msg ' /keyfile=' 
strconcat msg keyfile

connect msg

ファイヤーウォールの設定

ufwというコマンドで設定します。

全部拒否にする
$ sudo ufw default deny
先程変更したSSH用ポートを開放する
$ sudo ufw allow 12233
アクセス回数制限をかける
$ sudo ufw limit 12233
$ sudo ufw limit 22
ファイヤーウォールを有効にする
$ sudo ufw enable
ファイヤーウォールの状態確認
$ sudo ufw status

VimとGitも入れておく

$ sudo apt-get -y install vim git 

fail2banを入れる

下記を参考にやってみた。まず、/etc/fail2banに移動して、jail.localというファイルをつくって、そこに設定を書くといいらしい。

参考:Fail2ban fails to run after upgrade to Ubuntu 16.04
参考:How To Protect SSH With Fail2Ban on CentOS 7
参考:How To Protect SSH with Fail2Ban on Ubuntu 14.04

$ sudo apt-get -y install fail2ban
$ cd /etc/fail2ban
$ sudo vim jail.local

jail.local

[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
destemail = hoge@hoge.com
action = %(action_mwl)s

# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport

[sshd]
enabled = true

fial2banを再起動する。enableは自動起動設定らしい。

$ sudo systemctl enable fail2ban
$ sudo systemctl restart fail2ban

下記で状態をチェックできる。statusの次にjail_nameをつけると、その詳細が表示される。

$ sudo fail2ban-client status
$ sudo fail2ban-client status sshd

間違ったrootログインをしたら、fail2ban-client status sshdが更新された。しっかり動いている。でもメールの設定とかはまだ不十分かもしれない。

ログの場所のメモ

fail2banのログ

$ tail -n 100 /var/log/fail2ban.log

認証関連のログ

$ tail -n 100 /var/log/auth.log

つかれた。残りは今度やる。セキュリティ対策は沢山やることあるなー。
参考: Ubuntu 12.04 LTSサーバーを安全にする