web-dev-qa-db-ja.com

ソケット.io用にCentOSで1024未満のポートを開く方法は?

Cent OS5.2でポート843を開こうとしていますが、etc\sysconfig\iptablesに次の行を追加しました。

-A INPUT -p tcp --dport 843 -j ACCEPT

次に、iptablesサービスを更新しました。 rootユーザーがSudo node index.jsコマンドを使用して実行しているnode.jsアプリケーションでそのポートをリッスンする必要がありますが、そのポートを介して接続を確立しようとすると、forbidden portエラーが発生します。

これは、Sudo iptables -L -vを実行することで得られるものです。

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination                     
 2811  238K ACCEPT     tcp  --  any    any     anywhere             anywhere                                tcp dpt:http
  112  6224 ACCEPT     tcp  --  any    any     anywhere             anywhere                                tcp dpt:hbci
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere                                tcp dpt:843
   41  2124 ACCEPT     tcp  --  any    any     anywhere             anywhere                                state NEW tcp multiport dports 5901:5903,6001:6003
13093   13M ACCEPT     all  --  any    any     anywhere             anywhere                                state RELATED,ESTABLISHED
   26  3584 ACCEPT     icmp --  any    any     anywhere             anywhere                        
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere                        
  109  6404 ACCEPT     tcp  --  any    any     anywhere             anywhere                                state NEW tcp dpt:ssh
 888K   80M REJECT     all  --  any    any     anywhere             anywhere 

これはSudo netstat -ptl | grep nodeの出力です:

tcp        0      0 *:843       *:*    LISTEN      12927/node
tcp        0      0 *:http      *:*    LISTEN      12927/node
tcp        0      0 *:10843     *:*    LISTEN      12927/node

そして私はこのコードで socket.io でそのポートをリッスンしようとします:

var io          = require('socket.io').listen(
                    843,
                    {   log: false,
                        flashPolicyServer: true,
                        transports: ['websocket', 'flashsocket', 'htmlfile', 'xhr-multipart', 'xhr-polling', 'jsonp-polling']
                    }
                );
io.sockets.on('connection', function(socket){
    // my event listeners
});
2

問題が解決しました。すべてのサーバー構成が正しく、クライアント側のファイアウォールがそのポートをブロックしていたようです。そのため、httpサーバーと同じポート(ポート80)を使用する sockjs に切り替えています。したがって、クライアント側から接続がブロックされるリスクはありません。

1