Armadilloフォーラム

ソケット通信

tetsu-stu

2018年5月22日 17時44分

Armadillo-840にて、ソケット通信のプログラミングをしています。
Armadillo-840をサーバーとして、ポート番号502にて待ち受けしてますが、
クライアント側より、ポート番号502に接続できません。
調査した結果、ポート番号0~1023までは、接続できないようです。
ポート番号1024以降は、問題なく接続できます。
ncコマンドを使用しても同じ結果でした。
/etc/servicesを見ても、ポート番号502は、空いているので使用できそうな気がします。
なにか原因がわかる方、いらっしゃいますでしょうか?

コメント

三原と申します。

ポート番号 0 ~ 1023 は Well-Known Port と呼ばれ、Linux (Armadillo だけでなく PC に Linux をインストールした場合も同じ)では、デフォルトでは root ユーザのプロセスしか Listen できません。
そのあたりは http://www.mafty.net/how_to_listen_well-known_ports を参照願います。

中村です。

質問投稿で
>> Armadillo-840をサーバーとして、ポート番号502にて待ち受けしてますが、
>> クライアント側より、ポート番号502に接続できません。
と書かれていますので、root権限でサーバーを動かすことで、
ポート502をlistenすることには成功しているのではないでしょうか?

今回の問題の原因は Well-Known Port ではなくて、
firewall(iptables)の設定だと思います。

iptablesによってINPUTのデフォルトはDROP、
特定のものだけ許可しています(ACCEPT)。

特定のものとしては・・・、eth0は、
HTTPやTELNETなど/etc/firewall.confで指定したものと、
1024:65535のすべて(ただし6000:6010は除く)です。

eth0以外のインターフェースからのINPUTはすべて許可です。

atmark-dist-20170726/vendors/AtmarkTechno/Armadillo-840/etc/init.d/firewallの
主要部分を引用しておきます。

#!/bin/sh
...
. /etc/firewall.conf
...
# default setting: deny everything
iptables -F INPUT
iptables -P INPUT DROP
iptables -F OUTPUT
iptables -P OUTPUT DROP
 
# allow all non-external interfaces for everything
iptables -A INPUT  ! -i $EXT -j ACCEPT
iptables -A OUTPUT ! -o $EXT -j ACCEPT
...
  # tcp incoming
  if [ "$ALLOW_HTTP" = "yes" ]; then
    iptables -A INPUT -i $EXT -p tcp -d 0/0 --dport http     -j ACCEPT
  fi
  if [ "$ALLOW_TELNET" = "yes" ]; then
    iptables -A INPUT -i $EXT -p tcp -d 0/0 --dport telnet   -j ACCEPT
  fi
...
  iptables -A INPUT -i $EXT -p tcp -d 0/0 --dport ftp-data   -j ACCEPT
  iptables -A INPUT -i $EXT -p tcp -d 0/0 --dport auth       -j REJECT
  iptables -A INPUT -i $EXT -p tcp -d 0/0 --dport 6000:6010  -j DROP
  iptables -A INPUT -i $EXT -p tcp -d 0/0 --dport 1024:65535 -j ACCEPT
...
check_status

ここに出てくる$EXTは/etc/firewall.confでeth0になっています。

--
なかむら

ご返信ありがとうございます。
>
> 質問投稿で
> ポート502をlistenすることには成功しているのではないでしょうか?
はい。listenは成功しています。

>
> 今回の問題の原因は Well-Known Port ではなくて、
> firewall(iptables)の設定だと思います。
>
> iptablesによってINPUTのデフォルトはDROP、
> 特定のものだけ許可しています(ACCEPT)。
>
> 特定のものとしては・・・、eth0は、
> HTTPやTELNETなど/etc/firewall.confで指定したものと、
> 1024:65535のすべて(ただし6000:6010は除く)です。
>
> eth0以外のインターフェースからのINPUTはすべて許可です。
確かに firewallにてドロップされているようです。
502をACCEPTにして試したとこ接続できました。
ありがとうございました。