SSHアクセス制御とファイアウォール|不正アクセスを防ぐための基本対策を解説

SSHアクセス制御とファイアウォール

SSHアクセス制御とファイアウォールを活用して安全なサーバ運用を実現しよう

SSHはLinuxサーバ管理に欠かせないサービスですが、インターネットへ公開されることが多いため常に攻撃対象となっています。

公開鍵認証やFail2banなどの認証対策も重要ですが、それ以前に「誰がSSHへ接続できるのか」を制御することも非常に重要です。

そのため実務ではSSH設定だけでなく、ファイアウォールを組み合わせた多層防御が行われています。

本記事ではSSHアクセス制御の考え方と、firewalldを中心としたファイアウォール設定について解説します。

なぜアクセス制御が必要なのか

SSHサーバをインターネットへ公開すると、世界中から接続要求が届きます。

公開鍵認証を利用していても、不要な接続試行そのものは発生します。

そのため接続元を制限することで攻撃対象を減らすことができます。

多層防御の考え方

SSHセキュリティは1つの対策だけで守るものではありません。

一般的には以下を組み合わせます。

  • ファイアウォール
  • 公開鍵認証
  • rootログイン禁止
  • Fail2ban
  • MFA

複数の防御層を構築することが重要です。

アクセス制御の種類

SSHアクセス制御には主に以下があります。

  • SSH設定による制御
  • TCP Wrapper(旧方式)
  • firewalld
  • iptables
  • nftables
  • クラウドFW

現在はfirewalldやクラウドFWが主流です。

SSH設定による制御

OpenSSHには接続ユーザーを制限する機能があります。

代表的な設定です。

AllowUsers admin

指定したユーザーのみ接続できます。

AllowUsersの例

AllowUsers admin operator

adminとoperatorのみ許可します。

不要なアカウントからのログインを防げます。

AllowGroupsの利用

グループ単位で許可することも可能です。

AllowGroups sshusers

運用管理しやすくなります。

DenyUsersの利用

特定ユーザーを拒否できます。

DenyUsers test

ただしAllowUsersの方が一般的です。

ファイアウォールとは

ファイアウォールは通信を制御する仕組みです。

SSH認証以前の段階で通信を遮断できます。

非常に強力な防御手段です。

firewalldとは

AlmaLinuxやRHEL系で標準利用されるファイアウォール管理ツールです。

内部的にはnftablesを利用しています。

運用が簡単なことが特徴です。

SSH許可状況を確認する

現在の設定確認です。

# firewall-cmd --list-services

sshが表示されれば許可されています。

SSHサービスを許可する

# firewall-cmd --permanent --add-service=ssh
# firewall-cmd --reload

22番ポートを許可します。

SSHサービスを削除する

# firewall-cmd --permanent --remove-service=ssh
# firewall-cmd --reload

SSH接続を拒否できます。

接続元IPを限定する

最も効果的な方法の一つです。

特定IPのみ許可します。

# firewall-cmd --permanent \
--add-rich-rule='
rule family="ipv4"
source address="203.0.113.10"
service name="ssh"
accept'

管理端末のみ接続可能になります。

不要な接続を拒否する

許可後にその他を拒否します。

これにより接続元を限定できます。

企業環境ではよく利用されます。

社内ネットワークのみ許可する

例です。

192.168.1.0/24

社内からのみSSH接続を許可できます。

VPNとの組み合わせ

より安全な構成です。


管理PC
 ↓
VPN
 ↓
SSH
 ↓
サーバ

SSHをインターネットへ公開しません。

クラウド環境でのアクセス制御

AWSではSecurity Groupを利用します。

AzureではNSG(Network Security Group)を利用します。

クラウド側でSSH接続元を制限できます。

AWSの例

Security Groupで以下を設定します。


TCP 22
Source: 203.0.113.10/32

管理端末のみ許可されます。

Fail2banとの違い

よく混同されます。

機能役割
firewalld事前に制御
Fail2ban攻撃後に遮断

役割が異なります。

SSHポート変更との関係

22番以外へ変更している場合です。

Port 2222

ファイアウォール側も変更が必要です。

# firewall-cmd --add-port=2222/tcp

現在のルール確認

設定一覧を確認します。

# firewall-cmd --list-all

トラブル時によく利用します。

接続確認方法

ポート確認です。

# ss -antlp | grep sshd

SSHが待ち受けているか確認できます。

よくあるトラブル

設定後に接続できなくなった

許可IP設定を誤った可能性があります。

コンソールアクセス手段を確保してから変更しましょう。

sshdは起動しているのに接続できない

ファイアウォール設定を確認します。

実務で非常によく発生する問題です。

クラウド環境だけ接続できない

Security GroupやNSGを確認します。

OS側だけではありません。

企業環境で推奨される構成

  • 接続元IP制限
  • 公開鍵認証
  • rootログイン禁止
  • Fail2ban
  • 踏み台サーバ
  • MFA

現在の標準的な構成です。

アクセス制御の優先順位

安全性を高める順番としては以下がおすすめです。

  1. 接続元IP制限
  2. 公開鍵認証
  3. rootログイン禁止
  4. Fail2ban
  5. MFA

まずはアクセス元制御から始めましょう。

まとめ

SSHアクセス制御はセキュリティ対策の基本です。

公開鍵認証だけに頼るのではなく、ファイアウォールで接続元を制限することで攻撃対象を大幅に減らすことができます。

特に企業環境やクラウド環境では、firewalldやSecurity Groupを活用したアクセス制御が標準的な運用となっています。

SSHを安全に運用するためにも、多層防御の一環としてアクセス制御を積極的に導入していきましょう。