メインコンテンツまでスキップ

サーバーのセキュリティ強化(最低限)

自分用です。
最低限です。

半分メモなのでコマンドなど間違えてる場合あり

OSを最新にする

sudo apt -y update && sudo apt -y upgrade

自動アップデート設定

sudo apt -y install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades

不要なパッケージの削除

不要なソフトウェアは気づかないうちに脆弱性となっている場合があります。

sudo apt autoremove

不要なサービスの確認

使用していないサービスが動作している場合があります。不思議ですね
netstatやssコマンドでリスニングポート確認

sudo ss -tulnp

不要なサービスは停止

sudo systemctl disable サービス名
sudo systemctl stop サービス名

ユーザーの作成と権限付与

ユーザー作成とsudo権限の付与
ユーザーは複数作成しておくといいかも

sudo adduser 新しいユーザー名
sudo usermod -aG sudo 新しいユーザー名

公開鍵認証に変更する

root等で他ユーザーの公開鍵を作る

Enter passphrase等はお好みでいらなければEnterでいいですがあるとセキュリティ強度がかなりあがります

sudo -u 新しいユーザー名 ssh-keygen -t ed25519

鍵ファイルのパーミッションを変更する。

 chmod 600 /home/新しいユーザー名/.ssh/id_ed25519

ログイン用の鍵ファイルをダウンロード(id_ed25519とid_ed25519.pubはどちらも)
※ログイン時に使いますので大切に保管してください。

cat /home/新しいユーザー名/.ssh/id_ed25519

RLoginを使っているならファイル転送が使えます。
基本はファイル転送でダウンロードしてください。

ダウンロードしたらid_ed25519は削除

rm /home/新しいユーザー名/.ssh/id_ed25519

公開鍵の設置

id_ed25519.pubの中身をコピーする

cat /home/新しいユーザー名/.ssh/id_ed25519.pub

コピーしたものを貼り付けて保存

sudo vi /home/新しいユーザー名/.ssh/authorized_keys
sudo chmod 600 /home/新しいユーザー名/.ssh/authorized_keys
sudo chown 新しいユーザー名:新しいユーザー名 /home/新しいユーザー名/.ssh/authorized_keys

公開鍵認証の有効化とパスワード無効化]

※公開鍵を保存していることを確認してください。

sudo vi /etc/ssh/sshd_config

以下の行を次のように変更してください。
コメントアウトされている場合は解除してください。

PubkeyAuthentication yes

sshサービスの再起動

sudo systemctl restart ssh

公開鍵でログインできるかどうか確認後に

sudo vi /etc/ssh/sshd_config

以下の行を次のように変更してください。

PasswordAuthentication no

sshサービスの再起動

再起動後パスワードは使えないので注意

sudo systemctl restart ssh

rootログインを無効化

他ユーザー作成後に必ず実施
sshd_config を編集する

vi /etc/ssh/sshd_config

PermitRootLogin yesになっているので以下にする

PermitRootLogin no

sshの再起動でrootログインとはお別れです。

sudo systemctl restart ssh

SSHポートの変更(例)

※ポートを開放せずsshポート変更で詰む場合があります。
詰んでもコントロールパネルにコンソールがある場合は更新できる場合があります。(例:ConoHaVPS,XserverVPS)
ポートを開放する(初期ポート以外の推測が不可能なポートが理想)
2222,1222,1022等にする人がいますがあまりよくはないです。
22よりはかなりましです

sudo ufw allow 1234
sudo ufw reload
sudo vi /etc/ssh/sshd_config

※コメントアウトされています。
初期ポート以外に変更する

Port 1234

Ubuntuの再起動で完了

sudo reboot

ネットワー側でポートを閉じる

VPS等によってはサーバー側以外にコントロールパネルでポートの開閉ができるものがあります。
ConoHaとOracleではこの機能をよく使っています。
長期間編集が不要な場合は閉じておいてください。

Fail2Ban導入(ブルートフォース対策)

最近は初期でインストール,有効化されている場合が多いです。
ConoHa VPSは初期インストールされていることと5回ミスで1日接続不可でした。

sudo apt -y install fail2ban
sudo systemctl enable fail2ban --now

動作確認

sudo fail2ban-client status
sudo fail2ban-client status sshd

jail.localの作成・編集

vi /etc/fail2ban/jail.local

設定例
連続失敗5回で12時間BANする
1日は長すぎるし10分は短いしですが自分の判断や自社のセキュリティ規定等で調整してください。
sshのポート番号を変更しているため今回は1234になっています
filterが初期フィルターの為変更してもいいです。

[sshd]
enabled = true
port = 1234
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 43200

フィルターの場所

cd /etc/fail2ban/filter.d/

再起動とステータス

fail2banの再起動

sudo systemctl restart fail2ban

ステータス確認

sudo fail2ban-client status
sudo fail2ban-client status sshd

サーバーのコントロールパネルを活用する

パケットフィルターやポートのフィルターで特定のポートへの接続制限がおすすめです。

特にSSHなどへのアクセスは使っている回線のIPが固定されているならそこからのみにしておくよいいです。

固定されていないならSSHなどの時々しか使わないものは管理パネルで閉じておくといいです。

Cloudflareを活用する

会社の重要システムの場合はCloudflare Proへの加入を推奨します。

(サーバーIPの秘匿、DDOS対策など、リージョンブロック等) CloudflareのWAFで特定のリージョンをブロックすることをお勧めします。

特に社内システム等の場合は海外からアクセスする理由がない場合は日本からのみアクセスにした方がいいです。

出張等で必要な場合は申請してもらい一時的に許可してもらうか証明書などでバイパスするべきです。

特定の国から攻撃がすごすぎます。

その他対策

ログ監視(logwatchやjournalctlの活用)
アプリケーションごとのセキュリティ設定
バックアップの自動化