Linuxでポート開放する
研究でサーバアプリを作成することになりそう。
とりあえず前借りたさくらのVPSで、Cからsocketを直接叩いて通信しようとしたものの、ポートが閉まってるのを失念してて少し悩んだ。
というわけでLinuxでポートを開放する方法を書きます。
最近のLinuxはiptablesというデーモンでポートの開け閉めを管理しているのですが、デフォルトでは全てのポートが閉まっていて全く通信できません。
そこで、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番の開放を忘れると、最悪一切の通信が不可能になってしまうので注意。