ブロックされた接続のUFWファイアウォールログを通過するスクリプトを作成し、接続しようとしていた送信元IPとポートを取り出したいとします。私はこれらを個別に取り出すためにスクリプトをまとめることができました。そして、今すぐスクリプトを入手してIPとポートを1行に出力するのが難しいです。以下は、私が持っているファイアウォールログとスクリプトのサンプルです。現在、すべてのIPを出力し、その後にすべてのポート番号を出力します。各行には、各ログエントリの送信元IPアドレスと対応する宛先ポートが必要です。IPとポート番号のUFWログの解析
最終的な目的は、各IPアドレスが接続しようとしているポートを確認することです。私の計画はuniq -cを使用して、ログから各IPとポートを出力できるようにしました。
入力
Nov 26 06:25:11 vps123456 kernel: [620802.845897] [UFW BLOCK] IN=ens3 OUT= MAC=fa:16:3e:9f:c7:5d:11:22:33:44:55:66:77:88 SRC=85.93.20.253 DST=10.20.30.40 LEN=40 TOS=0x00 PREC=0x00 TTL=245 ID=5830 PROTO=TCP SPT=51639 DPT=735 WINDOW=1024 RES=0x00 SYN URGP=0
Nov 26 06:27:44 vps123456 kernel: [620955.012996] [UFW BLOCK] IN=ens3 OUT= MAC=fa:16:3e:9f:c7:5d:11:22:33:44:55:66:77:88 SRC=51.15.51.140 DST=10.20.30.40 LEN=433 TOS=0x00 PREC=0x00 TTL=50 ID=42044 DF PROTO=UDP SPT=5088 DPT=5062 LEN=413
出力
file="input"
for line in $file; do
addr=$(awk '{match($0,/SRC=[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/); ip = substr($0,RSTART,RLENGTH); print ip}' $file)
port=$(awk '{match($0,/DPT=[0-9]{0,5}/); port = substr($0,RSTART,RLENGTH); print port}' $file)
echo $addr, $src >> output
done
./script
SRC=85.93.20.253 SRC=51.15.51.140, DPT=735 DPT=5062