本ブログでは、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