Доброго времени суток.
Помогите, пожалуйста разобраться. У меня сеть:интернет ----- Маршрутизатор LinkSis ----- Прозрачный прокси Squid 2.7 ------ Локальная сеть
DHCP, DNS, FireWall, NAT FreeBSD 8.0 192.168.12/24
192.168.12.100 192.168.12.15Пока из локальной сети пользователи ходят мимо прокси через марштуризатор, но на самом прокси-сервере выход в интеренет прописан в IPFW через порт Squid. Но правила squid не выполняются для локальной машины, и логи пишутся "час через час". В этом и заключается задача. Что настроить-то еще, чтобы заработало?
Ниже: Конфиг Squid + IPFW + ifconfig + netstat -rn
Работа Squid
# ps -aux | grep squid
squid 779 0,0 0,2 5600 2120 ?? Is 9:57 0:00,00 /usr/local/sbin/squid -D
squid 781 0,0 0,5 10720 5028 ?? S 9:57 0:00,10 (squid) -D (squid)
squid 799 0,0 0,1 1532 728 ?? I 9:57 0:00,00 (unlinkd) (unlinkd)
Конфиг SQUID
#cat /usr/local/etc/squid/squid.conf | grep -v '#'acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl SSL_ports port 443
acl CONNECT method CONNECThttp_access allow manager localhost
http_access deny manager
http_access deny !Safe_portsacl localnet src 192.168.12.0/24
acl VIP src "/usr/local/etc/squid/vip.lst"
acl BlackHosts src "/usr/local/etc/squid/black.lst"
acl black_url dstdomain "/usr/local/etc/squid/url_black.lst"
acl white_url dstdomain "/usr/local/etc/squid/url_white.lst"
acl quota_deny src "/usr/local/etc/squid/deny.lst" #этот список заполняет программа из тех юзверей, которые превысили квотуhttp_access allow VIP
http_access allow white_url
http_access deny black_url
http_access deny BlackHosts
http_access deny quota_deny
deny_info ERR_QUOTA quota_denyhttp_access allow localnet
http_access deny all
icp_access allow localnet
icp_access deny allhttp_port 192.168.12.15:3128
hierarchy_stoplist cgi-bin ?
cache_mem 256 MB
memory_replacement_policy heap GDSF
cache_replacement_policy heap GDSF
cache_dir ufs /usr/local/squid/cache 1024 16 256
access_log /usr/local/squid/logs/access.log squid
cache_store_log none
log_fqdn on
refresh_pattern ^ftp: &n... 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcastacl apache rep_header Server ^Apache
broken_vary_encoding allow apachecache_mgr admin@admin.com
icp_port 0
log_icp_queries off
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERYerror_directory /usr/local/etc/squid/errors/Russian-1251
coredump_dir /usr/local/squid/cache
Конфиг файрвола
# cat /etc/firewall
#!/bin/shipfw -f flush
ipfw add fwd 127.0.0.1,3128 tcp from 192.168.12.0/24 to any 80 via re0
ipfw add fwd 192.168.12.15,3128 tcp from 192.168.12.0/24 to any 80 via re0
ipfw add 1 allow all from any to any
Настройки сети
# ifconfig
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=389b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_UCAST,WOL_MCAST,WOL_MAGIC>
ether 00:1d:7d:45:ee:65
inet 192.168.12.15 netmask 0xffffff00 broadcast 192.168.12.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> metric 0 mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
Роутинг
# netstat -rn
Routing tablesInternet:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.12.100 UGS 2 864 re0
127.0.0.1 link#3 UH 0 0 lo0
192.168.12.0/24 link#1 U 0 15 re0
192.168.12.15 link#1 UHS 0 37 lo0Internet6:
Destination Gateway Flags Netif Expire
::1 ::1 UH lo0
fe80::%lo0/64 link#3 U lo0
fe80::1%lo0 link#3 UHS lo0
ff01:3::/32 fe80::1%lo0 U lo0
ff02::%lo0/32 fe80::1%lo0 U lo0
>Но правила squid не выполняются для локальной машины, и логи пишутся
>"час через час". В этом и заключается задача. Что настроить-то еще,
>чтобы заработало?
>что бы это значило?
нельзя ли обойтись без метафор и конкретно указать, что именно не так работает и как должно работать по вашему мнению?
1. squid не пишет логи, т.е. за вчера есть логи, за сегодня нет
2. правила ACL squid не работают.
>1. squid не пишет логи, т.е. за вчера есть логи, за сегодня
>нет
>2. правила ACL squid не работают.1. что squid пишет в cache.log при старте?
2. что именно не работает из ACL?
1. что squid пишет в cache.log при старте?2010/01/26 14:49:25| Preparing for shutdown after 0 requests
2010/01/26 14:49:25| Waiting 30 seconds for active connections to finish
2010/01/26 14:49:25| FD 12 Closing HTTP connection
2010/01/26 14:49:56| Shutting down...
2010/01/26 14:49:56| Closing unlinkd pipe on FD 11
2010/01/26 14:49:56| storeDirWriteCleanLogs: Starting...
2010/01/26 14:49:56| Finished. Wrote 0 entries.
2010/01/26 14:49:56| Took 0.0 seconds ( 0.0 entries/sec).
CPU Usage: 0.066 seconds = 0.022 user + 0.044 sys
Maximum Resident Size: 5052 KB
Page faults with physical i/o: 0
2010/01/26 14:49:56| logfileClose: closing log /usr/local/squid/logs/access.log
2010/01/26 14:49:56| Squid Cache (Version 2.7.STABLE7): Exiting normally.
2010/01/26 14:49:56| Starting Squid Cache version 2.7.STABLE7 for i386-portbld-freebsd8.0...
2010/01/26 14:49:56| Process ID 1548
2010/01/26 14:49:56| With 11095 file descriptors available
2010/01/26 14:49:56| Using kqueue for the IO loop
2010/01/26 14:49:56| DNS Socket created at 0.0.0.0, port 45946, FD 6
2010/01/26 14:49:56| Adding domain diagonalhouse.ru from /etc/resolv.conf
2010/01/26 14:49:56| Adding nameserver 192.168.12.100 from /etc/resolv.conf
2010/01/26 14:49:56| logfileOpen: opening log /usr/local/squid/logs/access.log
2010/01/26 14:49:56| Unlinkd pipe opened on FD 11
2010/01/26 14:49:56| Swap maxSize 524288 + 262144 KB, estimated 60494 objects
2010/01/26 14:49:56| Target number of buckets: 3024
2010/01/26 14:49:56| Using 8192 Store buckets
2010/01/26 14:49:56| Max Mem size: 262144 KB
2010/01/26 14:49:56| Max Swap size: 524288 KB
2010/01/26 14:49:56| Store logging disabled
2010/01/26 14:49:56| Rebuilding storage in /usr/local/squid/cache (CLEAN)
2010/01/26 14:49:56| Using Least Load store dir selection
2010/01/26 14:49:56| Set Current Directory to /usr/local/squid/cache
2010/01/26 14:49:56| Loaded Icons.
2010/01/26 14:49:56| Accepting transparently proxied HTTP connections at 192.168.12.15, port 3128, FD 12.
2010/01/26 14:49:56| WCCP Disabled.
2010/01/26 14:49:56| Ready to serve requests.
2010/01/26 14:49:56| Done reading /usr/local/squid/cache swaplog (0 entries)
2010/01/26 14:49:56| Finished rebuilding storage from disk.
2010/01/26 14:49:56| 0 Entries scanned
2010/01/26 14:49:56| 0 Invalid entries.
2010/01/26 14:49:56| 0 With invalid flags.
2010/01/26 14:49:56| 0 Objects loaded.
2010/01/26 14:49:56| 0 Objects expired.
2010/01/26 14:49:56| 0 Objects cancelled.
2010/01/26 14:49:56| 0 Duplicate URLs purged.
2010/01/26 14:49:56| 0 Swapfile clashes avoided.
2010/01/26 14:49:56| Took 0.3 seconds ( 0.0 objects/sec).
2010/01/26 14:49:56| Beginning Validation Procedure
2010/01/26 14:49:56| Completed Validation Procedure
2010/01/26 14:49:56| Validated 0 Entries
2010/01/26 14:49:56| store_swap_size = 0k
2010/01/26 14:49:57| storeLateRelease: released 0 objects
2. что именно не работает из ACL?Например, все запрещающие правила не работают. Например, ввожу IP в черный список, а интернет все равно есть.
>2. что именно не работает из ACL?
>
>Например, все запрещающие правила не работают. Например, ввожу IP в черный список,
>а интернет все равно есть.http_access как и другие *_access работают по следующему принципу: срабатывает первое соответствующее по ACL правило, остальные не рассматриваются; соответственно, важен порядок правил (не ACL)
в наборе
http_access allow VIP
http_access allow white_url
http_access deny black_url
http_access deny BlackHosts
http_access deny quota_deny
не должно работать ни одно правило deny, поскольку за ними нет ни одного правила allow
>не должно работать ни одно правило deny, поскольку за ними нет ни
>одного правила allow1. спасибо за толковое замечание. я тут взглянул на свой список, там есть после запретов одно правило allow, так что запреты вроде должны работать:
http_access allow VIP
http_access allow white_url
http_access deny black_url
http_access deny BlackHosts
http_access deny quota_deny
deny_info ERR_QUOTA quota_deny
http_access allow localnet
http_access deny all2. А логи что-то уже совсем не пишет. У меня все правильно в IPFW?
>[оверквотинг удален]
>работать:
>
>http_access allow VIP
>http_access allow white_url
>http_access deny black_url
>http_access deny BlackHosts
>http_access deny quota_deny
>deny_info ERR_QUOTA quota_deny
>http_access allow localnet
>http_access deny allтак и есть, только для запросов, не соответствующих предыдущим директивам
>2. А логи что-то уже совсем не пишет. У меня все правильно
>в IPFW?а IPFW при чем?
>так и есть, только для запросов, не соответствующих предыдущим директивамда-да, предыдущие директивы VIP white_url должны быть открыты всегда.
>а IPFW при чем?
ну как... squid работает на порту 3128, а логи почему не пишет?
Потому что все машины в сети не проходят через машинку с прокси.В IPWF добавляем правила на разворот трафика на Squid
и, по идее, squid должен видеть то, как мы лазаем в инет с самого сервера.
Ну и писать об этом логи...А почему не пишет:
- либо на IPFW не верные правила
- либо барахлит squidПоскольльку, в один из периодов правки IPFW, Squid как-то писал логи, то скорее всего дело в IPFW.
Можете взглянуть на эти привала, там как, все нормально?
>[оверквотинг удален]
>Ну и писать об этом логи...
>
>А почему не пишет:
>- либо на IPFW не верные правила
>- либо барахлит squid
>
>Поскольльку, в один из периодов правки IPFW, Squid как-то писал логи, то
>скорее всего дело в IPFW.
>
>Можете взглянуть на эти привала, там как, все нормально?обычно сначала настраивают squid, при том на тестовом клиенте в браузере, соответственно, его прописывают, а уже после этого настраивают прозрачное кеширование, по крайней мере, именно это подсказывает здравый смысл
>обычно сначала настраивают squid, при том на тестовом клиенте в браузере, соответственно,
>его прописывают, а уже после этого настраивают прозрачное кеширование, по крайней
>мере, именно это подсказывает здравый смыслДля Вас это здравый смысл, а для меня целое озарение :)
Выключил IPFW. Настроил прокси в браузере и проверил работу Squid - все работает :)Следовательно, у меня не правильно настроен форвардинг в IPFW!
Ядро пересобирал с поддержкой форвардинга, так что функция, в принципе, есть...
>>обычно сначала настраивают squid, при том на тестовом клиенте в браузере, соответственно,
>>его прописывают, а уже после этого настраивают прозрачное кеширование, по крайней
>>мере, именно это подсказывает здравый смысл
>
>Для Вас это здравый смысл, а для меня целое озарение :)
>Выключил IPFW. Настроил прокси в браузере и проверил работу Squid - все
>работает :)
>
>Следовательно, у меня не правильно настроен форвардинг в IPFW!
>Ядро пересобирал с поддержкой форвардинга, так что функция, в принципе, есть...в http_port 192.168.12.15:3128 добавить transparent, так же имеет значение параметры сборки
>в http_port 192.168.12.15:3128 добавить transparent, так же имеет значение параметры сборкидобавил - ничего...
параметры сборки:
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_FORWARD
options IPFIREWALL_NAT
options IPDIVERT
options DUMMYNET
options LIBALIAS
options ROUTETABLES=2
options HZ="1000"Ну и далее
/etc/rc.conf
gateway_enable="NO"
natd_enable="NO"
squid_enable="YES"
firewall_enable="YES"
firewall_script="/etc/rc.firewal"/etc/firewall
#!/bin/sh
ipfw -f flush
ipfw add fwd 192.168.12.15,3128 tcp from 192.168.12.0/24 to any 80,443,21 via re0
ipfw add allow ip from any to any
>[оверквотинг удален]
>options IPFIREWALL_VERBOSE_LIMIT=100
>options IPFIREWALL_DEFAULT_TO_ACCEPT
>options IPFIREWALL_FORWARD
>options IPFIREWALL_NAT
>options IPDIVERT
>options DUMMYNET
>options LIBALIAS
>options ROUTETABLES=2
>options HZ="1000"
>не ядра, а squid
у клиента шлюзом указан 192.168.12.100?
если да, то без прописывания прокси в браузере запросы пойдут на 192.168.12.100, а не 192.168.12.15
>[оверквотинг удален]
>squid_enable="YES"
>firewall_enable="YES"
>firewall_script="/etc/rc.firewal"
>
>/etc/firewall
>#!/bin/sh
>ipfw -f flush
>ipfw add fwd 192.168.12.15,3128 tcp from 192.168.12.0/24 to any 80,443,21 via
>re0
>ipfw add allow ip from any to any
>у клиента шлюзом указан 192.168.12.100?да, именно так.
>если да, то без прописывания прокси в браузере запросы пойдут на 192.168.12.100,
>а не 192.168.12.15- вЫключаю IPFW, прописываю в браузере прокси 192.168.12.15:3128 - все работает
- вКлючаю IPWF с пересылкой (ipfw add fwd 192.168.12.15,3128 tcp from 192.168.12.0/24 to any 80,443,21 via), в браузере прописываю 192.168.12.15:80, то сервер не пересылает на 3128, а выводит тестовую страничку Апача.
Значит дело в IPFW....
>[оверквотинг удален]
>>если да, то без прописывания прокси в браузере запросы пойдут на 192.168.12.100,
>>а не 192.168.12.15
>
>- вЫключаю IPFW, прописываю в браузере прокси 192.168.12.15:3128 - все работает
>
>- вКлючаю IPWF с пересылкой (ipfw add fwd 192.168.12.15,3128 tcp from
>192.168.12.0/24 to any 80,443,21 via), в браузере прописываю 192.168.12.15:80, то сервер
>не пересылает на 3128, а выводит тестовую страничку Апача.
>
>Значит дело в IPFW....а в access.log при этом что?
>а в access.log при этом что?вообще ничего. ну скорее всего потому, что форвардинг портов не работает.
может перед тем, как давать команды на форвардинг
ipfw add fwd 192.168.12.15,3128 tcp from 192.168.12.0/24 to any 80,443,21 via re0
нужно этот самый форвардинг как-то включить в каких-то опциях, помимо пересборки ядра?
>>а в access.log при этом что?
>
>вообще ничего. ну скорее всего потому, что форвардинг портов не работает.
>
>может перед тем, как давать команды на форвардинг
>ipfw add fwd 192.168.12.15,3128 tcp from 192.168.12.0/24 to any 80,443,21 via
>re0
>нужно этот самый форвардинг как-то включить в каких-то опциях, помимо пересборки ядра?
>etc/rc.conf
gateway_enable="NO"
natd_enable="NO"
squid_enable="YES"
firewall_enable="YES"
этим включаете
firewall_script="/etc/rc.firewal"
а вот имя файла не сходится с/etc/firewall
#!/bin/sh
ipfw -f flush
ipfw add fwd 192.168.12.15,3128 tcp from 192.168.12.0/24 to any 80,443,21 via re0
ipfw add allow ip from any to any
>firewall_enable="YES"
>этим включаетеага, спасибо.
>firewall_script="/etc/rc.firewal"
>а вот имя файла не сходится с
>
>/etc/firewallда, я ее уже исправил на /etc/firewall с нужными правилами, извините.
но результут тот же: форвардинг не работает и браузер выдает тестовую страничку апача....
> в браузере прописываю 192.168.12.15:80это зачем?
>> в браузере прописываю 192.168.12.15:80
>
>это зачем?ну прокси работает на компе 192.168.12.15,
и IPFW перенаправляет все, что идет по 80 порту на 3128 порт Squid.
Значит, если в браузере надо прописатьадрс прокси с 80-м портом, то все должно работать.
Или нет?
вообщем на "сейчас" ситуация такова.- Squid работает (http_port 192.168.12.15:3128), это проверено прописанием в браузере lynx адреса и порта прокси: 192.168.12.15:3128
- Форвардинг не работает. Это проверено тем, что нет результата, если прописать в браузере lynx адрес и порт прокси: 192.168.12.15:80 и включить форвардинг (предварительно пересобрав ядро с поддержкой форвардинга и открытым IPFW):
# grep ipfw2 /var/run/dmesg.boot
ipfw2 (+ipv6) initialized, divert enabled, nat enabled, rule-based forwarding enabled, default to accept, logging disabled/etc/rc.conf
firewall_enable="YES"
firewall_script="/etc/firewall"где
/etc/firewall
#!/bin/sh
ipfw add 050 fwd 192.168.12.15,3128 tcp from 192.168.12.0/24 to any 21,80,443,5190 via re0и ipfw show
00050 0 0 fwd 192.168.12.15,3128 tcp from 192.168.12.0/24 to any dst-port 21,80,443,5190 via re0
65535 332 34148 allow ip from any to anyНО в итоге lynx http://ya.ru выдает тестовую страничку апача...
Народ, как блин настроить этот форвардинг?
подправил
/etc/firewall
#!/bin/sh
ipfw -q add fwd 192.168.12.15,3128 tcp from 192.168.12.0/24 to any 21,80,443,3128,5190,8080,8101Теперь получаю в браузере: 504 Gateway Time-out
Убираю в настройках браузера адрес и порт прокси: 192.168.12.15:80
и тогда при наборе правил:#ipfw list
00100 allow ip from any to any via lo0
00200 deny ip from any to 127.0.0.0/8
00300 deny ip from 127.0.0.0/8 to any
65000 allow ip from any to any
65100 fwd 192.168.12.15,3128 tcp from 192.168.12.0/24 to any dst-port 21,80,443,3128,5190,8080,8101
65535 allow ip from any to anyинтернет работает МИМО прокси, и Squid не пишет логи.
ставлю в настройках браузера прокси 192.168.12.15:3128 и логи пишутся...что ж делать с форвардингом-то, а?
Надо было убрать лишнюю строку с правилом №65000, чтобы было просто:#ipfw list
00100 allow ip from any to any via lo0
00200 deny ip from any to 127.0.0.0/8
00300 deny ip from 127.0.0.0/8 to any
65100 fwd 192.168.12.15,3128 tcp from 192.168.12.0/24 to any dst-port 21,80,443,3128,5190,8080,8101
65535 allow ip from any to anyТема закрыта.