🐙
EC2でキャプチャしたパケットをS3に保存する
今回は自宅でのハニーポットの通信監視のために構築したので今後のためにも記録しておきます。
シリーズ紹介
この記事は、自宅で運用するハニーポットシリーズ#3 です。
#2ではT-Potの構築について解説しています。
環境
- インターネットに接続されているEC2がある。
- (EC2でWireGuardをホストしている。)
- Ubuntu 24.04.3
S3のデプロイ
以下のような設定でデプロイします。
- バケットタイプ:汎用
- バケット名:ec2-packets
- オブジェクト所有者:ACL無効
- パブリックアクセス:すべてブロック
- バケットのバージョニング:無効
セキュリティのためにパブリックアクセスはブロックします。
権限設定
一般的に、EC2からS3へのアクセス方法は3種類存在します。
- IAMロールをEC2にアタッチして許可する。
- EC2内でIAMユーザにアクセスキーでログインし、許可する。
- S3で発行したアクセスキーを利用してS3APIでの操作を許可する。
2,3については、クレデンシャル漏洩の可能性があるので同じテナントに存在する場合には1の方法を利用します。
IAMポリシーの作成
- IAMポリシーを新規作成する。
- JSONでポリシーを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::ec2-packets",
"arn:aws:s3:::ec2-packets/*"
]
}
]
}
IAMロールのアタッチ
- IAMでロールを作成する。
- 作成したポリシーをロールにアタッチします。(EC2のIAMロールを変更)
EC2からの接続確認
awsコマンドの利用
aws
awsコマンドが利用できることを確認してください。Ubuntuではデフォルトでインストールされていない可能性があります。その場合は以下のコマンドでインストールできます。
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
転送のテストをしてみます。
echo 's3test' > ./s3.txt
aws s3 cp ./s3.txt s3://ec2-packets/
S3でオブジェクトページを開くと、転送が完了したかわかります。
キャプチャしてみる
sudo tcpdump -i wg0
wg0はお使いの環境に合わせて変更してください。(eth0など)キャプチャしたパケットが画面に表示されると思います。
一時保存ディレクトリを作成する
/tmp に保存しても良いですが、ユーザー権限では本来アクセスできません。そこで、/tmp/captureを作成して、保存します。
sudo mkdir /tmp/capture
sudo chown ubuntu:ubuntu /tmp/capture
cronを利用して、自動実行にする
cronを利用し、以下の機能を実装します。
- 5分単位でキャプチャ
- キャプチャしたパケットをS3に転送
- 転送したパケットはローカルから削除
まずは、定期実行するシェルスクリプトを作成します。
capture.sh
#!/bin/bash
DIR=/tmp/capture
FILE=$DIR/capture-$(date +%H%M%S).pcap
IFACE=wg0
DURATION=600
BUCKET=s3://ec2-packets/$(date +%Y%m%d)/
sudo timeout $DURATION tcpdump -i $IFACE -w $FILE
aws s3 cp $FILE $BUCKET
rm -f $FILE
シェルスクリプトを5分おきに実行します。
crontab -e
*/5 * * * * /home/ubuntu/capture.sh >> /home/ubuntu/capture.log 2>&1
tcpdumpの使い方については、こちらの記事がとてもわかりやすいです。
次は、S3のパケットを取り込んでArkimeを利用する方法について解説します。
Discussion