サーバーのセキュリティ強化(最低限)
自分用です。
最低限です。
半分メモなのでコマンドなど間違えてる場合あり
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の活用)
アプリケーションごとのセキュリティ設定
バックアップの自動化