Linuxサーバーのセキュリティを確保しつつ、リモートからの操作を可能にするためには、SSH接続を適切に許可する設定が欠かせません。特に、ファイアウォールとして iptables
を使用している場合、明示的にSSHポート(22番ポート)への接続を許可するルールを追加しなければ、リモートログインができなくなってしまいます。この記事では、iptables -A INPUT -p tcp --dport 22 -j ACCEPT
というコマンドの意味や使い方を解説しながら、SSH接続を安全に許可するための設定手順を詳しく紹介します。初心者の方でも理解しやすいように、図解やポイントを交えて説明していきます。
iptablesとは何か?
iptables
はLinuxにおけるファイアウォール機能のひとつで、ネットワーク通信の制御やアクセス制限を行うために使用されます。受信(INPUT)、送信(OUTPUT)、転送(FORWARD)の3つの基本チェーンがあり、それぞれの通信に対してルールを設定することができます。
この中で、SSH接続を許可するには「INPUTチェーン」にルールを追加する必要があります。SSHは通常、TCPの22番ポートを使用するため、このポートへのアクセスを許可する設定が必要です。
コマンドの解説:iptables -A INPUT -p tcp --dport 22 -j ACCEPT
このコマンドは、以下のような意味を持ちます:
-A INPUT
:INPUTチェーンにルールを「追加(Append)」する-p tcp
:プロトコルはTCPを指定(SSHはTCP通信を使用)--dport 22
:宛先ポートとして22番(SSHの標準ポート)を指定-j ACCEPT
:条件に合致するパケットを「許可(ACCEPT)」する
つまり、**「TCPの22番ポートへの入力通信を許可する」**という意味になります。
SSH接続が許可されないとどうなる?
もしこの設定がされていないと、外部からのSSH接続はファイアウォールによってブロックされ、たとえSSHサービスが正常に動作していたとしても、接続自体ができなくなります。これにより、リモートからのログインや操作ができず、サーバーの管理に支障をきたす可能性があります。
特に新しくサーバーを構築した直後や、セキュリティポリシーを見直した際には、SSHの許可設定を見落としがちです。
SSH許可設定の手順
以下の手順で、SSHの接続を許可する設定を行います。
1. 現在のiptablesルールを確認
sudo iptables -L -n
このコマンドで、現在有効なルールが一覧で表示されます。もし22番ポートが許可されていない場合、次の手順で追加します。
2. SSHを許可するルールを追加
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
これで、22番ポートへのTCP接続が許可されます。
3. SSH以外の不要なポートを閉じる(例)
セキュリティを高めるためには、不要なポートはすべて拒否しておくのが基本です。
sudo iptables -A INPUT -j DROP
このようにすれば、明示的に許可された通信(例:SSH、HTTP、HTTPSなど)以外はすべて遮断されます。
4. iptablesの設定を保存する
環境によって方法が異なりますが、CentOS系やRocky Linux系であれば以下のコマンドを使用します:
sudo service iptables save
または
sudo iptables-save > /etc/sysconfig/iptables
Debian系では、iptables-persistent
パッケージをインストールして保存できます:
sudo apt install iptables-persistent
ポート番号を変更してSSHを保護する方法
標準の22番ポートはスキャン対象になりやすく、セキュリティ上のリスクとなることがあります。より安全性を高めるには、ポート番号を変更する方法もあります。/etc/ssh/sshd_config
を編集し、たとえば 2222 番に変更します:
Port 2222
変更後は iptables
にもそのポートを許可する必要があります:
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
注意点とトラブル対処
1. SSHをブロックした状態でログアウトすると…
間違ってSSHをブロックして設定を保存し、ログアウトしてしまうと、以後リモートからの操作ができなくなります。こういった事態を避けるため、ファイアウォールの設定はローカルで操作するか、セッションを複数開いて確認しながら作業するのがおすすめです。
2. firewalldとの違いに注意
CentOS 7以降では firewalld
がデフォルトで使用されています。iptables
を使いたい場合は、firewalld
を停止して iptables
に切り替える必要があります。
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo yum install iptables-services
sudo systemctl enable iptables
sudo systemctl start iptables
まとめ
SSH接続を許可するための iptables
コマンドは、Linuxサーバーの管理において重要な基本設定の一つです。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
この1行を加えることで、リモートからの安全な接続が可能になり、Linuxサーバーの柔軟な運用が実現します。ただし、セキュリティとのバランスを保つためにも、不要なポートの遮断やポート変更、fail2banなどとの併用を検討することが大切です。
SSH接続の許可設定を正しく行い、安全で快適なサーバー運用を目指しましょう。