👀

tracerouteした結果を/var/logにcrontabで自動保存

2023/02/13に公開

しつこい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