tetsu-stu
2018年5月22日 17時44分
Armadillo-840にて、ソケット通信のプログラミングをしています。
Armadillo-840をサーバーとして、ポート番号502にて待ち受けしてますが、
クライアント側より、ポート番号502に接続できません。
調査した結果、ポート番号0~1023までは、接続できないようです。
ポート番号1024以降は、問題なく接続できます。
ncコマンドを使用しても同じ結果でした。
/etc/servicesを見ても、ポート番号502は、空いているので使用できそうな気がします。
なにか原因がわかる方、いらっしゃいますでしょうか?
コメント
y.nakamura
中村です。
質問投稿で
>> 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になっています。
--
なかむら
tetsu-stu
ご返信ありがとうございます。
>
> 質問投稿で
> ポート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にして試したとこ接続できました。
ありがとうございました。
access.mihara
2018年5月22日 18時34分
三原と申します。
ポート番号 0 ~ 1023 は Well-Known Port と呼ばれ、Linux (Armadillo だけでなく PC に Linux をインストールした場合も同じ)では、デフォルトでは root ユーザのプロセスしか Listen できません。
そのあたりは http://www.mafty.net/how_to_listen_well-known_ports を参照願います。