VPS(Ubuntu/Debian)でRとPythonとJuliaの開発環境を作る: part3
はじめに
概要
VPS (Ubuntu/Debian) を借りて環境設定する際の、part1より進んだ設定の内容です。この記事の内容は必須ではありませんが、設定しておくとよりセキュリティレベルが上がったり、便利に使ったりすることができます。
取り上げる内容はこちらです。
- fail2banの導入
- 繰り返しssh接続を試してくるIPアドレスをBAN
- ssmtpの導入
- 監視用の簡易なメール送信クライアント
- logwatchの導入
- 落穂拾い
- 時刻のタイムゾーンをAsia/Tokyoにする
- デフォルトのシェルを変更する
- sysstatの導入
- ベンチマークを取る(Unixbench、speedtest)
環境
- VPS
- ConoHa VPS(メモリ1GB)
- Linux
- Ubuntu: Ubuntu 22.04.1 LTS / Debian: Debian 11
- ローカル環境
- Windows 10 Home
関連記事
- VPS(Ubuntu/Debian)でRとPythonとJuliaの開発環境を作る: part1 - suzuna's memo
- VPS(Ubuntu/Debian)でRとPythonとJuliaの開発環境を作る: part2 - suzuna's memo
fail2ban
VPSを起動してしばらく放っておくと、ssh接続を試みてくるIPアドレスが出現します。
fail2banを導入すると、一定時間以内に一定回数以上ssh接続に失敗したIPアドレスを、一定時間ssh接続できないように弾くことができます。part1の設定の通り、パスワードログインを廃止し、ssh鍵でしかログインできないようにしておけばあまり気にしなくてもいいのですが、fail2banで簡単にBANできるので設定します。
ちなみにssh接続のログは/var/log/auth.log
ですので、ssh接続を試みてくるIPアドレスは、sudo cat /var/log/auth.log
で見ることができます。
まず、fail2banをインストールします。
sudo apt install fail2ban
fail2banは、sshdなどの各種サービスのログファイルを監視するものです。filter, action, jailから構成されます。
- filter
- 各種サービスのログファイルにどのような文字列が表れたら攻撃と判定するか
- /etc/fail2ban/filter.d/*.conf
- 各種サービスのログファイルにどのような文字列が表れたら攻撃と判定するか
- action
- 攻撃があった場合にどう動作するか
- /etc/fail2ban/action.d/*.conf
- 攻撃があった場合にどう動作するか
- jail
- filterとactionの組み合わせや、actionが発動する閾値(攻撃回数・時間数)などを定める
- /etc/fail2ban/jail.conf
- filterとactionの組み合わせや、actionが発動する閾値(攻撃回数・時間数)などを定める
sshdを含むメジャーなサービスのfilterやactionはデフォルトで用意されているので、ここではjailのルールを編集するだけで導入ができます。
/etc/fail2ban/jail.conf
はアップデートで書き換えられる恐れがあるそうなので、/etc/fail2ban/jail.local
を編集します。
# /etc/fail2ban/jail.localが存在しない場合だけ、最初に作っておく
sudo touch /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
jail.localがnanoで開いたら、以下の4行を記載して保存します。
[sshd]
enabled = true
bantime = 86400
findtime = 3600
maxretry = 10
findtime秒以内にmaxretry回sshの接続に失敗したIPアドレスは、bantime(秒)の間sshの接続をブロックするという意味です。bantime, findtime, maxretryは好みに応じて値を書き換えてください。
保存したらfail2banを起動し、Ubuntu起動時に自動で起動するようにします。今記載したjail.localを反映させるため、既に起動されている場合はsudo systemctl stop fai2ban
を実行してから以下のコマンドを入力してください。
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
うまく起動できていて、かつ自動起動も有効になっていることを確認します。
sudo systemctl status fail2ban
# 以下の通り表示されればOK
# /lib/systemd/system/fail2ban.service; enabled: Ubuntu起動時に起動する設定になっている
# Active: active: 現在起動している
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
Active: active (running)
なお、この後再度jail.localを書き換えた場合はsudo systemctl restart fail2ban
でfail2banを再起動してください。
今現在ブロックされているIPアドレスは、こちらで確認できます。
sudo fail2ban-client status sshd
また、fail2banのログである/var/log/fail2ban.log
を見ると、filterやaction、banのログが確認できます。
fail2banの基準は当然自分にも当てはまりますので、自分も接続に失敗するとssh接続ができなくなります。自分が引っかかった場合は、ConoHaのWebのコンソールからログインし、以下で解除することができます。(jail.localに自分のIPアドレスをignoreipとして設定すれば自分を除外できますが、固定IPでないとあまり意味がないと思います)
sudo fail2ban-client set sshd unbanip [解除したい自分のIPアドレス]
# 設定を反映する
sudo fail2ban-client restart
sSMTP
sSMTPとはメール送信専用(受信はできない)クライアントです。自前でSMTPサーバを用意せずに外部のSMTPサーバを使ってメールを送信する仕組みであり、Postfixなどより導入が簡単です。
Gmailなどの既に持っているメールアドレスを使ってVPSからメールの送信をしたいという場合に役に立ちます。特に後述のlogwatchでメールを送信する際に使えます。
sudo apt install ssmtp
設定ファイルの/etc/ssmtp/ssmtp.confを編集します。
sudo nano /etc/ssmtp/ssmtp.conf
以下はGmailを使って送信したい場合の例です。イコールの右辺は自分のメール環境に合わせてください。
root=postmaster
mailhub=smtp.gmail.com:587
rewriteDomain=gmail.com
hostname=gmail.com
FromLineOverride=YES
UseSTARTTLS=YES
AuthUser=[YOUR_GMAIL_ACCOUNT_NAME]@gmail.com
AuthPass=[YOUR_GMAIL_LOGIN_PASSWORD]
AuthMethod=LOGIN
TLS_CA_File=/etc/pki/tls/certs/ca-bundle.crt
cronのエラー出力などのroot宛に送られるメールは、1行目のrootの行に書いた宛先に送られます。デフォルトはpostmasterです。
保存したら送信テストをしてみます。以下の通り、インタラクティブにメールを書くことができます。Toで書いたアドレス宛にメールが届けば成功です。
sendmail -t #ここでEnter
From: [受信時に見せたいメールアドレス] #ここでEnter
To: [宛先のメールアドレス] #ここでEnter
Subject: [題名] #ここでEnter
[以下本文] #ここでEnter。書き終わったらCtrl+Dで送信
logwatch
ログを取って1日に1回メールで送ってくれます。
先にsudo apt install ssmtp
でsSMTPをインストールしておいてください。
sudo apt install logwatch
デフォルトの設定は/usr/share/logwatch/default.conf/logwatch.conf
です。これを/etc/logwatch/conf/logwatch.conf
にコピーし、/etc/logwatch/conf/logwatch.conf
を編集することにします。
sudo cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf
sudo nano /etc/logwatch/conf/logwatch.conf
MailTo: root
と書かれた行があるので、root
を受信したいメールアドレスにします。なお、root
のままにしている場合、sSMTPを導入済で、かつ/etc/ssmtp/ssmtp.conf
のroot
に何らかのメールアドレスを書いていると、そのメールアドレス宛にメールが送られます(logwatchがrootにメールを送り、sSMTPがroot宛のメールを転送するから)。
保存したら、logwatchのテストを行います。以下の2行を順番に実行します。1行目ではコンソールにログが表示され、2行目ではメールが届けば成功です。
logwatch --output stdout
logwatch --output mail
私はこんなエラーが出たのですが、ググったところ/var/cache/logwatch
が存在しないことが原因のようで、sudo mkdir /var/cache/logwatch
すると正しく動作しました。(参考: Logwatch設定 - keimlab’s diary)
/var/cache/logwatch No such file or directory at /usr/sbin/logwatch line 651.
なお、毎日1回logwatchからメールが届くようになります。というのも、/etc/cron.daily/00logwatch
に以下の通り記述されているからです。
#!/bin/bash
#Check if removed-but-not-purged
test -x /usr/share/logwatch/scripts/logwatch.pl || exit 0
#execute
/usr/sbin/logwatch --output mail #これ
#Note: It's possible to force the recipient in above command
#Just pass --mailto address@a.com instead of --output mail
logwatchのメールを受け取りたくない場合は、上の/usr/sbin/logwatch --output mail
をコメントアウトするとメールが送られなくなります。
落穂拾い
タイムゾーンをJSTに変更
タイムゾーンはデフォルトではUTCになっていることがあります。以下の通りJSTに変更することができます。
date
コマンドかtimedatectl
コマンドで今の時刻を確認します。
JST
、あるいはAsia/Tokyo
と書いてあればタイムゾーンはJSTになっています。UTC
などと、JST以外の設定になっていたら下記でJSTに変更します。
sudo timedatectl set-timezone Asia/Tokyo
再度date
コマンドかtimedatectl
コマンドを実行し、JST
かAsia/Tokyo
とあれば成功です。
デフォルトのシェルを変更
デフォルトではshが使われていますが、bashに変えたいという場合は以下の通りコマンドを打ちます。
まずbashのパスを調べます。
which bash
例えば/usr/bin/bash
と表示されたら、chsh
で以下の通り変更します。
chsh -s /usr/bin/bash
再ログインするとbashに変わっているはずです。
sysstat
CPU使用率やメモリ使用量などの情報をリアルタイムで表示したり、過去の値を後から確認するのに使えます。
sudo apt install sysstat
インストールできたら、リアルタイムの情報を確認してみます。
# CPU使用率を1秒間隔で表示する
sar 1
# メモリ使用率を3秒間隔で表示する
sar -r 3
インストール後はCPU使用率などのログが自動的に/var/log/sysstat/[sa + 日付]
に保存されています。インストールしてしばらく経ってからsar
やsar -r
とコマンドを打ってみると、過去のシステム使用状況の情報が見られます。
ベンチマークを取る
Unixbench
システムのパフォーマンスを測定するベンチマークです。ソースはkdlucas/byte-unixbenchにありますので、ここからgit cloneしてビルドします。
cd [byte-unixbenchを展開したい適当なディレクトリ]
git clone https://github.com/kdlucas/byte-unixbench
# ビルドに使う
sudo apt install build-essential
cd byte-unixbench/UnixBench
./Run
数十分ほど待つとベンチマークの結果が表示されます。
Speedtest
回線速度を測定するものです。Speedtest by Ooklaが提供しているCLIツールを使います。
こちらのインストール方法の通りインストールして実行します。
sudo apt install curl
curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash
sudo apt install speedtest
speedtest