SSH(Secure Shell)は、リモートサーバへの安全な接続を提供する重要なプロトコルですが、これを悪用する攻撃者もいます。特に、SSHサービスはデフォルトでポート22番を使用するため、攻撃者にとって容易なターゲットになります。攻撃者はポートスキャンや辞書攻撃などを用いてSSHにアクセスしようとすることがよくあります。そのため、サービスを隠すことは、セキュリティの強化に大きな効果をもたらします。本記事では、UbuntuにおけるSSHサービスをポートを変更する方法や、アクセス制限を強化する方法などを詳細に解説します。
1. SSHサービスを隠すための基本的な方法
1.1. デフォルトポート(22番)を変更する
SSHはデフォルトでポート22を使用します。このポートを変更することは、最も基本的な隠蔽手法の一つです。ポートを変更することで、攻撃者がポートスキャンをしてSSHにアクセスするのを困難にします。ただし、これは完全なセキュリティ対策ではなく、ポートスキャンに使われるツールはカスタムポートにも対応しているため、他の対策と併用することが重要です。
以下は、ポートを変更する手順です。
-
SSH設定ファイルを開きます:
bashsudo nano /etc/ssh/sshd_config -
「#Port 22」の行を探し、コメントを外して任意のポート番号に変更します。例えば、ポート2222に変更する場合は次のように記述します:
bashPort 2222 -
設定を保存して閉じます。
-
SSHサービスを再起動して変更を反映させます:
bashsudo systemctl restart sshd
これにより、SSHはポート2222でのみリッスンするようになります。接続時には新しいポート番号を指定する必要があります。
2. ファイアウォールでSSHポートを制限する
SSHサービスの隠蔽に加えて、ファイアウォールを使って特定のIPアドレスからの接続のみを許可することも有効な対策です。これにより、許可されていないIPからのアクセスを防ぐことができます。
2.1. ufw(Uncomplicated Firewall)の設定
Ubuntuにはufwという簡単に使用できるファイアウォール管理ツールがあります。ufwを使って、特定のポートに対するアクセスを制限することができます。
-
まず、SSHが使用する新しいポート(例えば、2222)を許可します:
bashsudo ufw allow 2222/tcp -
次に、既存のポート22番へのアクセスを拒否します:
bashsudo ufw deny 22/tcp -
設定を反映させるために、ファイアウォールを再読み込みします:
bashsudo ufw reload -
最後に、ファイアウォールの状態を確認して、設定が反映されていることを確認します:
bashsudo ufw status
これにより、指定したポートのみがSSH接続を受け付けるようになります。
3. Fail2Banを使用して攻撃を防止する
Fail2Banは、SSHを含むサービスへの不正アクセスを検出し、IPアドレスをブロックするツールです。これにより、辞書攻撃やブルートフォース攻撃に対して効果的な防御を提供します。
3.1. Fail2Banのインストール
-
Fail2Banをインストールします:
bashsudo apt update sudo apt install fail2ban -
インストール後、Fail2Banの設定ファイルを編集します:
bashsudo nano /etc/fail2ban/jail.local -
以下の内容を追加して、SSHへのアクセスを監視します:
bash[sshd] enabled = true port = 2222 logpath = /var/log/auth.log maxretry = 3 bantime = 3600 findtime = 600ここで、
maxretryは接続試行回数の最大数、bantimeはIPアドレスをブロックする時間(秒単位)、findtimeはその試行回数をどの期間内にカウントするかを指定します。 -
設定を保存して閉じた後、Fail2Banサービスを再起動します:
bashsudo systemctl restart fail2ban
これにより、SSHへの不正な接続試行が3回以上行われた場合、IPアドレスが1時間(3600秒)ブロックされます。
4. SSH鍵認証を使用する
SSHのパスワード認証はブルートフォース攻撃に対して非常に弱いため、パスワード認証を無効にしてSSH鍵認証に切り替えることをお勧めします。これにより、パスワードの盗用を防ぎ、セキュリティを強化できます。
4.1. パスワード認証を無効にする
-
SSH設定ファイルを開きます:
bashsudo nano /etc/ssh/sshd_config -
次の行を見つけて、コメントアウトを外し、
noに変更します:bashPasswordAuthentication no -
設定を保存して閉じた後、SSHサービスを再起動します:
bashsudo systemctl restart sshd
これにより、SSH接続時にパスワード認証が無効化され、鍵認証のみが有効になります。
4.2. SSH鍵ペアを作成する
-
ローカルマシンでSSH鍵ペアを生成します:
bashssh-keygen -t rsa -b 4096 -
公開鍵をサーバにコピーします:
bashssh-copy-id -i ~/.ssh/id_rsa.pub username@hostname
これで、SSH鍵認証が有効になり、パスワードを使わずにSSH接続ができるようになります。
5. まとめ
SSHサービスを隠すためには、ポート番号の変更、ファイアウォール設定、Fail2Banによる攻撃の防止、そしてSSH鍵認証の使用など、複数の対策を組み合わせることが重要です。これらの対策を実施することで、SSHサービスのセキュリティが大幅に向上し、攻撃者からの不正アクセスを防ぐことができます。しかし、完全なセキュリティは存在しないため、常にシステムの監視と定期的なセキュリティの更新を行うことが大切です。
