Linuxでポート開放する

研究でサーバアプリを作成することになりそう。
とりあえず前借りたさくらのVPSで、Cからsocketを直接叩いて通信しようとしたものの、ポートが閉まってるのを失念してて少し悩んだ。

というわけでLinuxでポートを開放する方法を書きます。

最近のLinuxiptablesというデーモンでポートの開け閉めを管理しているのですが、デフォルトでは全てのポートが閉まっていて全く通信できません。
そこで、iptablesの設定ファイル、/etc/sysconfig/iptablesを直接弄ってやります。

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp --icmp-type any -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

これは中身の一例。各命令が何をしているかは他のサイト様に回すとして、ここで重要なのは、

-A INPUT -p tcp -m tcp --dport **** -j ACCEPT

この行。
これは****番ポートをTCPで受け付け可能にする命令で、****を好きな数字にすれば望むポートを開くことができます。
たとえば12345番ポートを開くなら、80番を開いている命令の下くらいにこう書く。

-A INPUT -p tcp -m tcp --dport 12345 -j ACCEPT

(-Aは上から順に適用されるらしいので、同じ命令があったら近くに書いておくのがいいかもしれない)

開きたいポートの設定を追加したら、iptablesを再起動する。

$ /etc/init.d/iptables restart

これで外からTelnetでも何でもどんと来い!状態に。
ご利用は計画的に。

追記:
ちなみに20番、21番はFTP、22番はSSH、80番はHTTPポートです。
SSH接続で外部から操作している場合、22番の開放を忘れると、最悪一切の通信が不可能になってしまうので注意。