Linux上でSSHアクセスをローカルネットワークに制限する方法
SSH(セキュアシェル)は、ユーザーがネットワークを介してリモートシステムに安全に接続できる人気のツールです。デフォルトでは、適切なファイアウォールおよびネットワーク設定が整っていれば、SSHはどのネットワークからでもアクセス可能です。
ただし、セキュリティの理由から、SSHアクセスを自分のローカルネットワークのみに制限したい場合があります。これは、特にインターネットを介してシステムへの外部アクセスを望まない家庭やオフィス環境で便利です。
この記事では、ファイアウォールルールとSSH設定を使用して、LinuxでSSHアクセスをローカルネットワークに制限する方法の手順を説明します。それぞれの手順を分かりやすく説明し、初心者でも理解できるようにします。
なぜSSHをローカルネットワークに制限するのか?
SSHアクセスをローカルネットワークのみに制限することで、システムへの不正アクセスのリスクを減少させることができます。
これを行うべき理由はいくつかあります:
- セキュリティ: 外部ネットワークからのSSHアクセスを制限することで、攻撃者がインターネット越しにあなたのサーバーをスキャンしたりブルートフォース攻撃を試みたりするのを防ぐことができます。
- 制御されたアクセス: 同じローカルネットワークに複数のデバイスが接続されている場合でも、外部の脅威にさらされることなくシステムを管理できます。
- シンプルさ: ローカルアクセスのみであれば、外部アクセスのために追加のセキュリティ層を構成する心配はありません。
ローカルネットワークの理解
始める前に、「ローカルネットワーク」が何を意味するのかを理解することが重要です。ローカルネットワークとは、自宅のWi-Fiやオフィスのネットワークのように、同じ物理的または無線ネットワーク内で接続されたデバイスのグループです。
これらのデバイスは、192.168.x.xや10.0.x.xのような同じ内部IPアドレス範囲を共有しますが、外部デバイス(インターネット上のデバイス)は異なるIP範囲を持っています。
ステップ1: LinuxのローカルIPアドレス範囲を確認する
ローカルネットワークの範囲を知るには、まず以下のipコマンドを使用してデバイスのIPアドレスを特定する必要があります。このコマンドはIPアドレスとネットワーク情報を表示します。
ip a
ネットワークインターフェースに関する情報が表示されます。192.168.x.x または 10.0.x.x のようなものを探してください。これがあなたのローカルIPアドレスを示します。
通常、あなたのローカルIPアドレスはこれらのプライベートレンジのいずれかにあります:
192.168.x.x
10.0.x.x
172.16.x.x to 172.31.x.x
例えば、あなたのIPアドレスが192.168.122.63の場合、あなたのローカルネットワークの範囲はおそらく192.168.1.0/24であり、これは192.168.1.xの範囲のすべてのデバイスが同じローカルネットワークにあることを意味します。
ステップ2: SSHをローカルアドレスのみでリスンするように設定する
デフォルトでは、SSH は利用可能なすべてのネットワークインターフェースでリッスンしています。これをローカルネットワークのみにリッスンするように変更します。
sudo nano /etc/ssh/sshd_config
#ListenAddressの行を見つけて、それをコメント解除します(先頭の#を削除してください)。それをあなたのローカルIPアドレスに設定します。
たとえば、ローカルIPが192.168.122.63の場合、ファイルを次のように更新します:
ListenAddress 192.168.122.63
変更を適用するにはSSHサービスを再起動してください。
sudo systemctl restart ssh
OR
sudo systemctl restart sshd
これで、あなたのSSHサーバーは、ローカルIPアドレスからの接続のみを受け付けるようになります。外部ネットワークから接続しようとすると、接続は拒否されます。
ステップ3: ファイアウォールルールでSSHを制限する
SSHデーモンをローカルアドレスのみにリッスンするように設定することは有益ですが、ファイアウォールルールを設定することで追加のセキュリティ層を追加することができます。これにより、外部IPを使用してシステムにアクセスしようとする人がいても、ローカルネットワーク上のデバイスのみがSSH経由で接続できるようになります。
UFW(アンコンプリケイテッドファイアウォール)の使用
UFWを使用している場合、多くのLinuxディストリビューション(例えばUbuntu)のデフォルトファイアウォールでは、以下のコマンドに従ってください:
SSH接続を192.168.1.xの範囲内など、あなたのローカルネットワークからのみ許可し、他のネットワークからのSSH接続を拒否するようにします。ファイアウォールを再読み込みし、その状態を確認することを忘れないでください。
sudo ufw allow from 192.168.1.0/24 to any port 22
sudo ufw deny 22
sudo ufw reload
sudo ufw status
Firewalldを使用する
LinuxでFirewalldを使用してSSHをローカルネットワークに制限するには、次のコマンドを実行してください。
ローカルネットワークからのSSHアクセスを許可するために、192.168.1.x範囲内のIPアドレスなどからの接続を許可し、他のネットワークからのSSH接続を拒否するようにします。ファイアウォールを再読み込みし、その状態を確認することを忘れないでください。
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept'
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port protocol="tcp" port="22" drop'
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
iptablesを使用して
UFWやFirewalldを使用していない場合は、iptablesを使用して同様のルールを設定できます。
sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
sudo iptables-save | sudo tee /etc/iptables/rules.v4
sudo iptables -L
現在、SSHアクセスはネットワーク範囲内のローカルデバイスからのみ許可されています。
ステップ4: 設定をテストする
SSHとファイアウォールの設定を終えたら、すべてが期待通りに動作することを確認するために、セットアップをテストする時間です。
ローカルネットワーク上のデバイスから、SSHを使用してサーバーに接続してみてください:
ssh [email
外部ネットワークにアクセスできる場合(例えば、モバイルデータやVPNを使用して)、システムの外部IPに接続してみてください。接続はブロックされたり拒否されたりするはずです。
追加のヒント
ローカルネットワークにSSHを設定するための追加のヒントは次のとおりです。
- 静的IP: SSH接続したいデバイスに静的IPアドレスを設定するのは良いアイデアです。特に、ローカルIP範囲に基づいてファイアウォールルールを構成している場合、ルーターが再起動してもIPが変更されないようにするためです。
- VPNアクセス: 外部ネットワークからリモートアクセスが必要な場合は、VPNを設定することを検討してください。これにより、インターネットを介してローカルネットワークに安全に接続でき、SSHは引き続きローカルネットワーク内でのみアクセス可能になります。
- ログを監視する: 常にSSHログを監視して、不正アクセスの試みを確認してください。
tail コマンドを使ってログを確認できます:
sudo tail -f /var/log/auth.log
結論
SSHアクセスをローカルネットワークに制限することは、Linuxシステムのセキュリティを強化するシンプルで効果的な方法です。このガイドの手順に従えば、管理や管理業務のためのローカルアクセスを維持しながら、SSHサーバーへの外部アクセスを防ぐことができます。
ファイアウォールルールと適切な設定を用いることで、信頼できるデバイスのみがSSH経由で接続できるようにし、未承認アクセスのリスクを低減できます。
