Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: SQUID+IPTABLES_настройка  (Прочитано 8773 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн demontager

  • Автор темы
  • Активист
  • *
  • Сообщений: 304
  • KHERSON
    • Просмотр профиля
    • Nixtalks IT-експлорер
SQUID+IPTABLES_настройка
« : 09 Января 2011, 17:05:20 »
У меня настроена сеть с ограничением трафика по каждому IP. Всё это нормально работает, но я не могу направить трафик в SQUID (c сети wlan1 172.16.1.0). И вторая проблема - у меня не кеширует SQUID
Сеть выглядит так:


Так выглядит скрипт IPTABLES:
#!/bin/bash
#wlan0 has internet and wlan1 not
#wlan0 192.168.0.0
#wlan1 172.16.0.0
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -t nat -F POSTROUTING
iptables -t nat -F PREROUTING
iptables -t nat -F OUTPUT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# allow local loopback connections
iptables -A INPUT -i lo -j ACCEPT

# drop INVALID connections
iptables -A INPUT   -m state --state INVALID -j DROP
iptables -A OUTPUT  -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP

# allow all established and related
iptables -A INPUT   -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT

#allow pings
iptables -A INPUT -p icmp -j ACCEPT

#QUOTA for iPs in wlan1
iptables -A FORWARD -s 172.16.1.101 -m quota --quota 6291000 -j ACCEPT
iptables -A FORWARD -d 172.16.1.101 -m quota --quota 10490000 -j ACCEPT
iptables -A FORWARD -s 172.16.1.102 -m quota --quota 10490000 -j ACCEPT
iptables -A FORWARD -d 172.16.1.102 -m quota --quota 16781000 -j ACCEPT
iptables -A FORWARD -s 172.16.1.103 -m quota --quota 10490000 -j ACCEPT
iptables -A FORWARD -d 172.16.1.103 -m quota --quota 20980000 -j ACCEPT
iptables -A FORWARD -s 172.16.1.104 -m quota --quota 10490000 -j ACCEPT
iptables -A FORWARD -d 172.16.1.104 -m quota --quota 16781000 -j ACCEPT
iptables -A FORWARD -s 172.16.1.105 -m quota --quota 10490000 -j ACCEPT
iptables -A FORWARD -d 172.16.1.105 -m quota --quota 16781000 -j ACCEPT
iptables -A FORWARD -s 172.16.1.106 -m quota --quota 10490000 -j ACCEPT
iptables -A FORWARD -d 172.16.1.106 -m quota --quota 16781000 -j ACCEPT
iptables -A FORWARD -s 172.16.1.107 -m quota --quota 104857600 -j ACCEPT
iptables -A FORWARD -d 172.16.1.107 -m quota --quota 104857600 -j ACCEPT

#REDIRECT to SQUID
iptables -t nat -A PREROUTING -s 172.16.0.0/24 -o wlan0 -j DNAT --to-destination 192.168.1.110:3128 -p tcp -m tcp --dport 80

# log all other attempted out going connections
iptables -A OUTPUT -o wlan0 -j LOG
iptables -A FORWARD -j LOG

# default is to DROP out-going connections

# set up IP forwarding and nat
iptables -t nat -A POSTROUTING -o wlan0 -j SNAT --to-source 192.168.1.110

Вся проблема в этой строчке-
iptables -t nat -A PREROUTING -s 172.16.0.0/24 -o wlan0 -j DNAT --to-destination 192.168.1.110:3128 -p tcp -m tcp --dport 80  , она не работает как должна. Клиенты имеют доступ через 80 порт, но через SQUID трафик не проходит.

Вот конфиг squid:
http_port 192.168.1.110:3128  transparent
acl client_network src 192.168.1.110
acl localnet src 127.0.0.1/32
visible_hostname myhost
http_access allow client_network
http_access allow localnet
C такой настройкой он ничего не кеширует, и squid работает только для Linux-Router, как я писал выше - трафик клиентов на него не попадает.
Вот лог  http://pastebin.com/PMCRPJi5   tailf /var/log/squid/access.log, собственно, ни одного попадания, хотя я захожу на один и тот же сайт постоянно


« Последнее редактирование: 10 Января 2011, 02:37:50 от demontager »
Пишу о разном сюда nixtalk.com

Гарри Кашпировский

  • Гость
Re: SQUID+IPTABLES_настройка
« Ответ #1 : 09 Января 2011, 17:17:13 »
У тебя ошибка в правиле NAT
Цитировать
#REDIRECT to SQUID
-A PREROUTING 172.16.0.0/24 -o wlan0
Правильно вот
Цитировать
#REDIRECT to SQUID
-A PREROUTING 172.16.0.0/24 -i wlan0

Оффлайн demontager

  • Автор темы
  • Активист
  • *
  • Сообщений: 304
  • KHERSON
    • Просмотр профиля
    • Nixtalks IT-експлорер
Re: SQUID+IPTABLES_настройка
« Ответ #2 : 09 Января 2011, 17:24:44 »
Пишет ошибку если -i wlan0
+ iptables -t nat -A PREROUTING -s 172.16.0.0/24 -i wlan0 -j DNAT --to-destination 192.168.1.110:3128 -p tcp -m tcp --dport 80
iptables v1.4.6: Need TCP, UDP, SCTP or DCCP with port specification
Try `iptables -h' or 'iptables --help' for more information.

P.S. Я так подразумеваю (впервые использую squid) что есть смысл направлять только трафик 80 порта, а всё остальное пускать напрямую мимо SQUID .
« Последнее редактирование: 09 Января 2011, 17:31:35 от demontager »
Пишу о разном сюда nixtalk.com

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13761
    • Просмотр профиля
Re: SQUID+IPTABLES_настройка
« Ответ #3 : 09 Января 2011, 17:32:24 »
А так?
Цитировать
iptables -t nat -A PREROUTING -s 172.16.0.0/24 -i wlan1  -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.110:3128
« Последнее редактирование: 09 Января 2011, 17:36:05 от fisher74 »

Оффлайн demontager

  • Автор темы
  • Активист
  • *
  • Сообщений: 304
  • KHERSON
    • Просмотр профиля
    • Nixtalks IT-експлорер
Re: SQUID+IPTABLES_настройка
« Ответ #4 : 09 Января 2011, 17:43:38 »
да, так без ошибок выполнилось, но трафик в SQUID не идёт. Я пооткрывал пару страничек на клиенте в сети 172.16.0.0 - в логах squida молчок.
+ iptables -t nat -A PREROUTING -s 172.16.0.0/24 -i wlan1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.110:3128
P.S. Может я даже ошибся в пути реализации этого редиректа и надо как-то по другому делать, тут вся сложность с этими QUOTA, а без них никак, трафик нужно резать обязательно, он лимитный, поэтому и возникла идея направлять трафик в squid, дабы ещё экономить.
« Последнее редактирование: 09 Января 2011, 17:50:58 от demontager »
Пишу о разном сюда nixtalk.com

Оффлайн Romon

  • Участник
  • *
  • Сообщений: 216
  • destructive creation
    • Просмотр профиля
Re: SQUID+IPTABLES_настройка
« Ответ #5 : 09 Января 2011, 18:30:57 »
А что дает -m tcp в правиле? я всегда для прозрачного сквида писал вот так -m  multiport --dport 80,8080...

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13761
    • Просмотр профиля
Re: SQUID+IPTABLES_настройка
« Ответ #6 : 09 Января 2011, 18:58:51 »
demontager, покажи результирующие правила, так проще определиться
sudo iptables-save

Оффлайн demontager

  • Автор темы
  • Активист
  • *
  • Сообщений: 304
  • KHERSON
    • Просмотр профиля
    • Nixtalks IT-експлорер
Re: SQUID+IPTABLES_настройка
« Ответ #7 : 09 Января 2011, 19:21:48 »

gateway dem # iptables-save
# Generated by iptables-save v1.4.6 on Sun Jan  9 17:15:56 2011
*nat
:PREROUTING ACCEPT [1962:323955]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [603:40158]
:POSTROUTING ACCEPT [11:2651]
-A PREROUTING -s 172.16.0.0/24 -i wlan1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.110:3128
-A POSTROUTING -o wlan0 -j SNAT --to-source 192.168.1.110
COMMIT
# Completed on Sun Jan  9 17:15:56 2011
# Generated by iptables-save v1.4.6 on Sun Jan  9 17:15:56 2011
*mangle
:PREROUTING ACCEPT [690943:327795766]
:INPUT ACCEPT [191235:136115768]
:FORWARD ACCEPT [474943:184333723]
:OUTPUT ACCEPT [168589:28196650]
:POSTROUTING ACCEPT [631225:210961856]
COMMIT
# Completed on Sun Jan  9 17:15:56 2011
# Generated by iptables-save v1.4.6 on Sun Jan  9 17:15:56 2011
*filter
:INPUT DROP [187:17193]
:FORWARD DROP [12:576]
:OUTPUT ACCEPT [676:47559]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state INVALID -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A FORWARD -m state --state INVALID -j DROP
-A FORWARD -s 172.16.1.101/32 -m quota --quota 6291000 -j ACCEPT
-A FORWARD -d 172.16.1.101/32 -m quota --quota 10490000 -j ACCEPT
-A FORWARD -s 172.16.1.102/32 -m quota --quota 10490000 -j ACCEPT
-A FORWARD -d 172.16.1.102/32 -m quota --quota 16781000 -j ACCEPT
-A FORWARD -s 172.16.1.103/32 -m quota --quota 10490000 -j ACCEPT
-A FORWARD -d 172.16.1.103/32 -m quota --quota 20980000 -j ACCEPT
-A FORWARD -s 172.16.1.104/32 -m quota --quota 10490000 -j ACCEPT
-A FORWARD -d 172.16.1.104/32 -m quota --quota 16781000 -j ACCEPT
-A FORWARD -s 172.16.1.105/32 -m quota --quota 10490000 -j ACCEPT
-A FORWARD -d 172.16.1.105/32 -m quota --quota 16781000 -j ACCEPT
-A FORWARD -s 172.16.1.107/32 -m quota --quota 104857600 -j ACCEPT
-A FORWARD -d 172.16.1.107/32 -m quota --quota 104857600 -j ACCEPT
-A FORWARD -j LOG
-A OUTPUT -m state --state INVALID -j DROP
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o wlan0 -j LOG
COMMIT
# Completed on Sun Jan  9 17:15:56 2011
Iptables -L ещё, может тоже что-то покажет:

gateway dem # iptables -l
iptables v1.4.6: option `-l' requires an argument
Try `iptables -h' or 'iptables --help' for more information.
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
ACCEPT     icmp --  anywhere             anywhere           

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            state INVALID
ACCEPT     all  --  172.16.1.101         anywhere            quota: 6291000 bytes
ACCEPT     all  --  anywhere             172.16.1.101        quota: 10490000 bytes
ACCEPT     all  --  172.16.1.102         anywhere            quota: 10490000 bytes
ACCEPT     all  --  anywhere             172.16.1.102        quota: 16781000 bytes
ACCEPT     all  --  172.16.1.103         anywhere            quota: 10490000 bytes
ACCEPT     all  --  anywhere             172.16.1.103        quota: 20980000 bytes
ACCEPT     all  --  172.16.1.104         anywhere            quota: 10490000 bytes
ACCEPT     all  --  anywhere             172.16.1.104        quota: 16781000 bytes
ACCEPT     all  --  172.16.1.105         anywhere            quota: 10490000 bytes
ACCEPT     all  --  anywhere             172.16.1.105        quota: 16781000 bytes
ACCEPT     all  --  172.16.1.107         anywhere            quota: 104857600 bytes
ACCEPT     all  --  anywhere             172.16.1.107        quota: 104857600 bytes
LOG        all  --  anywhere             anywhere            LOG level warning

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            state INVALID
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
LOG        all  --  anywhere             anywhere            LOG level warning


gateway dem # iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  172.16.0.0/24        anywhere            tcp dpt:http to:192.168.1.110:3128

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  anywhere             anywhere            to:192.168.1.110
Пишу о разном сюда nixtalk.com

Гарри Кашпировский

  • Гость
Re: SQUID+IPTABLES_настройка
« Ответ #8 : 09 Января 2011, 20:58:11 »
По правилам PREROUTING всё заворачивается.
Хм, что же давайте теперь с squid разбираться.
Мне кажется этих строчек в конфиге не хватает.
Цитировать
http_port 192.168.1.110:3128  transparent
acl all src all
acl client_network src 192.168.1.110
acl localnet src 127.0.0.1/32
acl mynet src 172.16.1.0/24
visible_hostname myhost
http_access allow client_network
http_access allow localnet
http_access allow mynet
http_access deny all
access_log /var/log/squid/access.log squid

Пользователь решил продолжить мысль [time]Sun Jan  9 21:07:31 2011[/time]:
Эмм, погодите-ка. A TPLink у Вас Роутер? Та самая коробка с NAT и DHCP-сервером???
« Последнее редактирование: 09 Января 2011, 21:10:46 от KT315 »

Оффлайн Romon

  • Участник
  • *
  • Сообщений: 216
  • destructive creation
    • Просмотр профиля
Re: SQUID+IPTABLES_настройка
« Ответ #9 : 09 Января 2011, 21:43:56 »
Судя по схеме и настройках в ней, так оно и есть  :coolsmiley:

Оффлайн demontager

  • Автор темы
  • Активист
  • *
  • Сообщений: 304
  • KHERSON
    • Просмотр профиля
    • Nixtalks IT-експлорер
Re: SQUID+IPTABLES_настройка
« Ответ #10 : 10 Января 2011, 02:34:47 »
squid.conf я написал как выше приводится, т.е. так:
http_port 192.168.1.110:3128  transparent
acl all src all
acl client_network src 192.168.1.110
acl localnet src 127.0.0.1/32
acl mynet src 172.16.1.0/24
visible_hostname myhost
http_access allow client_network
http_access allow localnet
http_access allow mynet
http_access deny all
access_log /var/log/squid/access.log squid
при старте он пишет:
gateway dem # /etc/init.d/squid start
squid                | * Initializing cache directory /var/cache/squid .. [ ok ]
squid                | * Starting squid ...
squid                |2011/01/10 00:25:39| WARNING: (B) '::/0' is a subnetwork of (A) '::/0'
squid                |2011/01/10 00:25:39| WARNING: because of this '::/0' is ignored to keep splay tree searching predictable
squid                |2011/01/10 00:25:39| WARNING: You should probably remove '::/0' from the ACL named 'all'  

TP-LINK - это WIFI роутер для клиентов в сети 172.16.0.0, там работает DHCP, т.е. клиенты получают настройки автоматически. IP адресса я привязал к MAC адрессам и это даёт каждому статический IP и отбрасывает "левых" клиентов.
Internet идёт через 3G WIFI роутер, в принципе на схеме всё это указано.
Вот, ещё есть такие данные netstat после запуска squid:
gateway dem #  netstat -lpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      5239/smbd          
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      5108/cupsd          
tcp        0      0 192.168.1.110:3128      0.0.0.0:*               LISTEN      32447/(squid)      
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      5239/smbd          
udp        0      0 192.168.1.110:137       0.0.0.0:*                           5248/nmbd          
udp        0      0 172.16.1.110:137        0.0.0.0:*                           5248/nmbd          
udp        0      0 0.0.0.0:137             0.0.0.0:*                           5248/nmbd          
udp        0      0 192.168.1.110:138       0.0.0.0:*                           5248/nmbd          
udp        0      0 172.16.1.110:138        0.0.0.0:*                           5248/nmbd          
udp        0      0 0.0.0.0:138             0.0.0.0:*                           5248/nmbd          
udp        0      0 0.0.0.0:631             0.0.0.0:*                           5108/cupsd          
udp        0      0 0.0.0.0:34213           0.0.0.0:*                           32447/(squid)
И главная проблема- когда что-то браузю в Инете через компьютер клиента, в логе access.log ничего не появляется. Получается трафик от клиентов в SQUID не заруливается. Если на своём компьютере, где squid стоит, тогда появляется, но там сплошные TCP_MISS, хотя одну и ту же страничку постоянно открываю:
http://pastebin.com/Xsx01Uwv
P.S. В прикреплённом топике выше https://forum.ubuntu.ru/index.php?topic=3244.msg23496#msg23496, перенаправление в прозрачный squid делается чуть по другому, может и тут надо что-то подобное:
Затем для заворачивание нужных портов на сквид прописывается правило
iptables -t nat -A PREROUTING -i eth0 -d ! 192.168.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.0.1:3128
« Последнее редактирование: 10 Января 2011, 03:55:46 от demontager »
Пишу о разном сюда nixtalk.com

Гарри Кашпировский

  • Гость
Re: SQUID+IPTABLES_настройка
« Ответ #11 : 10 Января 2011, 16:30:08 »
Это фактически одно правило. У тебя похоже проблема в другом.
Насколько я сталкивался с роутерами, все они на заводских прошивках по DHCP выдавали
шлюз - IP роутера.
DNS - IP роутера.
И изменить их я не мог. Может TPLink это такой чудо-роутер, который гибко настраивается аки dd-wrt :)
Я кстати не спросил, каким образом подключен этот самый роутер. Судя по схеме, Linux-Сервер является по отношению к TPLink клиентом и равным участником по одношению к другим клиентам TPLink. Если это верно то:
1. Шлюз, выдаваемый DHCP-сервером роутера должен быть 172.16.110
2. В трассировке до 3G-модема от клиента будет следующее, при условии включенного ip_forward на Linux-роутере
1-й хоп 172.16.1.110
2-й хоп 192.168.1.1
« Последнее редактирование: 10 Января 2011, 16:32:51 от KT315 »

Оффлайн demontager

  • Автор темы
  • Активист
  • *
  • Сообщений: 304
  • KHERSON
    • Просмотр профиля
    • Nixtalks IT-експлорер
Re: SQUID+IPTABLES_настройка
« Ответ #12 : 11 Января 2011, 03:42:33 »
На клиентах, для примера возьму 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, чтоб можно было с клиентской машины логится в LINUX-ROUTER, но конекта не получилось, хотя пинг есть и с SAMBA тоже самое не вышло.)


ADDRESS RESERVATION ( тут я привязал к MAC адрессам IP, чтоб каждый всегда имел один и тот же IP:


Пользователь решил продолжить мысль 11 Января 2011, 04:12:48:
Вроде как бы понял в чём причина(подсказали), почему не проходит трафик в SQUID c сети 172.16.0.0 - потомучто трафик FORWARD, а там у меня как раз квоты и только так клиенты получают Инет, не проходит в прокси:
 

Т.е. нужно переделывать квоты через другое правило, которое позволяет перенаправление в SQUID.  Может оно- REDIRECT ?
« Последнее редактирование: 11 Января 2011, 04:39:17 от demontager »
Пишу о разном сюда nixtalk.com

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13761
    • Просмотр профиля
Re: SQUID+IPTABLES_настройка
« Ответ #13 : 11 Января 2011, 08:53:51 »
Неправильно подсказали. Рассматривай пакет клиента с самого начала пути:
1. Попадает в цепочку PREROUTING, и именно там и происходит заворачивание на squid
2. А вот квотиться средствами iptables как раз и не будет, потому как http-траффик мимо цепочки FORWARD пойдёт (если повернёт на squid).

А не идёт http-траффик через squid по простой причине
В правиле указано:
Цитировать
DNAT       tcp  --  172.16.0.0/24        anywhere            tcp dpt:http to:192.168.1.110:3128
А клиенты
Цитировать
ACCEPT     all  --  172.16.1.101         anywhere            quota: 6291000 bytes
ACCEPT     all  --  anywhere             172.16.1.101        quota: 10490000 bytes
....skipped
ACCEPT     all  --  172.16.1.107         anywhere            quota: 104857600 bytes
ACCEPT     all  --  anywhere             172.16.1.107        quota: 104857600 bytes
От них пакеты как бы и не попадают под правило заворачивания на прокси.

Оффлайн demontager

  • Автор темы
  • Активист
  • *
  • Сообщений: 304
  • KHERSON
    • Просмотр профиля
    • Nixtalks IT-експлорер
Re: SQUID+IPTABLES_настройка
« Ответ #14 : 11 Января 2011, 14:34:10 »
Ясно, т.е. тупик получается? Я не смогу использовать квоты в связке с IPTABLES+SQUID ? Советовали глянуть ещё на netams, и делать лимитирование трафика с ним, но не хотелось изначально использовать сторонее ПО, а всё сделать стандартным набором.
Пишу о разном сюда nixtalk.com

 

Страница сгенерирована за 0.02 секунд. Запросов: 20.