Bellow script will list incoming connections and remote ip geo localization of the server, it will search in logs file emails addresses related to the remote ip address.
#!/bin/bash format="%30s %15s %20s %60s\n\n" header="%30s %15s %20s %60s\n" INFO=/tmp/info$1.tmp ZIMBRALOG=/var/log/zimbra.log* AUDITLOG=/opt/zimbra/log/audit.log* MAILBOXLOG=/opt/zimbra/log/mailbox.log* IPDB=ipinfo.io/ PORT=$1 COUNTER=0 echo "===========================================================" echo "Check connection on port $1" echo "===========================================================" echo "" printf "$header" "EMAIL" "IP" "COUNTRY" "HOSTNAME" echo "" IP=`netstat -an | grep ":$PORT " | grep "ESTABLISHED" | awk '{print $5}' | cut -d ':' -f1 | awk '!a[$0]++'` for i in $IP; do if [ $i != 0.0.0.0 ] && [[ $i != *"192.168."* ]] && [[ $i != *"127.0."* ]] #if [ $i != 0.0.0.0 ] && [[ $i != *"127.0."* ]] then `geoiplookup $i > $INFO 2>&1`; IP=$i; EMAIL=`cat $ZIMBRALOG | grep -E -o "\[$i\] <+[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+>" | tail -1 | awk '{print $2}' | tr -d '<>'` if [ ${#EMAIL} == 0 ] then EMAIL=`zcat $ZIMBRALOG.*.gz | grep -E -o "\[$i\] <+[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+>" | tail -1 | awk '{print $2}' | tr -d '<>'` fi if [ ${#EMAIL} == 0 ] then EMAIL=`cat $AUDITLOG | grep -E -o "\[ip=$i;\] [a-zA-Z0-9.-]* [a-zA-Z0-9.-]* [a-zA-Z0-9.-=;]* account=[a-zA-Z0-9.-]*@[a-zA-Z0-9.-]*\.[a-zA-Z0-9.-]*" | awk '{print $5}' | cut -d "=" -f 2 | tail -1 | tr -d '<>'` fi if [ ${#EMAIL} == 0 ] then EMAIL=`zcat $AUDITLOG.*.gz | grep -E -o "\[ip=$i;\] [a-zA-Z0-9.-]* [a-zA-Z0-9.-]* [a-zA-Z0-9.-=;]* account=[a-zA-Z0-9.-]*@[a-zA-Z0-9.-]*\.[a-zA-Z0-9.-]*" | awk '{print $5}' | cut -d "=" -f 2 | tail -1 | tr -d '<>'` fi if [ ${#EMAIL} == 0 ] then EMAIL=`cat $MAILBOXLOG | grep -E -o "name=[a-zA-Z0-9.-]*@[a-zA-Z0-9.-]*\.[a-zA-Z0-9.-]*;mid=23;ip=$i;" | cut -d "=" -f 2 | cut -d ";" -f 1 | tail -1 | tr -d '<>'` fi if [ ${#EMAIL} == 0 ] then EMAIL=`zcat $MAILBOXLOG.*.gz | grep -E -o "name=[a-zA-Z0-9.-]*@[a-zA-Z0-9.-]*\.[a-zA-Z0-9.-]*;mid=23;ip=$i;" | cut -d "=" -f 2 | cut -d ";" -f 1 | tail -1 | tr -d '<>'` fi if [ "$EMAIL" == "" ] then EMAIL="NotFound" fi COUNTRY=`cat $INFO` HOST=`host $i` printf "$format" "$EMAIL" $IP "$COUNTRY" "$HOST" COUNTER=$(($COUNTER+1)) fi done echo "===========================================================" echo "There $COUNTER current connection(s) on port $1" echo "==========================================================="
usage : ./script.sh {port}
exemple :
zimbra@mail:~/scripts$ ./script.sh 443 =========================================================== Check connection on port 443 =========================================================== EMAIL IP COUNTRY HOSTNAME user@domain.com 80.234.199.12 GeoIP Country Edition: FR, France 11.133.233.222.in-addr.arpa domain name pointer xxx.cable.dynamic.telecom.net. ...