LINUX.ORG.RU
ФорумAdmin

объясните плииз по iptables v1.2.3


0

0

Привет всем
Вопрос такой, есть Линукс сервер, на нем два интерфейса eth0 и eth1 первый eth0 смотрит в интернет второй eth1 смотрит в локалку (просто классика). Поднят NAT на iptables для доступа клиентов локалки в инет.
Все работает нормально, проблем вроде нет.
Но вот если я введу такую строчку
iptables -t mangle -A PREROUTING -i eth0 -j ACCEPT
и далее такую
iptables -t mangle -A OUTPUT -o eth0 -j ACCEPT

то будет ли у меня по команде
iptables -t mangle -nvxL
выдаваться истинное значение скачанных и переданных байт через eth0 с моей локалки в инет. Провайдер у меня для оплаты считает весь трафик и входящий и исходящий.

И вообще правильны ли вводимые мной правила для подсчета трафика?


Можно попробовать поднять нормальный биллинг(я пробовал только netup и lanbilling, жить можно)

NikolayD
()

iptables: значение mark по умолчанию

Думаю, что поднимать билинг для подсчета только входящего трафика смысла нет, проще это сделать через iptables.

> И вообще правильны ли вводимые мной правила для подсчета трафика?
Нет. См. Iptables Tutorial.
Через цепочку PREROUTING таблицы mangle идет весь трафик, который попадает на твою машину из локалки и от провайдера, так что там подсчитать трафик не получится. Кроме того, в этой таблице не следует производить фильтрацию, так что твои действия не совсем правомерны.
В цепочку OUTPUT таблицы mangle попадает трафик только от локальных процессов, транзитный идет мимо :).

Короче. Для того чтобы считать трафик нужно создать цепочки в которые завести только тот трафик, который нужно считать. И снимать сумму только с этих цепочек. Это делается командой iptables -L <chain name> -vx
Далее заносишь в базу, строишь графики и тд. Рекомендую для этих целей rrdtool.

Для примера привожу свой скрипт для подсчета. Там два типа трафика: локальный провайдера и глобальный тарифицируемый. И еще раз - см. Iptables Tutorial.

#!/bin/bash

###########################################
# Настройка скрипта:
# Интерфейс на котором считается трафик
interface="eth0"

# Нетарифицируемые адреса (ЛВС провайдера)
loc_mask="10.0.0.0/24"
glob_mask1="xx.xx.xx.xx"
glob_mask2="xx.xx.xx.xx"

###########################################
# Метка тарифицируемого трафика
global_traffic=0
# Метка нетарифицируемого трафика
local_traffic=1

###########################################
# Создание церочек для подсчета:
# Локальный входящий трафик провайдера
iptables -N in_bytes_loc
# Глобальный входящий
iptables -N in_bytes_glob
# Локальный исходящий
iptables -N out_bytes_loc
# Глобальный исходящий
iptables -N out_bytes_glob

iptables -A in_bytes_loc   -j RETURN
iptables -A in_bytes_glob  -j RETURN
iptables -A out_bytes_loc  -j RETURN
iptables -A out_bytes_glob -j RETURN

###########################################
# Маркировка трафика
# Входящего локального:
iptables -t mangle -A PREROUTING -i $interface -s $loc_mask   -j MARK --set-mark $local_traffic
iptables -t mangle -A PREROUTING -i $interface -s $glob_mask1 -j MARK --set-mark $local_traffic
iptables -t mangle -A PREROUTING -i $interface -s $glob_mask2 -j MARK --set-mark $local_traffic

# Изходящего локального:
iptables -t mangle -A OUTPUT -o $interface -d $loc_mask   -j MARK --set-mark $local_traffic
iptables -t mangle -A OUTPUT -o $interface -d $glob_mask1 -j MARK --set-mark $local_traffic
iptables -t mangle -A OUTPUT -o $interface -d $glob_mask2 -j MARK --set-mark $local_traffic

# Здесь маркируется трафик с узлов внутри сети провайдера, который тарифицируется
host1=xx.xx.xx.xx
iptables -t mangle -A PREROUTING -i $interface -s $host1 -j MARK --set-mark $global_traffic
iptables -t mangle -A OUTPUT     -o $interface -d $host1 -j MARK --set-mark $global_traffic

###########################################
# Сортировка трафика по цепочкам.
# Входящего:
iptables -I INPUT   1 -i $interface -m mark --mark $local_traffic  -j in_bytes_loc
iptables -I FORWARD 1 -i $interface -m mark --mark $local_traffic  -j in_bytes_loc
iptables -I INPUT   1 -i $interface -m mark --mark $global_traffic -j in_bytes_glob

# Изходящего:
iptables -A OUTPUT    -o $interface -m mark --mark $local_traffic  -j out_bytes_loc
iptables -A OUTPUT    -o $interface -m mark --mark $global_traffic -j out_bytes_glob
iptables -I FORWARD 1 -o $interface -m mark --mark $global_traffic -j out_bytes_glob


PS: Могу ошибаться...

Sniper
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.