家の CentOS がなぜかポート許可が消えてたので再設定しました。
コマンド忘れそうなのでメモしておきます。基本的に過去のブログからコピペです。
/sbin/iptables っていうのがファイアーウォール管理の一般的なツールなようです。
ルート権限になって
/sbin/iptables -L
と打ち込むと現在の許可ポート一覧(ルールというらしい)が表示されます。
ポート番号がなくて見づらかったら
/sbin/iptables -L -n
とするとポート番号が出てみやすかったです。
で、ルールを追加する場合、例えばhttpのポート80を外部からアクセス許可したいと思ったら以下のコマンドを打ち込みます。
/sbin/iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
長いっすね。 意味はよくわかりませんが、/etc/sysconfig/iptables のあたりに書かれていたのを参考にしてみました。
打ち込んだら、iptables にルールが追加されて保持されました。 しかし、まだファイルに保存はされていないので保存を行います。
/etc/init.d/iptables save
なぜか実行するファイルが違います。
この時点でルール一覧を
/sbin/iptables -L -n
などで確認すると追加されていることが分かります。あとは
cat /etc/sysconfig/iptables
で、ファイルに保存されていることも確認するとベターらしいです。
最後に iptables サービスを再起動します。
/sbin/service iptables restart
これでポート80が許可されました。
応用で、
/sbin/iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 1192 -j ACCEPT
とポート番号を「1192」とかにすると独自プログラムの許可ポートを開けることができます。
基本標準プロトコルにはデフォルトのポートが決まっているので注意が必要ですね。
こう見ると簡単なんですが、意外と手間取るんですよねぇ。ちなみに許可ポートは受け側でポートを開いたプロセスが動いてないとアクセス弾かれるみたいです。ダミーのプログラムとか作ってポートアクセスを受付つつ、コマンドプロンプトから
telnet 192.168.1.20 1192
みたいにポートが開いてるかチェックをして通れば成功です。
っていうかうちのPC(Vista 以降)はコマンドプロンプトに telnet がないんですが……。
そういう場合は teraterm とかでポート番号を指定するしかないみたいですね……。
CentOSのバージョンあがったので少し文修正しました。あと Telnet は Cygwin 使いました。