ハニーポット構築(iptablesの設定)
5/23 に開催されたSECCON Beginners 2020は散々な成績だった。
いつものことながら硝子のハートはぼろぼろである。
合間の時間で以前から設定したかったT-PotへFirewall設定を追加した。
今回はその際の手順を簡単に記載する。
実施したこと
・運用ポートのFilter設定
T-Potでは以下のPortが提供されている。
64294:CockpitのAdmin UI用 64295:ssh接続用 64297:KibanaのWeb UI用
⇒利用しているさくらのVPSではパケットフィルタに
接続許可制限できるPort範囲が1〜32767までであり
上記の64290番台のPortへの通信は制限できない。
そのためiptablesを使用してFirewall設定を実施した。
詳細内容
・自宅端末の回線IPからのみ64294、64295、64297の接続を受け付ける。
・自宅端末の回線IP以外からは64294、64295、64297の接続は拒否する。
手順
iptablesの設定について調べながら設定をした。
以下2つの手順が実施可能であり今回は手順1で設定した。
手順1.rules.shで管理する場合
以下のQ&Aを参考にした。
github.com
T-Potでは今回のような特定IPからの接続を拒否する設定の
永続化用に/opt/tpot/bin/rules.sh
を提供している。
そのため今回もrules.sh
に必要な設定を導入してみる。
①T-Potへのログイン
T-Potへssh接続する。その後、rootユーザへ変更する。
$ sudo su - #
②/opt/tpot/bin/rules.shのバックアップ取得
変更するrules.shのバックアップを取得する。
# cd /opt/tpot/bin/ # cp -p rules.sh rules.sh.org
③/opt/tpot/bin/rules.shへのiptablesルールの追加
自宅回線の接続IPアドレスの許可設定をrules.shに追加する。
INPUTルールに以下を追加
・<自宅回線の接続IPアドレス>からの64294,64295,64297のTCP/UDP通信を許可
・<自宅回線の接続IPアドレス>以外からの64294,64295,64297のTCP/UDP通信を拒否
# vi rules.sh #20200524 ADD IP Filter Rule /usr/sbin/iptables-legacy -w -A INPUT -s <自宅回線の接続IPアドレス> -p tcp --dport 64294:64295 -j ACCEPT /usr/sbin/iptables-legacy -w -A INPUT -s <自宅回線の接続IPアドレス> -p udp --dport 64294:64295 -j ACCEPT /usr/sbin/iptables-legacy -w -A INPUT -s <自宅回線の接続IPアドレス> -p tcp --dport 64297 -j ACCEPT /usr/sbin/iptables-legacy -w -A INPUT -s <自宅回線の接続IPアドレス> -p udp --dport 64297 -j ACCEPT /usr/sbin/iptables-legacy -w -A INPUT -p tcp --dport 64294:64295 -j REJECT /usr/sbin/iptables-legacy -w -A INPUT -p udp --dport 64294:64295 -j REJECT /usr/sbin/iptables-legacy -w -A INPUT -p tcp --dport 64297 -j REJECT /usr/sbin/iptables-legacy -w -A INPUT -p udp --dport 64297 -j REJECT
④サーバ再起動
サーバを再起動する。
# shutdown -r now
⑤設定値の確認
自宅回線の利用PCで64294,64295,64297で接続し、エラーが出力されないことを確認する。
携帯電話から公衆回線経由でアクセスし、エラーが出力されてアクセスできないことを確認する。
ただしこの方法だとT-Potのupdateを実施した場合に設定が上書きされるため、
更新の度に設定し直す必要がある。
またiptablesの確認に使用するiptables -L
コマンドでの設定値の確認もできない。
# iptables -L Chain INPUT (policy ACCEPT) ・・・★INPUTのChainに何も表示されない。 target prot opt source destination Chain FORWARD (policy DROP) target prot opt source destination DOCKER-USER all -- anywhere anywhere DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere <中略> Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain DOCKER (33 references) target prot opt source destination ACCEPT tcp -- anywhere 172.20.0.2 tcp dpt:10001 ACCEPT tcp -- anywhere 172.18.0.2 tcp dpt:5555 <中略> Chain DOCKER-ISOLATION-STAGE-1 (1 references) target prot opt source destination DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere <中略> Chain DOCKER-USER (1 references) target prot opt source destination RETURN all -- anywhere anywhere Chain DOCKER-ISOLATION-STAGE-2 (17 references) target prot opt source destination DROP all -- anywhere anywhere DROP all -- anywhere anywhere <中略> # Warning: iptables-legacy tables present, use iptables-legacy to see them
手順2.iptables-persistentで管理する場合
一般的に紹介されているiptables-persistentを使って、iptablesを管理する。
①T-Potへのログイン
T-Potへssh接続する。その後、rootユーザへ変更する。
$ sudo su - #
②iptables-persistentのインストール
iptablesの設定永続化のため、iptables-persistentをインストールする。
(※古いOSの場合はapt-getで実施する)
# apt install iptables-persistent
③ipv4.ruleのバックアップ取得
iptables-persistentをインストールすると/etc/iptablesフォルダ配下にrules.v4とrules.v6が作成される。
この内、rules.v4のバックアップを取得する。
# cd /etc/iptables # cp -p rules.v4 rules.v4.org
④ipv4.ruleへのiptablesルールの追加
iptablesの定義をipv4.ruleのINPUTルールへ追加する。
# vi rules.v4 *filter :INPUT ACCEPT [0:0] -A INPUT -s <自宅回線の接続IPアドレス> -p tcp --dport 64294:64295 -j ACCEPT -A INPUT -s <自宅回線の接続IPアドレス> -p udp --dport 64294:64295 -j ACCEPT -A INPUT -s <自宅回線の接続IPアドレス> -p tcp --dport 64297 -j ACCEPT -A INPUT -s <自宅回線の接続IPアドレス> -p udp --dport 64297 -j ACCEPT -A INPUT -p tcp --dport 64294:64295 -j REJECT -A INPUT -p udp --dport 64294:64295 -j REJECT -A INPUT -p tcp --dport 64297 -j REJECT -A INPUT -p udp --dport 64297 -j REJECT :FORWARD DROP [0:0] <中略>
設定完了後、リロードを実施して設定を反映する。
# /etc/init.d/iptables-persistent save # /etc/init.d/iptables-persistent reload
⑤サーバ再起動
サーバを再起動する。
# shutdown -r now
⑥設定値の確認
自宅回線の利用PCで64294,64295,64297で接続し、エラーが出力されないことを確認する。
携帯電話から公衆回線経由でアクセスし、エラーが出力されてアクセスできないことを確認する。
この方法だとT-Potのupdateを実施した場合でも設定が上書きされないため、設定をし直す必要がない。
またiptablesの確認に使用するiptables -L
コマンドでの設定値の確認もできるのでこちらの方が良いだろう。
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- <自宅回線の接続IPアドレス> anywhere tcp dpts:64294:64295 ACCEPT udp -- <自宅回線の接続IPアドレス> anywhere udp dpts:64294:64295 ACCEPT tcp -- <自宅回線の接続IPアドレス> anywhere tcp dpts:64297 ACCEPT udp -- <自宅回線の接続IPアドレス> anywhere udp dpts:64297 REJECT tcp -- anywhere anywhere tcp dpts:64294:64295 reject-with icmp-port-unreachable REJECT udp -- anywhere anywhere udp dpts:64294:64295 reject-with icmp-port-unreachable REJECT tcp -- anywhere anywhere tcp dpts:64297 reject-with icmp-port-unreachable REJECT udp -- anywhere anywhere udp dpts:64297 reject-with icmp-port-unreachable Chain FORWARD (policy DROP) target prot opt source destination DOCKER-USER all -- anywhere anywhere DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere <中略>
最後に
・設定の開始時にiptablesで制限するPort範囲を64200-64300で設定しようとしていたが、
KibanaやES headへのアクセスが制限されたため64294,64295,64297に絞って設定した。
上記の設定直後に白い画面が出てきて焦ったのが今回のハマりポイントだった。
・6/1ぐらいまでの期間限定で自宅学習用にAutoSpyやKibanaの無料講習が各社様から提供されているので
この機に積極的に受講してレベルアップを図りたい。
・5/12 に開催された第42回OWASP Sendai ミーティングにオンライン参加できて良かった。
この時に紹介されたspiderfootがT-Potにも含まれているため月次報告の際に有効利用する。