Linux のファイアウォールで任意のポートを開閉する

Linux のイメージ。

ファイアウォールで任意のポートへのアクセスを遮断したり、逆に任意のポートへのアクセスを許可したりする方法について解説します。 例えば、SSH のポート番号 22 を任意の番号へ変更した場合には、22 番のポートへのアクセスは遮断したほうが良いでしょう。 ここでは 22 番ポートへのアクセスを遮断し、33333 番ポートへのアクセスを許可する設定を例にします。

iptables を編集して適用する

/etc/sysconfig/iptables ファイルを編集します。

vi /etc/sysconfig/iptables

既に設定されている項目がいくつかあると思います。 OS の種類やバージョン、レンタルしたサーバの設定などに依存します。 設定の標記の方法も様々なので、単純にコピーアンドペーストしたり見たまま打つと不具合を起こす可能性がある点に注意してください。

開いた iptables の中から「tcp 22」のような項目を探します。 次の例は私の環境 (CentOS 6.2) の場合です。

…
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
…

ここではこれに「#」をつけて無効化し、下に同じテキストを記述して ACCEPT から REJECT へ変更します。

…
#-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j REJECT
…

さらに SSH 用のポートを任意の番号に変更している場合、任意の番号へのアクセスを許可します。 同じように、元々あったテキストをそのまま記述して 22 から任意の番号に変更します。 ここでは 33333 とします。

…
#-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j REJECT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 33333 -j ACCEPT
…

編集を終了したら、次のコマンドで編集内容を反映します。

/etc/init.d/iptables restart
iptables: Applying firewall rules:    [OK]

設定を終えたら 22 番ポートでアクセスできないことを確認しましょう。