👀
tracerouteした結果を/var/logにcrontabで自動保存
しつこいIPを自動でtracerouteで特定して、crontabでvar/log/に保存までしてもらうまでのbash
前提条件
netstatで1時間に5回以上アクセスしてくるIPをtracerouteで追跡して/var/log/に保存する
#!/bin/bash
# 実行間隔(秒)
interval=3600
# 許容アクセス回数
limit=5
# 出力先ログファイル名
logfile="/var/log/example.log"
# 一時的な結果保存用ファイル
tmpfile=$(mktemp)
while true; do
# 指定時間内のアクセス件数が許容回数以上のIPアドレスを取得
netstat -an | grep ":80 " | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | awk '$1 > '"$limit"' {print $2}' > $tmpfile
# 疑わしいIPアドレスに対してtracerouteを実行し、結果をログに保存
while read ip; do
echo -e "\n\nTraceroute result for $ip at $(date)\n" >> $logfile
traceroute $ip >> $logfile
done < $tmpfile
# 指定時間待機
sleep $interval
done
スクリプト名をexample.sh
chmod +x example.sh
次に、crontab用のスクリプト.shを作成
#!/bin/bash
# set log file name
log_file="/var/log/netstat_tracerout_$(date +%Y%m%d-%H%M%S).log"
# get IP addresses with over 5 connections in the last hour
ips=$(netstat -nat | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | awk '$1 > 5 {print $2}')
# loop through the list of IPs
for ip in $ips
do
# run tracerout for each IP and save to the log file
echo "Tracerout for IP: $ip" >> $log_file
tracerout $ip >> $log_file
echo "" >> $log_file
done
/usr/local/bin/netstat_tr.shで保存
#crontab -eで・・・
0 * * * * /usr/local/bin/netstat_tr.sh > /dev/null 2>&1 &
/var/log/にtracerouteしたIPを自動で保存
ただhttps: 443のポートでアクセスしてきているIPは途中でエラーになるかも・・・
あくまで、ヘッドレス(ブラウザからではなく、ローカルIPに直でアクセスしてきているIPを追跡・保存するためのツールです)
すごいね、素人でもこんなの作れる時代なんて。まぁデバッグは各自で。
ご指摘・改善等あれば、コメントでよろしくお願いします。
🐌ちなみに・・・
SSL通信間でIPをログ保存pythonでtracerouteできるらしい。
import socket
import ssl
def check_tls(host, port):
context = ssl.create_default_context()
with socket.create_connection((host, port)) as sock:
with context.wrap_socket(sock, server_hostname=host) as ssock:
certificate = ssock.getpeercert()
return certificate
if __name__ == "__main__":
host = "example.com"
port = 443
certificate = check_tls(host, port)
print(certificate)
#事前にpip3 install pyOpenSSLが必要かも
```
あとは、これをcrontab -eでpythonfileを自動で実行すれば、443ポート(https)も自動で保存してくれる。
Discussion