IPTables Traffic Accounting

NetRat

Member
Hi @LL :)

ich zähle eingehenden Traffic derzeit via IPTables;

Code:
iptables -N TRAFFIC_IN
iptables -I INPUT -j TRAFFIC_IN
Und für jeden Port eine weitere Regel, hier z.B. HTTP:
Code:
iptables -A TRAFFIC_IN -p tcp --dport 80

Soweit so gut, mit "iptables -v -n -L TRAFFIC_IN" können die einzelnen Werte angenehm ausgelesen werden.

Dies betrifft jedoch einzig und alleine den eingehenden Traffic, die Antwort Pakete werden hier nicht mitgezählt.

Jemand eine Idee wie ich den Ausgehenden Traffic vernünftig aufzeichne, so dass er den ehemaligen Empfangs-Ports (hier z.B. 80 ) zugeordnet wird?
 
IAM basiert genau darauf. Evtl. schaust Du es Dir an wie es in dem Script gelöst ist. (Oder Du nimmst gleich IAM.)
Der für Dich wesentliche Teil ist in der Datei iptables.server.
Hier der Link: Trafficauswertung mit IAM

huschi.
 
CLOSE IT, it's solved!

So, habe mir nun ein kleines Script gebaut mit welchem ich die einzelnen Chains für die Backends (IPs bzw V-Server) und die dazugehörigen Ports erstellen kann.

Die Datei iptnta.sh beinhaltet nur die allgemeinen Funktionen, die eigentlichen Regeln werden in der iptnta.rules abgelegt.

Das Script funktioniert auf einem Router bzw. V-Server Host (FORWARD-Chain) und ebenfalls direkt mit INPUT- und OUTPUT-Chain.

/root/scripts/iptnta.rules
Code:
init

create_backend node 1.2.3.4
	account_port node 25
	account_port node 80
	account_port node 143
	account_port node 443
	account_port node 993
	account_port node 22

create_backend vserver_01 12.34.56.78
	account_port vserver_01 25
	account_port vserver_01 80
	account_port vserver_01 143
	account_port vserver_01 443
	account_port vserver_01 993
	account_port vserver_01 22

create_backend vserver_02 123.45.67.89
	account_port vserver_02 25
	account_port vserver_02 80
	account_port vserver_02 22

/root/scripts/iptnta.sh
Code:
#!/bin/bash

IPTABLES="/sbin/iptables"
RULES="/root/scripts/iptnta.rules"

# stop
function stop()
{
	$IPTABLES -P INPUT ACCEPT
	$IPTABLES -P OUTPUT ACCEPT
	$IPTABLES -P FORWARD ACCEPT
	$IPTABLES -F
	$IPTABLES -X
}
# init
function init()
{
	stop
	echo "" > /var/lib/iptables/backends
}

# create_backend <name> <ip-address>
function create_backend()
{
	if [ -z "$1" ]
	then
		echo "$(date) [ERROR] Expected second parameter: <name>"
		echo "Please try again."
	else if [ -z "$2" ]
	then
		echo "$(date) [ERROR] Expected third parameter: <ip-address>"
		echo "Please try again."
	else
		# Schreibe name + ip in /var/lib/iptables/backends
		echo "$1:$2" >> /var/lib/iptables/backends

		$IPTABLES -N "TRAFFIC_IN_""$1"
		$IPTABLES -N "TRAFFIC_OUT_""$1"
		
		$IPTABLES -I INPUT -d $2 -j "TRAFFIC_IN_""$1"
		$IPTABLES -I OUTPUT -s $2 -j "TRAFFIC_OUT_""$1"
		$IPTABLES -I FORWARD -d $2 -j "TRAFFIC_IN_""$1"
		$IPTABLES -I FORWARD -s $2 -j "TRAFFIC_OUT_""$1"
	fi fi
}
# account_port <backend-name> <port> [<proto>] 
function account_port()
{
	if [ -z $1 ]
	then
		echo "$(date) [ERROR] Expected third parameter: <backend-name>"
                echo "Please try again."
	else if [ -z $2 ]
	then
		echo "$(date) [ERROR] Expected third parameter: <port>"
                echo "Please try again."
	else
		for i in $(cat /var/lib/iptables/backends);
		do
			name=$(echo $i | awk 'BEGIN {FS=":"}; {print $1};')
			if [ "$name" = "$1" ]
			then
				ip=$(echo $i | awk 'BEGIN {FS=":"}; {print $2};')
				#if [ -z $ip ]
				#then
					#echo "$(date) [ERROR] IP address unknown."
	                #echo "Please try again."
					#exit 1
				#fi
			#else
				#echo "$(date) [ERROR] Backend name unknown."
				#echo "Please try again."
				#exit 2
			fi
		done
		$IPTABLES -A "TRAFFIC_IN_""$1" -p ${3:-tcp} -d $ip --dport $2
		$IPTABLES -A "TRAFFIC_OUT_""$1" -p ${3:-tcp} -s $ip --sport $2 
	fi fi
}
case $1 in
start)
	source $RULES
;;
stop)
	stop
;;
restart)
	$0 stop
	$0 start
;;
show)
	$IPTABLES -nvL "TRAFFIC_IN_""$2"
	$IPTABLES -nvL "TRAFFIC_OUT_""$2"
;;
zero)
	$IPTABLES -Z "TRAFFIC_IN_""$2"
	$IPTABLES -Z "TRAFFIC_OUT_""$2"
;;
esac

Kann bei weitem noch nicht alles was es später mal können soll, ist aber schonmal ein guter Anfang ;)

Nochmal THX für die Vorlage :)
 
Last edited by a moderator:
Back
Top