本ブログでは、Armadillo-400,800シリーズ,Armadilo-IoT G2にて不要なTCP/UDPポート(以下ポートと記載)を閉じる方法についてご紹介します。
Armadillo-400,800シリーズ,Armadilo-IoT G2のカーネルは開発を円滑に行えるようにするため、デフォルトで「TCP/80:http,TCP/21:ftp,TCP/23:telnet」が開放されています。
量産時にftpやtelnetのTCPポートを開放させたままにしておくとセキュリティが弱くなってしまうため、使用しない場合はポートを閉じておくことが大切です。
開放されたポートの確認方法については、別ブログ「Armadillo: ポート開放状態の確認方法」を参照してください。
今回は例として、Armadillo-440にて初期設定から不要ポートを閉じる方法について記載します。
ポート初期開放設定の変更準備
初期設定から不要ポートを閉じるには、Linuxカーネル/ユーザランドをビルドする際に設定の変更を行う必要があります。
設定はATDE5を用いて行うため、Armadillo-440の「ドキュメント・ダウンロード」よりダウンロードします。
ATDE5を起動させた後、ATDE5上にLinuxカーネル/ユーザランドのソースファイルをダウンロードします。
ダウンロードしたLinuxカーネル/ユーザランドをそれぞれ解凍します。
atde5:~$ tar zxf atmark-dist-[version].tar.gz
atde5:~$ tar zxf linux-3.14-at[version].tar.gz
atde5:~$ ls
atmark-dist-[version] linux-3.14-at[version]
atmark-dist-[version].tar.gz linux-3.14-at[version].tar.gz
ATDE5でビルドできるArmadilloユーザランドのソースファイルは、次のように各製品の情報を保存してあります。
この中に「Armadillo-440」ディレクトリが存在することを確認しておきます。
atde5:~$ cd atmark-dist-[version]/vendors/AtmarkTechno
atde5:~/atmark-dist-[version]/vendors/AtmarkTechno$ ls
Armadillo-210.Base Armadillo-440 Armadillo-IoTG-Std
Armadillo-210.Common Armadillo-460 Armadillo-IoTG.Common
Armadillo-210.Recover Armadillo-4x0.Common Armadillo-WLAN.Common
Armadillo-220.Base Armadillo-500 Common
Armadillo-220.Recover Armadillo-500-FX.base SUZAKU-V.Common
Armadillo-230.Base Armadillo-500-FX.dev SUZAKU-V.SZ310
Armadillo-230.Recover Armadillo-810 SUZAKU-V.SZ310-SID
Armadillo-240.Base Armadillo-840 SUZAKU-V.SZ310-SIL
Armadillo-240.Recover Armadillo-840m SUZAKU-V.SZ310-SIL-GPIO
Armadillo-2x0.Common Armadillo-8x0.Common SUZAKU-V.SZ410
Armadillo-300 Armadillo-9 SUZAKU-V.SZ410-SID
Armadillo-420 Armadillo-9.Common SUZAKU-V.SZ410-SIL
Armadillo-420.WLAN-AWL12 Armadillo-9.PCMCIA SUZAKU-V.SZ410-SIL-GPIO
Armadillo-420.WLAN-AWL13 Armadillo-Box-WS1 SUZAKU-V.SZ410-SIV
この「Armadillo-440」ディレクトリの中身を変更することで、「Armadillo-440」の初期設定を変更します。
ユーザランドの設定変更によるポートの閉鎖
今回は「ポートの開閉を管理するfirewall」の設定スクリプトファイルを変更する方法で不要なポートを閉じます。
firewallの設定ファイル編集はroot権限が必要なため、[sudo]を用いて編集します。
atde5:~/atmark-dist-[version]/vendors/AtmarkTechno$ cd Armadillo-440/
atde5:~/atmark-dist-[version]/vendors/AtmarkTechno/Armadillo-440$ sudo vi etc/init.d/firewall
設定スクリプトファイルは次のように[iptables]コマンドで任意のポートを開放しています。
これを変更することで、Armadillo起動時に開放されるポートを制限することができます。
-------略--------
# allow all non-external interfaces for everything
iptables -A INPUT ! -i $EXT -j ACCEPT
iptables -A OUTPUT ! -o $EXT -j ACCEPT
# external interface
icmp incoming
iptables -A INPUT -i $EXT -p icmp -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
if [ "$ALLOW_FTP" = "yes" ]; then
iptables -A INPUT -i $EXT -p tcp -d 0/0 --dport ftp -j ACCEPT
fi
if [ "$ALLOW_SNMP" = "yes" ]; then
iptables -A INPUT -i $EXT -p tcp -d 0/0 --dport snmp -j ACCEPT
fi
if [ "$ALLOW_SSH" = "yes" ]; then
iptables -A INPUT -i $EXT -p tcp -d 0/0 --dport ssh -j ACCEPT
fi
if [ "$ALLOW_SERI2ETH" = "yes" ]; then
iptables -A INPUT -i $EXT -p tcp -d 0/0 --dport 21347 -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
-------略--------
[iptables]コマンドの「ACCEPT」部分を、書式に合わせて書き換えることでポートの変更を行うことができます。
今回は例としてftpとtelnetのTCPポートを「REJECT」に変更します。
-------略--------
# allow all non-external interfaces for everything
iptables -A INPUT ! -i $EXT -j ACCEPT
iptables -A OUTPUT ! -o $EXT -j ACCEPT
# external interface
icmp incoming
iptables -A INPUT -i $EXT -p icmp -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 REJECT
fi
if [ "$ALLOW_FTP" = "yes" ]; then
iptables -A INPUT -i $EXT -p tcp -d 0/0 --dport ftp -j REJECT
fi
if [ "$ALLOW_SNMP" = "yes" ]; then
iptables -A INPUT -i $EXT -p tcp -d 0/0 --dport snmp -j ACCEPT
fi
if [ "$ALLOW_SSH" = "yes" ]; then
iptables -A INPUT -i $EXT -p tcp -d 0/0 --dport ssh -j ACCEPT
fi
if [ "$ALLOW_SERI2ETH" = "yes" ]; then
iptables -A INPUT -i $EXT -p tcp -d 0/0 --dport 21347 -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
-------略--------
設定スクリプトファイル修正後、「Linuxカーネル/ユーザーランドをビルドする」「tftpdl を使用してフラッシュメモリを書き換える」を参考にLinuxカーネル/ユーザランドを書き換えます。
書き換え後、ATDE5より[nmap]コマンドを実行し、[TCP/80:http]ポートのみ開放されていることが確認できれば完了です。
atde5:~$ nmap [Armadillo-440のIPアドレス]
Starting Nmap 6.00 ( http://nmap.org ) at 2018-01-05 17:05 JST
Nmap scan report for [Armadillo-440のIPアドレス]
Host is up (0.0029s latency).
Not shown: 843 closed ports, 156 filtered ports
PORT STATE SERVICE
80/tcp open http