Показано с 1 по 2 из 2
Комбинированный просмотр
-
14.08.2009, 07:42 #1Продвинутый юзер
- Регистрация
- 01.04.2009
- Сообщений
- 271
- Сказал(а) спасибо
- 83
- Поблагодарили 0 раз(а) в 0 сообщениях
Пример (просто пример)
читайте man и howto и пользуйтесь /dev/hands.
Скрытый текстИспользуется только IPTABLES и bash.
Конфигурация:
RH 8.0 - Server/Firewall and etc
eth0 - смотрит наружу IP: 192.168.0.10
eth1- смотрит в мою local'ку IP: 10.0.0.1
В local'ке две машины Workstation and Laptop, иногда брат приезжает с третьей машиной, будем называть его OTHER.
За основу взяты некоторые scripts публично доступные.
1. Нужно считать трафик TCP как INBOUND так и OUTBOUND.
2. Трафик с провайдерской сеткой.
3. Траффик с интернетом.
4. Ну и конечно сколько жрет внешнего трафика каждая машина.
Поехали:
Начнем с того что надо вставить пару строчек (не совсем пару но кто хочет может вынести их в отдельный файл) в ваш script который настраивает iptables.
1. Переменные используемые в скрипте firwall'а:
IPTABLES="/sbin/iptables"
# 1.1 Your external device
INET_IP="192.168.0.10"
INET_IFACE="eth0"
# 1.2 Internet Service Provider's Network
ISP_IP="192.168.0.1"
ISP_IP_RANGE="192.168.0.0/24"
# Local Area Network configuration.
# your LAN's IP range and localnet host's IP. /24 means to only use the first 24
# bits of the 32 bit IP address. the same as netmask 255.255.255.0
LAN_IP="10.0.0.1"
LAN_IP_RANGE="10.0.0.0/24"
LAN_IFACE="eth1"
LAN_IP_WORKSTATION="10.0.0.11"
LAN_IP_LAPTOP="10.0.0.10"
Это мы установили переменные, которые в дальнейшем будут использоваться, ну и для удобочитаемости пригодятся.
2. Настраиваем chains/цепочки INPUT, OUTPUT and FORWARD чтобы отобрать трафика который нас интересует. По команде -j RETURN в цепочках для расчета траффика, пакет вернется на следующее правило которое следует за нашими правилами для INPUT, OUTPUT и FORWARD. Так что не волнуйтесь мышь не проскочит. Эти правила должны стоять первыми в своих цепочках.
# Перенаправляем трафик входящий с внешнего устройства
$IPTABLES -A INPUT -d $INET_IP -i $INET_IFACE -j TRAFFIC
# Перенаправляем трафик локальной сети
$IPTABLES -A FORWARD -o $LAN_IFACE -d $LAN_IP_RANGE -j TRAFFIC_FW
$IPTABLES -A FORWARD -s $LAN_IP_RANGE -o $INET_IFACE -j TRAFFIC_FW
# Перенаправляем трафик исходящий с внешнего устройства
$IPTABLES -A OUTPUT -s $INET_IP -o $INET_IFACE -j TRAFFIC
3. Далее настраиваем chains/цепочки которые будем использовать для расчета трафика
# Create separate chains for TRAFFIC Counter
$IPTABLES -N TRAFFIC
# Для трафика с localnet
$IPTABLES -N TRAFFIC_FW
# Для IN трафика вашего сервера
$IPTABLES -N TRAFFIC_TCP_INBOUND
# Для OUT трафика вашего сервера
$IPTABLES -N TRAFFIC_TCP_OUTBOUND
# Your overall INBOUND and OUTBOUND traffic with external network except ISP ip range
# Ваш INBOUND and OUTBOUND traffic с внешней сетью за исключением провайдерской подсети
$IPTABLES -N TRAFFIC_TCP_INBOUND_EXT
$IPTABLES -N TRAFFIC_TCP_OUTBOUND_EXT
# Your overall INBOUND and OUTBOUND traffic with ISP network
# Ваш INBOUND and OUTBOUND traffic с провайдерской подсетью
$IPTABLES -N TRAFFIC_TCP_INBOUND_ISP
$IPTABLES -N TRAFFIC_TCP_OUTBOUND_ISP
# Your overall INBOUND and OUTBOUND traffic of your server
$IPTABLES -N TRAFFIC_TCP_INBOUND_SERVER
$IPTABLES -N TRAFFIC_TCP_OUTBOUND_SERVER
# Your overall INBOUND and OUTBOUND traffic of your local network
$IPTABLES -N TRAFFIC_TCP_INBOUND_FRWD
$IPTABLES -N TRAFFIC_TCP_INBOUND_WS
$IPTABLES -N TRAFFIC_TCP_INBOUND_LAPTOP
$IPTABLES -N TRAFFIC_TCP_INBOUND_LNET
#
$IPTABLES -N TRAFFIC_TCP_OUTBOUND_FRWD
$IPTABLES -N TRAFFIC_TCP_OUTBOUND_WS
$IPTABLES -N TRAFFIC_TCP_OUTBOUND_LAPTOP
$IPTABLES -N TRAFFIC_TCP_OUTBOUND_LNET
4. Далее настраиваем chains/цепочки чтобы они работали так как нам нужно и разбрасывали трафик по подцепочкам (Будьте внимательны не все команды уместились на одной строке)
#
# Create content for TRAFFIC chains
#************************************************* ********** *****
# Основная цепочка, здесь фильтруется трафик для сервера на IN and OUT
$IPTABLES -A TRAFFIC -p tcp -d $INET_IP -i $INET_IFACE -j TRAFFIC_TCP_INBOUND
$IPTABLES -A TRAFFIC -p tcp -s $INET_IP -o $INET_IFACE -j TRAFFIC_TCP_OUTBOUND
$IPTABLES -A TRAFFIC -j RETURN
# Основная цепочка здесь фильтруется трафик для localnetwork на IN and OUT
$IPTABLES -A TRAFFIC_FW -p tcp -d $LAN_IP_RANGE -o $LAN_IFACE -j TRAFFIC_TCP_INBOUND_FRWD
$IPTABLES -A TRAFFIC_FW -p tcp -s $LAN_IP_RANGE -o $INET_IFACE -j TRAFFIC_TCP_OUTBOUND_FRWD
$IPTABLES -A TRAFFIC_FW -j RETURN
# Исходящий трафик с localnetwork
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_FRWD -s $LAN_IP_LAPTOP -o $INET_IFACE -j TRAFFIC_TCP_OUTBOUND_LAPTOP
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_FRWD -s $LAN_IP_WORKSTATION -o $INET_IFACE -j TRAFFIC_TCP_OUTBOUND_WS
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_FRWD -s $LAN_IP_RANGE -o $INET_IFACE -j TRAFFIC_TCP_OUTBOUND_LNET
# Redirect для подсчета трафика для ISP и Internet
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_FRWD -s $LAN_IP_RANGE -o $INET_IFACE -d $ISP_IP_RANGE -j TRAFFIC_TCP_OUTBOUND_ISP
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_FRWD -s $LAN_IP_RANGE -o $INET_IFACE ! -d $ISP_IP_RANGE -j TRAFFIC_TCP_OUTBOUND_EXT
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_FRWD -j RETURN
# Исходящий трафик с Work Station
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_WS -j RETURN
# Исходящий трафик с Laptop
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_LAPTOP -j RETURN
# Исходящий трафик с OTHER т.е. весь оставшийся
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_LNET -j RETURN
# Исходящий трафик с Server/Firewall
# Redirect для подсчета траффика для ISP и Internet
$IPTABLES -A TRAFFIC_TCP_OUTBOUND -s $INET_IP -o $INET_IFACE -d $ISP_IP_RANGE -j TRAFFIC_TCP_OUTBOUND_ISP
$IPTABLES -A TRAFFIC_TCP_OUTBOUND -s $INET_IP -o $INET_IFACE ! -d $ISP_IP_RANGE -j TRAFFIC_TCP_OUTBOUND_EXT
$IPTABLES -A TRAFFIC_TCP_OUTBOUND -s $INET_IP -o $INET_IFACE -j TRAFFIC_TCP_OUTBOUND_SERVER
$IPTABLES -A TRAFFIC_TCP_OUTBOUND -j RETURN
# Трафик предназначенный для ISP
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_ISP -j RETURN
# Трафик предназначенный для Internet
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_EXT -j RETURN
# Исходящий трафик с Server/Firewall
$IPTABLES -A TRAFFIC_TCP_OUTBOUND_SERVER -j RETURN
# Входящий трафик на Server/Firewall
# Redirect для подсчета трафика от ISP и Internet
$IPTABLES -A TRAFFIC_TCP_INBOUND -d $INET_IP -i $INET_IFACE -s $ISP_IP_RANGE -j TRAFFIC_TCP_INBOUND_ISP
$IPTABLES -A TRAFFIC_TCP_INBOUND -d $INET_IP -i $INET_IFACE ! -s $ISP_IP_RANGE -j TRAFFIC_TCP_INBOUND_EXT
$IPTABLES -A TRAFFIC_TCP_INBOUND -d $INET_IP -i $INET_IFACE -j TRAFFIC_TCP_INBOUND_SERVER
$IPTABLES -A TRAFFIC_TCP_INBOUND -j RETURN
# От ISP
$IPTABLES -A TRAFFIC_TCP_INBOUND_ISP -j RETURN
# От Internet
$IPTABLES -A TRAFFIC_TCP_INBOUND_EXT -j RETURN
# Входящий трафик на Server/Firewall
$IPTABLES -A TRAFFIC_TCP_INBOUND_SERVER -j RETURN
# Входящий трафик на localnetwork
$IPTABLES -A TRAFFIC_TCP_INBOUND_FRWD -d $LAN_IP_LAPTOP -o $LAN_IFACE -j TRAFFIC_TCP_INBOUND_LAPTOP
$IPTABLES -A TRAFFIC_TCP_INBOUND_FRWD -d $LAN_IP_WORKSTATION -o $LAN_IFACE -j TRAFFIC_TCP_INBOUND_WS
$IPTABLES -A TRAFFIC_TCP_INBOUND_FRWD -d $LAN_IP_RANGE -o $LAN_IFACE -j TRAFFIC_TCP_INBOUND_LNET
# Redirect для подсчета трафика от ISP и Internet
$IPTABLES -A TRAFFIC_TCP_INBOUND_FRWD -d $LAN_IP_RANGE -o $LAN_IFACE -s $ISP_IP_RANGE -j TRAFFIC_TCP_INBOUND_ISP
$IPTABLES -A TRAFFIC_TCP_INBOUND_FRWD -d $LAN_IP_RANGE -o $LAN_IFACE ! -s $ISP_IP_RANGE -j TRAFFIC_TCP_INBOUND_EXT
$IPTABLES -A TRAFFIC_TCP_INBOUND_FRWD -j RETURN
# Входящий трафик на Workstation
$IPTABLES -A TRAFFIC_TCP_INBOUND_WS -j RETURN
# Входящий трафик на Laptop
$IPTABLES -A TRAFFIC_TCP_INBOUND_LAPTOP -j RETURN
# Входящий трафик на OTHER т.е. все отальные
$IPTABLES -A TRAFFIC_TCP_INBOUND_LNET -j RETURN
С настройками iptables покончено
5. Далее пишем скрипт который выполняется cron/кроном он будет запрашивать iptables, подсчитывать и выводить отчеты по трафику либо на /dev/stdout либо в файл путь к которому указывается в начале скрипта.
Пример команды запуска скрипта: /sbin/traflog -s -p
Данная команда выводит на /dev/stdout статистику для вашего сервера.
( Будте внимательны Вывод в файл по умолчанию. )
#!/bin/sh
#
# traflog - logger of iptable's statistic
#
# Path to your system iptables
IPTABLES="/sbin/iptables"
# Path to dir with log output
F_PATH="/var/log/firewall/traflog"
#
# Files have names like 'YearMonthDate . whose trafic
F_LNET="$F_PATH/"`date +"%Y%m%d"`".lnet"
F_SERV="$F_PATH/"`date +"%Y%m%d"`".serv"
F_OVER="$F_PATH/"`date +"%Y%m%d"`".over"
F_ALL="$F_PATH/"`date +"%Y%m%d"`".all"
LAPTOP_IN=`$IPTABLES -L TRAFFIC_TCP_INBOUND_LAPTOP -v -x -n | grep RETURN | head -c 18 | tail -c 9`
WS_IN=`$IPTABLES -L TRAFFIC_TCP_INBOUND_WS -v -x -n | grep RETURN | head -c 18 | tail -c 9`
LNET_IN=`$IPTABLES -L TRAFFIC_TCP_INBOUND_LNET -v -x -n | grep RETURN | head -c 18 | tail -c 9`
LNET_ISP_IN=`$IPTABLES -L TRAFFIC_TCP_INBOUND_FRWD -v -x -n | grep TRAFFIC_TCP_INBOUND_ISP | head -c 18 | tail -c 9`
LNET_EXT_IN=`$IPTABLES -L TRAFFIC_TCP_INBOUND_FRWD -v -x -n | grep TRAFFIC_TCP_INBOUND_EXT | head -c 18 | tail -c 9`
LAPTOP_OUT=`$IPTABLES -L TRAFFIC_TCP_OUTBOUND_LAPTOP -v -x -n | grep RETURN | head -c 18 | tail -c 9`
WS_OUT=`$IPTABLES -L TRAFFIC_TCP_OUTBOUND_WS -v -x -n | grep RETURN | head -c 18 | tail -c 9`
LNET_OUT=`$IPTABLES -L TRAFFIC_TCP_OUTBOUND_LNET -v -x -n | grep RETURN | head -c 18 | tail -c 9`
LNET_ISP_OUT=`$IPTABLES -L TRAFFIC_TCP_OUTBOUND_FRWD -v -x -n | grep TRAFFIC_TCP_OUTBOUND_ISP | head -c 18 | tail -c 9`
LNET_EXT_OUT=`$IPTABLES -L TRAFFIC_TCP_OUTBOUND_FRWD -v -x -n | grep TRAFFIC_TCP_OUTBOUND_EXT | head -c 18 | tail -c 9`
SERVER_IN=`$IPTABLES -L TRAFFIC_TCP_INBOUND_SERVER -v -x -n | grep RETURN | head -c 18 | tail -c 9`
SERVER_OUT=`$IPTABLES -L TRAFFIC_TCP_OUTBOUND_SERVER -v -x -n | grep RETURN | head -c 18 | tail -c 9`
SERVER_ISP_IN=`$IPTABLES -L TRAFFIC_TCP_INBOUND -v -x -n | grep TRAFFIC_TCP_INBOUND_ISP | head -c 18 | tail -c 9`
SERVER_ISP_OUT=`$IPTABLES -L TRAFFIC_TCP_OUTBOUND -v -x -n | grep TRAFFIC_TCP_OUTBOUND_ISP | head -c 18 | tail -c 9`
SERVER_EXT_IN=`$IPTABLES -L TRAFFIC_TCP_INBOUND -v -x -n | grep TRAFFIC_TCP_INBOUND_EXT | head -c 18 | tail -c 9`
SERVER_EXT_OUT=`$IPTABLES -L TRAFFIC_TCP_OUTBOUND -v -x -n | grep TRAFFIC_TCP_OUTBOUND_EXT | head -c 18 | tail -c 9`
SERVER_OVR_IN=`expr $SERVER_EXT_IN + $SERVER_ISP_IN`
SERVER_OVR_OUT=`expr $SERVER_EXT_OUT + $SERVER_ISP_OUT`
OVR_ISP_IN=`expr $LNET_ISP_IN + $SERVER_ISP_IN`
OVR_ISP_OUT=`expr $LNET_ISP_OUT + $SERVER_ISP_OUT`
OVR_EXT_IN=`expr $LNET_EXT_IN + $SERVER_EXT_IN`
OVR_EXT_OUT=`expr $LNET_EXT_OUT + $SERVER_EXT_OUT`
OVR_IN=`expr $SERVER_OVR_IN + $LNET_IN`
OVR_OUT=`expr $SERVER_OVR_OUT + $LNET_OUT`
OVERALL=`expr $OVR_IN + $OVR_OUT`
################################################## ########## #####
# Here is output for local network #
################################################## ########## #####
localtraf() {
echo "" >> $F_LNET
echo `date +"%d/%m/%Y %T"`" TRAFFIC FOR LOCAL NET" >> $F_LNET
echo "Input Output Description" >> $F_LNET
echo "$LAPTOP_IN $LAPTOP_OUT Laptop" >> $F_LNET
echo "$WS_IN $WS_OUT Workstation:" >> $F_LNET
echo "$LNET_ISP_IN $LNET_ISP_OUT Local Network to TSP" >> $F_LNET
echo "$LNET_EXT_IN $LNET_EXT_OUT Local Network to Internet" >> $F_LNET
echo "------------------------------------------------------ --------------" >> $F_LNET
echo "$LNET_IN $LNET_OUT Overall for Local Network" >> $F_LNET
}
################################################## ########## #####
# Here is output for Server #
################################################## ########## #####
servertraf() {
echo "" >> $F_SERV
echo `date +"%d/%m/%Y %T"`" TRAFFIC FOR SERVER" >> $F_SERV
echo "Input Output Description" >> $F_SERV
echo "$SERVER_IN $SERVER_OUT Server" >> $F_SERV
echo "$SERVER_ISP_IN $SERVER_ISP_OUT Server to ISP" >> $F_SERV
echo "$SERVER_EXT_IN $SERVER_EXT_OUT Server to Internet" >> $F_SERV
echo "------------------------------------------------------ --------------" >> $F_SERV
echo "$SERVER_OVR_IN $SERVER_OVR_OUT Overall for Server" >> $F_SERV
}
################################################## ########## #####
# Here is output for Overall #
################################################## ########## #####
overalltraf() {
echo "" >> $F_OVER
echo `date +"%d/%m/%Y %T"`" OVERALL TRAFFIC FOR: "`hostname` >> $F_OVER
echo "Input Output Description" >> $F_OVER
echo "$LNET_IN $LNET_OUT LOCAL NETWORK" >> $F_OVER
echo "$SERVER_OVR_IN $SERVER_OVR_OUT SERVER" >> $F_OVER
echo "$OVR_ISP_IN $OVR_ISP_OUT With ISP" >> $F_OVER
echo "$OVR_EXT_IN $OVR_EXT_OUT Internet" >> $F_OVER
echo "------------------------------------------------------ --------------" >> $F_OVER
echo "$OVR_IN $OVR_OUT TOTALL" >> $F_OVER
}
################################################## ########## #####
# Here is short output for Overall #
################################################## ########## #####
shorttraf() {
echo `date +"%d/%m/%Y %T"`" INBOUND: $OVR_IN OUTBOUND: $OVR_OUT" >> $F_ALL
}
resettraf() {
$IPTABLES -Z
}
case "$1" in
-b)
if [ "$2" = "-p" ]; then
F_ALL="/dev/stdout"
fi
shorttraf
if [ "$2" = "-r" ]; then
resettraf
fi
RETVAL=0
;;
-o)
if [ "$2" = "-p" ]; then
F_OVER="/dev/stdout"
fi
overalltraf
if [ "$2" = "-r" ]; then
resettraf
fi
RETVAL=0
;;
-l)
if [ "$2" = "-p" ]; then
F_LNET="/dev/stdout"
fi
localtraf
if [ "$2" = "-r" ]; then
resettraf
fi
RETVAL=0
;;
-s)
if [ "$2" = "-p" ]; then
F_SERV="/dev/stdout"
fi
servertraf
if [ "$2" = "-r" ]; then
resettraf
fi
RETVAL=0
;;
-a)
if [ "$2" = "-p" ]; then
F_ALL="/dev/stdout"
F_LNET="/dev/stdout"
F_SERV="/dev/stdout"
F_OVER="/dev/stdout"
fi
localtraf
servertraf
overalltraf
shorttraf
if [ "$2" = "-r" ]; then
resettraf
fi
RETVAL=0
;;
*)
echo $"usage: traflog [-bolsa] [-pr]"
echo $" -b log Overall traffic statistic in brif"
echo $" -o log only Overall statistic"
echo $" -l log internet traffic for local network"
echo $" -s log internet traffic for server"
echo $" -a log internet traffic for All"
echo $" -r reset statistic in ALL chains of iptables"
echo $" -p display statistic information only on /dev/stdout"
echo $""
echo $" log path: $FILE"
exit 1
esac
exit $RETVAL
6. И последнее кидаем указанную ниже строчку в /etc/crontab или как он у вас называется, и ждем 23:55 каждого дня чтобы посмотреть статистику дня. Если натерпится выводите командой /sbin/traflog -a -p на экран.
55 23 * * * root /etc/firewall/traflog -a -r
( Непременно с ключом -r чтобы сбросить статистику за прошедший день. )
ну и почитай здесь - есть интересные темы ) - http://www.ingineer.ru/linux/Последний раз редактировалось mr.L; 14.08.2009 в 07:47. Причина: добавление и структурирование
Быстрый переход
Безопасность
Вверх
- Навигация
- Кабинет
- Личные сообщения
- Подписки
- Кто на сайте
- Поиск по форуму
- Главная страница форума
- Форум
- Литература
- Крипто
- СБИС
- Компьютерные технологии
- Андеграунд
- Мобильная связь
- Отзывы
- Интернет
- FRB Club
- FRB
Похожие темы
-
iptables, правила
от pluto в разделе LINUXОтветов: 1Последнее сообщение: 16.09.2009, 12:40 -
Оптимальная видеокарта
от Islam в разделе ВидеосистемаОтветов: 7Последнее сообщение: 17.01.2009, 14:42 -
Может кто поможет найти ключ на ILO2 для сервера HP ML 350
от София в разделе В помощь системному администраторуОтветов: 0Последнее сообщение: 22.11.2008, 14:35 -
Настройка почтового сервера
от MiH в разделе LINUXОтветов: 0Последнее сообщение: 24.12.2007, 15:16
Социальные закладки