Настройка квот в IPTABLES
Нужно поставить ограничение трафика на внутреннюю сеть, т.е. чтобы конкретный IP не использовал свыше 100mb upload и download в день, потом, по истечении 24 часов, обнулять и заново считать.
Сеть такая: Инет идёт через 3G Router(192.168.1.1)- это wlan1, на нём запущен DHCP и DNS сервер. На целевой машине, т.е. этой, которая будет являтся роутером и ограничителем трафика, wlan1 имеет адресс 192.168.1.110(прописан статически, dns/gw 192.168.1.1). Второй интерфейс, это wlan0, который Инет не имеет(беспроводной, но это не столь важно), вот к нему, подсоединено несколько компьютеров, которым нужно ограничить трафик. Адресс wlan0 целевой машины(роутера)- 172.16.0.100 (dns и шлюз не прописаны). Далее, в качестве свитча в wlan0, выступает беспроводной роутер, который уже разветляет сеть и к которому подключены машины, которым надо ограничить Инет: 172.16.0.101 172.16.0.102 172.16.0.103.
Собственно, что у меня получилось пока: по образцу составил правила для Iptables, запустил, Инет на машинах wlan0 заработал. Но я не могу разобраться с квотами, в конфиге они прописаны, но работают или нет, не знаю, хотелось бы как-то глянуть, где этот трафик считается. И второе не понятно: свои правила я сохранил в /var/lib/iptables/rules-save, и когда запускаю iptables, он удаляет в правилах мои коментарии и пишет свои, почему ?
Вот оригинал того, что я кладу в rules-save:
#wlan1 has internet and wlan0 not #wlan1 192.168.1.0 #wlan0 172.16.0.0 #/var/lib/iptables/rules-save *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] # allow local loopback connections -A INPUT -i lo -j ACCEPT # drop INVALID connections -A INPUT -m state --state INVALID -j DROP -A OUTPUT -m state --state INVALID -j DROP -A FORWARD -m state --state INVALID -j DROP # allow all established and related -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # allow connections to my ISP's DNS servers -A OUTPUT -d 192.168.1.1 -m state --state NEW -p udp --dport 53 -o wlan1 -j ACCEPT -A FORWARD -d 192.168.1.1 -m state --state NEW -p udp --dport 53 -i wlan0 -o wlan1 -j ACCEPT # allow outgoing connections to web servers -A OUTPUT -d 0/0 -m state --state NEW -p tcp -m multiport --dport http,https -o wlan1 -j ACCEPT -A FORWARD -d 0/0 -m state --state NEW -p tcp -m multiport --dport http,https -o wlan0 -i wlan0 -j ACCEPT #allow pings -A OUTPUT -d 0/0 -p icmp -m icmp --icmp-type echo-reply -o wlan1 -j ACCEPT -A FORWARD -d 0/0 -p icmp -m icmp --icmp-type echo-reply -o wlan1 -i wlan0 -j ACCEPT #QUOTA for iPs in wlan0 -A FORWARD -s 172.16.0.101 -m quota --quota 104857600 -j ACCEPT -A FORWARD -d 172.16.0.101 -m quota --quota 104857600 -j ACCEPT -A FORWARD -s 172.16.0.102 -m quota --quota 104857600 -j ACCEPT -A FORWARD -d 172.16.0.102 -m quota --quota 104857600 -j ACCEPT -A FORWARD -s 172.16.0.103 -m quota --quota 104857600 -j ACCEPT -A FORWARD -d 172.16.0.103 -m quota --quota 104857600 -j ACCEPT # log all other attempted out going connections -A OUTPUT -o wlan1 -j LOG -A FORWARD -j LOG # default is to DROP out-going connections COMMIT *nat # set up IP forwarding and nat -A POSTROUTING -o wlan1 -j SNAT --to 192.168.1.110 COMMIT
Запускаю, gateway dem #/etc/init.d/iptables start и вот что показывает таблица:
gateway dem # iptables -L Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere DROP all -- anywhere anywhere state INVALID ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED Chain FORWARD (policy DROP) target prot opt source destination DROP all -- anywhere anywhere state INVALID ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT udp -- anywhere 192.168.1.1 state NEW udp dpt:domain ACCEPT tcp -- anywhere anywhere state NEW multiport dports http,https ACCEPT icmp -- anywhere anywhere icmp echo-reply ACCEPT all -- 172.16.0.101 anywhere quota: 104857600 bytes ACCEPT all -- anywhere 172.16.0.101 quota: 104857600 bytes LOG all -- anywhere anywhere LOG level warning Chain OUTPUT (policy DROP) target prot opt source destination DROP all -- anywhere anywhere state INVALID ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT udp -- anywhere 192.168.1.1 state NEW udp dpt:domain ACCEPT tcp -- anywhere anywhere state NEW multiport dports http,https ACCEPT icmp -- anywhere anywhere icmp echo-reply LOG all -- anywhere anywhere LOG level warning gateway dem # iptables -L -t nat Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT all -- anywhere anywhere to:192.168.1.110
останавливаю /etc/init.d/iptables stop , и вот что происходит с /var/lib/iptables/rules-save:
# Generated by iptables-save v1.4.6 on Sun Jan 2 02:46:06 2011 *nat :PREROUTING ACCEPT [30:11067] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [21:1765] :POSTROUTING ACCEPT [0:0] [18:1157] -A POSTROUTING -o wlan1 -j SNAT --to-source 192.168.1.110 COMMIT # Completed on Sun Jan 2 02:46:06 2011 # Generated by iptables-save v1.4.6 on Sun Jan 2 02:46:06 2011 *mangle :PREROUTING ACCEPT [164:62977] :INPUT ACCEPT [45:13066] :FORWARD ACCEPT [63:28039] :OUTPUT ACCEPT [43:5763] :POSTROUTING ACCEPT [105:34027] COMMIT # Completed on Sun Jan 2 02:46:06 2011 # Generated by iptables-save v1.4.6 on Sun Jan 2 02:46:06 2011 *filter :INPUT DROP [3:84] :FORWARD DROP [0:0] :OUTPUT DROP [5:729] [0:0] -A INPUT -i lo -j ACCEPT [0:0] -A INPUT -m state --state INVALID -j DROP [35:11944] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT [0:0] -A FORWARD -m state --state INVALID -j DROP [61:27918] -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT [1:73] -A FORWARD -d 192.168.1.1/32 -i wlan0 -o wlan1 -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT [0:0] -A FORWARD -i wlan0 -o wlan1 -p tcp -m state --state NEW -m multiport --dports 80,443 -j ACCEPT [0:0] -A FORWARD -i wlan0 -o wlan1 -p icmp -m icmp --icmp-type 0 -j ACCEPT [1:48] -A FORWARD -s 172.16.0.101/32 -m quota --quota 104857600 -j ACCEPT [0:0] -A FORWARD -d 172.16.0.101/32 -m quota --quota 104857600 -j ACCEPT [0:0] -A FORWARD -j LOG [0:0] -A OUTPUT -m state --state INVALID -j DROP [18:3044] -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT [14:916] -A OUTPUT -d 192.168.1.1/32 -o wlan1 -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT [2:120] -A OUTPUT -o wlan1 -p tcp -m state --state NEW -m multiport --dports 80,443 -j ACCEPT [0:0] -A OUTPUT -o wlan1 -p icmp -m icmp --icmp-type 0 -j ACCEPT [3:252] -A OUTPUT -o wlan1 -j LOG COMMIT # Completed on Sun Jan 2 02:46:06 2011
Почему он его изменяет ? Как сделать чтоб все мои комментарии оставались и ничего не сжималось как он делает? Я подумывал что проблема в /etc/conf.d/iptables, по умолчанию там стоит что надо сохранять текущее положение счётчиков при останове:
IPTABLES_SAVE="/var/lib/iptables/rules-save" # Options to pass to iptables-save and iptables-restore SAVE_RESTORE_OPTIONS="-c" # Save state on stopping iptables SAVE_ON_STOP="yes"
P.S. Пока это первый этап, тобишь разобраться с счётчиком трафика и скриптом, второй это уже будет cron и автоматическое обнуление трафика после 24 часов для каждого IP.
P.P.S Там у меня в скрипте ошибка в пробросе ping пакетов, исправлю, пока это не столь важно.
gateway dem # ping mail.ru PING mail.ru (94.100.191.204) 56(84) bytes of data. ping: sendmsg: Operation not permitted ping: sendmsg: Operation not permitted
- Для комментирования войдите или зарегистрируйтесь
С Новымъ Годомъ!
Попробуйте
--match quota2
из пакетаnet-firewall/xtables-addons
,только не забудьте про параметр
--name Ваше_Название
.Ежели чего получится - рад за Вас :D
До квот ещё добраться нужно,
До квот ещё добраться нужно, для начала хочется разобраться с /var/lib/iptables/rules-save, почему после останова iptables, он видоизменяется? Может я не туда свой скрипт вставляю?
Demontager написал(а): До
В файле /etc/conf.d/iptables
строка
SAVE_ON_STOP="no"
Demontager написал(а): До
Может и не туда, смотря что задумано. Там iptables сохраняет свои настройки.
Почему видоизменяется?!
Нууу,
man iptables
:-DДля начала, давайте слегка рассмотрим Ваш скрипт...
Думаю, стоит заменить это (вообще не знаю - зачем сие?) -
, на что-то, подобное этому:
после чего можно смело удалить:
т.к. всё, что не соответствует критериям в наборах правил с ACCEPT, пойдёт в
/dev/null
.Цепочка ниже:
-A FORWARD -s 172.16.0.101 -m quota --quota 104857600 -j ACCEPT
,у Вас не отработает, ибо выше по тексту скрипта у Вас написано правило:
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
Кстати,
--match quota
,входящий(ая) (не знаю, как правильно) в стандартный "набор"
net-firewall/iptables,
насколько я понимаю, использует один счётчик на интерфейс, так что у Вас не получится задуманное, пробуйте
net-firewall/xtables-addons
- он позволяет создавать именованные "считалки" в директории /proc отдельно для каждого правила/набора правил.
(Взято из man xtables-addons)
А что означает это -
-A POSTROUTING -o wlan1 -j SNAT --to 192.168.1.110
?Вам стоит взглянуть на вывод команды
iptables --jump SNAT --help
.За сим откланиваюсь - лень писать :-)
Спасибо, немножко взяв
Спасибо, немножко взяв информации от сюда и от манов и с irc, удалось всётаки настроить квоты и я добился того что задумал, вот так вот.
Я не использовал rules-save, а создал отдельно скрипт, и это проще для моего пониманиия, пока что.
Этот скрипт положил в /etc/cron.daily, и в кроне его прописал на запуск раз в 24 часа.
И вот та картина, которую и хотел получить:
Там видно что левые пакеты отбрасываются от незанесённых в список IP, также работает счётчик байтов. При привышении лимита, срабатывает DROP, вообщем, всё как и хотел. Да, модуль quota у меня в ядре есть (2.6.36), так что ничего ставить не пришлось.
Двигатель прогресса не стоит на месте и тут руки зачесались прикрепить эти правила к SQUID. Т.е., как я себе это представляю: Для пущего экономства трафика, как можно больше выдавать пакетов из кеша SQUID. Предварительно узнал у юзеров нашей локальной сети, кто чем чаще всего пользуется и куда заходит, оказалось это mail.ru, yahoo.com, facebook, новостные сайты. Вот если бы как можно больше удалось закешировать это и заодно прибавилось бы скорости загрузки, было бы вообще чудесно. Собственно, с чего можно тут начать? Маны по squid немного прочёл, и также с примерами, но нужна помощь с данной обстановкой, т.е. нужно squid привязать к этому скрипту и вторая цель - сделать это так, чтобы не пришлось вмешиваться в настройку других компьютеров (прописывать порт squid в браузере и т.д.).
Это так настроен нат, у меня роутер имеет статический адресс, поэтому MASQUERDING тут не нужен.
-A POSTROUTING -o wlan1 -j
-A POSTROUTING -o wlan1 -j SNAT --to 192.168.1.110
Это правило у вас написано не правильно, должно быть так:
-A POSTROUTING -o wlan1 -j SNAT --to-source 192.168.1.110
Тогда странно, у меня и без
Тогда странно, у меня и без "source" работает
Так и не получилось с
Так и не получилось с перенаправлением в SQUID, что- то не так я делаю, зарисовал сеть схематично, для наглядности:
В скрипт добавил:
Но трафик 80 порта от клиентов в сети 172.16.0.0 в SQUID не идёт, почему ?
Весь код скрипта:
Попробуйте так:iptables -t
Попробуйте так:
iptables -t nat -A PREROUTING ! -d 172.16.0.0/24 -i wlan1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
И не забудьте повесить проксю на 172.16.1.110, при условии что внутренний IP у вас такой, а не как на схеме 172.168.1.110.
Я вообще перед запуском какого либо сервиса проверяю что-бы он висел только там где это надо, а не на 0.0.0.0, проверить это можно так:
netstat -lpn
Да, там ошибка на картинке, я
Com-P,
Да, там ошибка на картинке, я потом заметил, написал механически 8-ку, а сеть настроена 172.16.1.100
Путём эксперемента, проверил, без ошибок выполняется редирект либо:
или так
(по крайней мере iptables ничего по этому поводу не пишет).
Думаю тогда проблема со SQUID теперь, вот такой конфиг сейчас:
но он пишет пару замечаний:
не могу сообразить что надо удалить, это что - '::/0' ?
И после запуска squid, netstat показывает:
В своём браузере прописал HTTP прокси 192.168.1.110:3128, при хождении в Инет только сплошные "TCP_MISS", в /var/log/squid/access.log.
и главная проблема- когда что-то браузю в Инете через компьютер клиента в логе access.log ничего не появляется. Получается трафик от клиентов в SQUID не заруливается ?
P.S. Вот ещё нашёл, в одном HOWTO заворачивание трафика в squid выполняется таким образом:
цитата:
Во первых: зачем вам прокся
Во-первых, зачем вам прокся на внешнем интерфейсе? Предлагаю сделать так:
Не помню с какой версии кальмара, но правило
acl all src all
илиacl all src 0.0.0.0/0
прописывать не надо.Заворачивание на проксю лучше делать через REDIRECT, при условии заворачивания в приделах одного хоста.
В браузере ничего прописывать не надо, ибо прокси у вас прозрачный.
Во-вторых, в конфиге самбы надо добавить или изменить следующие:
Опять же зачем вам самба на внешнем интерфейсе?
Совсем забыл, при
Совсем забыл, при использовании прокси вам надо будет перепродумать квоты, ибо трафик на проксю через FORWARD не проходит.
Изначально у меня не было
Изначально у меня не было сети (до настройки лимитов) 172.16.0.0, ,был один интерфейс 192.168.1.0, поэтому SAMBA и стоит так, т.е. клиент подключался к роутеру 192.168.1.1 и мог открыть у меня шары SAMBA.
Вот, не понял этого:
Как это заворачивание в пределах одного хоста?
Может всё таки проблема в настройке TP-LINK, то что трафик не идёт в SQUID(хотя я склоняюсь к вашей версии, ну и скрин подтверждает что FORWARD идёт мимо сервисов)?
На клиентах, для примера возьму 172.16.1.107, при подключении к TP-LINK автоматом назаначается такое:
IP:172.16.1.107
gw:172.16.1.110
dns:192.168.1.1
mask:255.255.0.0
Трасировка на клиенте до 192.168.1.1, даёт такое:
[01]172.16.1.110 (7ms)
[02] 192.168.1.1 (14ms)
Вот сами внутренние настройки роутера TP-LINK (172.16.0.1):
LAN ( локальная сеть роутера)
DHCP (прописано откуда он должен брать Инет и DNS)
FORWARDING (вот тут немного странно, я пытался пробросить (1712) порт для SSH, чтоб можно было с клиентской машины (wlan1 172.16.0.0) логится в LINUX-ROUTER, но конекта не получилось, хотя пинг есть и с SAMBA тоже самое не вышло.)
ADDRESS RESERVATION ( тут я привязал к MAC адрессам IP, чтоб каждый всегда имел один и тот же IP:
Хорошо, а если переделывать квоты через REDIRECT, то как это будет выглядить ?
Действие REDIRECT - Выполняет
Действие REDIRECT - Выполняет перенаправление пакетов и потоков на другой порт той же самой машины. К примеру, можно пакеты, поступающие на HTTP порт перенаправить на порт HTTP proxy. Действие REDIRECT очень удобно для выполнения "прозрачного" проксирования (transparent proxying), когда машины в локальной сети даже не подозревают о существовании прокси.
Вам не нужен FORWARDING на TP-LINK, вам на TP-LINK надо разрешить весь трафик из локалки до роутера. То что делаете вы, это проброс портов, вам это не надо. Проще идти сразу на роутер. Посмотрите политики на TP-LINK, возможно у вас там что-то закрыто.
Квоты я считаю имеет смысл настраивать в билинговой системе, у меня к примеру стоит NeTAMS.
Как я видел по листингу netstat, ssh у вас не поднят.
А вообще я вам настоятельно рекомендую вкурить вот это.
Т.е. я не смогу использовать
Т.е. я не смогу использовать квоты в связке с IPTABLES+SQUID? Либо SQUID+и внешний биллинг, либо IPTABLES+квоты, но без SQUID ? На TP-LINKе ничего не закрыто, фаервол выключен, никаких блокировок пакетов там не стоит. Пробрасывать я пробывал SSH, но это сейчас не столь важно, не поднят он, потомучто я вручную его пускал для проверки.
Нет, вы меня не правильно
Нет, вы меня не правильно поняли, квоты будут работать на непроксируемом трафике. Смотрите, транзитный трафик идет так - ->PREROUTING->FORWARD->POSTROUTING->.
Трафик к локальным процесам идет так - ->PREROUTING->INPUT->Local Services->OUTPUT->POSTROUTING->.
Вы повесили сквид на внутренний интерфейс? Работает?
Квоты у вас будут реализованы либо на неHTTP трафик, либо на весь трафик но через билинг. Можно еще сделать Squid+что-то что реализует квоты, но ИМХО это бред.
Тот конфиг что вы писали выше
Тот конфиг что вы писали выше для Squid я проверил -не работает.
с access.log:
1294750724.754 0 172.16.1.110 NONE/400 3742 CONNECT error:method-not-allowed - NONE/- text/html
А браузер пишет что он настроен на работу с прокси, но тот отклоняет запросы.
А netsam позволит организовать работу учёта трафика аналогичную моей схеме и плюс SQUID? Вы какой netsam ставили ? Там у них есть старые версии, но там зависимостей много и есть более интересная и новее версия - на Java. Она нормально работает ?
P.S. Тут уже писали попробывать xtables_addons, я глянул в его описание, только пока не разобрался на каком принципе он подсчитывает
+ + xtables_addons_quota2 : match implements a named counter which can be increased or decreased on a per-match basis
Тот конфиг что я прислал,
Тот конфиг что я прислал, просто голый этот конфиг, у меня работает, и с прописанным прокси, и как прозрачный, проверял на опере, и на ИЕ.
У меня стоит Squid Cache: Version 3.1.8.
Попробуйте проверить без TP-LINK, т.е. на прямую провод в роутер.
Да позволит, у него очень хорошее и подробное описание.
Я использую NeTAMS 3.4.5 (3490.6), ибо новый пока в бете, а когда зарелизят будет платный.
Трафик в NeTAMS заворачивается через libpcap, лень было морочится с iptables.
Попробуйте убрать строки :
Попробуйте убрать строки :
Но мне кажется что дело не в этом, хотя ругается именно на это.
Com-P Не поделитесь случайно
Com-P
Не поделитесь случайно рабочим e-build'om NeTAMS 3.4.5 (3490.6)? Я нашёл на форуме netams один, но он не рабочий, так с него установить и не смог:
C Java тоже проблема, что-то ей не хватает:
P.S. Сугубо конечно личное пристрастие, но хотелось бы сделать всю эту систему руками, чтоб понять как это работает. И во вторых, стороние приложения, позволяют ведь как-то осуществить это, значит, можно и самомому это настроить. Похоже на изобретение велосипеда, согласен, но сама логика остаётся неразрешимой пока(для меня).
p.p.s Не хочет make собираться для netams-3.4.5 http://pastebin.com/TjRGMd62 libcli стоит
Ebuild я не делал, ставил по
Ebuild я не делал, ставил по их инструкции немного подправив пути. Никакой привязки к кальмару нет, если трафик будет идти через libpcap.
Или вы задаете правила для iptables, по которым пакеты ядром направляются пихаются в некую виртуальную трубу (которая называется queue), откуда их потом берет программа, прокачивает через себя (смотря на заголовки и делая подсчет) и отдает обратно в систему, после чего они спокойно идут себе дальше.
>p.p.s Не хочет make собираться для netams-3.4.5 http://pastebin.com/TjRGMd62 libcli стоит
http://www.netams.com/phpBB3/viewtopic.php?f=2&t=5300&hilit=crypt
C make разобрался, добавил в
C make разобрался, добавил в configure.sh ==> echo "LIB += -pthread -lpcap -lcrypt" >> $makefile
Далее скопировал как по инструкции netams.conf в /etc/natams.conf
бинарные файлы с ../src/ в /usr/sbin
потом положил стартовый скрипт для демона netams в /etc/init.d/
Проверяю:
Сеть конечно пропала вся, теперь нужно подстроить конфиг под свои нужды... Но как в SQUID перенаправить 172.16.0.0 сеть, пока не понимаю.
Вам надо во первых прочитать
Вам надо во первых прочитать Документацию по настройке netams, тогда не будет отрубаться сеть.
Ваш конфиг для netams, в данный момент для вашей системы неработоспособен.
Простите, но вы даже не удосужились перенастроить конфиг под свои нужды. RTFM.