OK już piszę
Na początek - mam dwie karty sieciowe eth0=internet, eth1=sieć wewnętrzna
Dodałem do firewalla (tłusty druk):
Cytuj:
#!/bin/sh
# firewall 0.1-2004.12.27 Zciech (poprawka w lini 113 i 49 - macieks)
#
# W podstawowej wersji caly ruch z inerfejsow wewnetrznych jest dopuszczony i maskowany
# ruch z internetu zabroniony poza pakietami "powracajacymi" juz nawiazanych polaczen
# i polaczen na strone www (port 80 tcp) oraz pingi 1/s
. /etc/rc.conf
. /etc/rc.d/functions
i=`which iptables`
# Zmienne pobierane z rc.conf
# EXTIF="ppp0" # Interfejs do inetu
# CONNECTION="neorj" # Rodzaj polaczenia
# NETWORK=1 # Wlaczenie maskarady
# ============== Tu moje dopiski ===============
IPGW="10.0.0.1" # zewnętrzny adres karty eth0
IF="eth1" # karta sieci wewnętrznej
IPIF="10.10.10.1" # i jej adres IP
# adresy IP kompów podłączonych do rutera
NATED_HOSTS="10.10.10.1 10.10.10.2 10.10.10.3 10.10.10.4 10.10.10.5 10.10.10.6"
# ============= KONIEC DOPISKÓW ============
case $1 in
start)
if [ -e /proc/sys/net/ipv4/tcp_ecn ];then
echo 0 > /proc/sys/net/ipv4/tcp_ecn
fi
echo 1 > /proc/sys/net/ipv4/ip_forward
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
fi
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $f
done
$i -F
$i -F -t nat
$i -P INPUT DROP
$i -P FORWARD DROP
$i -P OUTPUT ACCEPT
# ============== Tu moje dopiski ===============
# definiujemy łańcuchy do zliczania ruchu
$i -N in_counter
$i -N out_counter
$i -N proxy_in_counter
$i -N proxy_out_counter
# kierujemy cały ruch przez nowe łańcuchy
# ruch wejściowy i wyjściowy bez proxy
$i -A FORWARD -i $EXTIF -d ! $IPGW -j in_counter
$i -A FORWARD -o $EXTIF -d ! $IPGW -j out_counter
# ruch wejściowy i wyjściowy z proxy (PORT PROXY=3128)
$i -A INPUT -i $IF -p tcp -d $IPIF --dport 3128 -j proxy_out_counter
$i -A OUTPUT -o $IF -p tcp -s $IPIF --sport 3128 -j proxy_in_counter
# przypisujemy dane do konkretnych kompów
for HOST in $NATED_HOSTS; do
$i -A proxy_in_counter -d $HOST
$i -A proxy_out_counter -s $HOST
$i -A in_counter -d $HOST
$i -A out_counter -s $HOST
done
# ============= KONIEC DOPISKÓW ============
...dalej tak jak było...
Teraz wystarczy co jakiś czas odczytać liczniki:
(uwaga - parametr -Z zeruje zebrane dane po odczytaniu)
iptables -L in_counter -v -x -n -Z
iptables -L out_counter -v -x -n -Z
iptables -L proxy_in_counter -v -x -n -Z
iptables -L proxy_out_counter -v -x -n -Z
zsumować in_counter + proxy_in_counter, oraz out_counter + proxy_out_counter,
zapisać otrzymane dane (dodane do zliczonych w poprzednim odczycie)
i wyświetlić odpowiednim skryptem na stronie (patrz
www.ao.sytes.net/stat)
To wszystko.