[修正]iptablesのログのip addressをdomain nameではき出すscript

*** PHPのWarningやら文字列のIndex値が違っていたので修正。 だらだらと流れるiptablesのlogを見ているのは暇つぶし。

ざっくりこんな感じ。

<?php

//for dubugging set this to true.
//$debug = true; //to enable debugging info.
$debug = false;
//colour code for echo
$colour_red = "\e[31m";
$colour_yellow = "\e[33m";
$colour_reset = "\e[m";

if (!$debug) { error_reporting(0); }

while (false !== ($line = fgets(STDIN))) {
 //echo $line;
 $log_pieces = explode(" ", $line);
 $rule = $log_pieces[6];
 if($debug) { echo "Rule is " . $rule . "\n"; }
 if ($rule == "OUTPUT]") {
 if($debug) { echo "Rule is " . $rule . "\n"; }
 $src_idx = 9;
 $dst_idx = 10;
 } else {
 $src_idx = 10;
 $dst_idx = 11;
 }
 $src_ip = substr($log_pieces[$src_idx],4);
 $dst_ip = substr($log_pieces[$dst_idx],4);

$src_hostname = gethostbyaddr($src_ip);
 if ($src_hostname == $src_ip) {
 $src_hostname = $colour_red . $src_hostname . $colour_reset;
 } else {
 $src_hostname = $colour_yellow . $src_hostname . $colour_reset;
 }

$dst_hostname = gethostbyaddr($dst_ip);
 if ($dst_hostname == $dst_ip) {
 $dst_hostname = $colour_red . $dst_hostname . $colour_reset;
 } else {
 $dst_hostname = $colour_yellow . $dst_hostname . $colour_reset;
 }

if ($debug) {
 echo "$log_pieces[$src_idx] $src_ip $src_hostname\n";
 echo "$log_pieces[$dst_idx] $dst_ip $dst_hostname\n";
 echo " \n";
 }

$log_pieces[$src_idx] = "SRC=" . $src_hostname . " ";
 $log_pieces[$dst_idx] = "DST=" . $dst_hostname . " ";
 $rebuilt_log = implode(" ", $log_pieces);
 echo "$rebuilt_log";
}

?>

ログ自体は、こんな感じ。

Aug 9 22:03:36 hostname kernel: [iptables OUTPUT] IN= OUT=lo SRC=x.x.x.x DST=x.x.x.x LEN=88 TOS=0x00 PREC=0xC0 TTL=64 ID=45378 PROTO=ICMP TYPE=3 CODE=1 [SRC=x.x.x.x DST=x.x.x.x LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=47596 DF PROTO=TCP SPT=46141 DPT=10050 WINDOW=29200 RES=0x00 SYN URGP=0 ]

 

参考になったページは、

#> tail -f myiptable.log | php thisscipt.sh で実行。

 

On this day..


You are accessing sla-industries.org via ipv4 (54.198.15.20).