Skip to main content

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

関連記事

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

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.confrootに何らかのメールアドレスを書いていると、そのメールアドレス宛にメールが送られます(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コマンドを実行し、JSTAsia/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 + 日付]に保存されています。インストールしてしばらく経ってからsarsar -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

参考にしたサイト