Решено: Вылетает squid

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модератор: SLEDopit

Аватара пользователя
technotrance
Сообщения: 256
ОС: Fedora, FreeBSD

Решено: Вылетает squid

Сообщение technotrance »

Здравствуйте!
Имеем сервер, выполняющий роль шлюза и роль прокси. Fedora 13 i386. Имеем squid 7:3.1.10-1.fc13.
Время от времени squid вылетает.
В cache.log я заметил вот такую запись:

Код: Выделить всё

assertion failed: http.cc.1718: "strstr(url, request->urlpath.termedBuf())"

Знакомый программер помог расшифровать строчку 1718 в этой функции. Она читается примерно так:
Если в строке url не содержится подстрока request->urlpath, то сообщи в лог

Также, в логе messages есть вот такая строчка:

Код: Выделить всё

Squid Parent: child process 28006 exited due to signal 6 with status 0

В гугле я нарыл следующую информацию:
Если SQUID при запуске ругается подобным образом

Squid Parent : child process 2974 exited due to signal 6
то в 90% случаев это проблема связана со слишком большим размером лог файла. Попробуйте почистить /var/log/ squid / – мне помогло
Еще это может быть потому, что сквид не имеет прав доступа на запись в /var/log/ squid /

Однако, логи у меня небольшие, я их недавно чистил. И доступ туда тоже есть:

Код: Выделить всё

-rwx--x---. 1 squid squid  98M Мар 24 17:34 access.log
-rwx--x---. 1 squid squid  14M Мар 20 03:23 access.log-20110320.gz
-rwx--x---. 1 squid squid  71K Мар 24 17:16 cache.log
-rwx--x---. 1 squid squid  13K Мар 20 03:23 cache.log-20110320.gz
-rwx--x---. 1 squid squid 6,5K Мар 18 11:03 squid.out

Вот конфиг сквида:

Код: Выделить всё

# created by SAMS _sams_ 2011-3-24 17:16:1
# TAG: http_port

http_port 192.168.199.2:3128
visible_hostname 192.168.199.2

hierarchy_stoplist cgi-bin ?
# squid не будет кешировать динамически генерируемые страницы (поисковые сервера, некоторые другие серверы и чаты), а будет напрямую перенаправлять запрос серверу

coredump_dir /var/spool/squid
# Указываем куда сбрасывать core

# TAG: cache_mem (bytes)

cache_mem 512 MB
# сколько оперативной памяти сквид может забрать под свои нужды.

maximum_object_size 2000 KB
# максимальный размер объектов, которые будут сохранены на диск.

maximum_object_size_in_memory 1000 KB
# максимальный размер объектов, которые будут сохранены в кэше.

# TAG: cache_dir

cache_dir ufs /var/spool/squid 4096 16 256
# указывает сквиду, где сохранять кешируемые файлы. Указывает отдать под кеш 3000 мегабайт и создать 16 и 256 соответственно каталогов 1го и 2го уровня.

# TAG: cache_access_log
# TAG: cache_log
# TAG: cache_store_log
# TAG: ftp_user

# в этих строках мы указываем сколько времени в минутах объект в кеше считается свежим и какой процент объектов оставлять с последнего обновления
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

# TAG: redirect_program
# redirect_program /etc/squid/redirector.sams
# Позже, здесь можно будет указать путь к редиректору.

# TAG: redirector_access

# TAG: auth_param

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of="EGARANT\\Пользователи домена"
auth_param ntlm children 5
auth_param ntlm keep_alive on

auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of="EGARANT\\Пользователи домена"
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

# TAG: acl
acl _sams_4cf37cc8b9151 proxy_auth "/etc/squid/4cf37cc8b9151.sams"
acl _sams_4cf37cc8b9151_time time MTWHFAS 00:00-23:59
acl _sams_4cf37ce72e937 proxy_auth "/etc/squid/4cf37ce72e937.sams"
acl _sams_4cf37ce72e937_time time MTWHFAS 00:00-23:59
acl _sams_4cf37d2f4c3c0 proxy_auth "/etc/squid/4cf37d2f4c3c0.sams"
acl _sams_4cf37d2f4c3c0_time time MTWHFAS 00:00-23:59
acl _sams_4cef83fb3ca9c url_regex -i "/etc/squid/4cef83fb3ca9c.sams"
acl _sams_4d4d11485334f url_regex -i "/etc/squid/4d4d11485334f.sams"
acl _sams_chat url_regex -i "/etc/squid/chat.sams"
acl _sams_porno url_regex -i "/etc/squid/porno.sams"
acl _sams_4cef847929b41 url_regex -i "/etc/squid/4cef847929b41.sams"
acl _sams_disabled_id proxy_auth "/etc/squid/disabled_id.sams"

# acl temp proxy_auth "/etc/squid/temp"

acl manager proto cache_object
# назначить протоколу кеширования объектов название manager

acl localhost src 127.0.0.1/32 192.168.199.2/32
# адрес сервера

acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
# удалённые адреса

acl localnet src 192.168.0.0/16
# адресное пространство локальной сети

acl SSL_ports port 443
acl Safe_ports port "/etc/squid/allowports.txt"
# разрешённые порты

acl CONNECT method CONNECT

# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager

http_access deny !Safe_ports
# Запрет всех портов, кроме разрешённых

http_access deny CONNECT !SSL_ports
# Запрет всех SSL портов, кроме разрешённых

http_access deny to_localhost

# TAG: http_access
http_access allow _sams_4cf37cc8b9151  !_sams_4cef83fb3ca9c !_sams_4d4d11485334f !_sams_chat !_sams_porno _sams_4cf37cc8b9151_time
http_access allow _sams_4cf37ce72e937  !_sams_4d4d11485334f !_sams_chat !_sams_porno _sams_4cf37ce72e937_time
http_access allow _sams_4cf37d2f4c3c0  _sams_4cf37d2f4c3c0_time
http_access deny _sams_disabled_id

http_access allow localhost
# разрешить доступ с сервера

http_access deny all
# запретить всё остальное

# TAG: delay_pools

Пользователей через Squid подключается где-то в районе 100 человек, а может и больше.
Да, и ещё: Исходники самог Сквида немного подправлены -- как именно я описал вот тут. Хотя, я и не думаю, что это как-то связано друг с другом...
Подскажите, куда можно ещё копнуть?
Спасибо сказали:

Аватара пользователя
technotrance
Сообщения: 256
ОС: Fedora, FreeBSD

Re: Решено: Вылетает squid

Сообщение technotrance »

Подредактировал немного конфиг. На всякий случа, добавил строчку:
cache_effective_user squid
И отредактировал секцию:
auth_param ntlm children 200
Конфиг полностью получился такой:

Код: Выделить всё

# created by SAMS _sams_ 2011-3-30 15:38:45
# TAG: http_port

http_port 192.168.199.2:3128
visible_hostname 192.168.199.2

hierarchy_stoplist cgi-bin ?
# squid не будет кешировать динамически генерируемые страницы (поисковые сервера, некоторые другие серверы и чаты), а будет напрямую перенаправлять запрос серверу

coredump_dir /var/spool/squid
# Указываем куда сбрасывать core

cache_effective_user squid

# TAG: cache_mem (bytes)

cache_mem 512 MB
# сколько оперативной памяти сквид может забрать под свои нужды.

maximum_object_size 2000 KB
# максимальный размер объектов, которые будут сохранены на диск.

maximum_object_size_in_memory 1000 KB
# максимальный размер объектов, которые будут сохранены в кэше.

# TAG: cache_dir

cache_dir ufs /var/spool/squid 4096 16 256
# указывает сквиду, где сохранять кешируемые файлы. Указывает отдать под кеш 3000 мегабайт и создать 16 и 256 соответственно каталогов 1го и 2го уровня.

# TAG: cache_access_log
# TAG: cache_log
# TAG: cache_store_log
# TAG: ftp_user

# в этих строках мы указываем сколько времени в минутах объект в кеше считается свежим и какой процент объектов оставлять с последнего обновления
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

# TAG: redirect_program
# redirect_program /etc/squid/redirector.sams
# Позже, здесь можно будет указать путь к редиректору.

# TAG: redirector_access

# TAG: auth_param

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of="EGARANT\\Пользователи домена"
auth_param ntlm children 200
auth_param ntlm keep_alive on

auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of="EGARANT\\Пользователи домена"
auth_param basic children 200
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

# TAG: acl
acl _sams_4cf37cc8b9151 proxy_auth "/etc/squid/4cf37cc8b9151.sams"
acl _sams_4cf37cc8b9151_time time MTWHFAS 00:00-23:59
acl _sams_4cf37ce72e937 proxy_auth "/etc/squid/4cf37ce72e937.sams"
acl _sams_4cf37ce72e937_time time MTWHFAS 00:00-23:59
acl _sams_4cf37d2f4c3c0 proxy_auth "/etc/squid/4cf37d2f4c3c0.sams"
acl _sams_4cf37d2f4c3c0_time time MTWHFAS 00:00-23:59
acl _sams_4cef83fb3ca9c url_regex -i "/etc/squid/4cef83fb3ca9c.sams"
acl _sams_4d4d11485334f url_regex -i "/etc/squid/4d4d11485334f.sams"
acl _sams_chat url_regex -i "/etc/squid/chat.sams"
acl _sams_porno url_regex -i "/etc/squid/porno.sams"
acl _sams_4cef847929b41 url_regex -i "/etc/squid/4cef847929b41.sams"
acl _sams_disabled_id proxy_auth "/etc/squid/disabled_id.sams"

# acl temp proxy_auth "/etc/squid/temp"

acl manager proto cache_object
# назначить протоколу кеширования объектов название manager

acl localhost src 127.0.0.1/32 192.168.199.2/32
# адрес сервера

acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
# удалённые адреса

acl localnet src 192.168.0.0/16
# адресное пространство локальной сети

acl SSL_ports port 443
acl Safe_ports port "/etc/squid/allowports.txt"
# разрешённые порты

acl CONNECT method CONNECT

# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager

http_access deny !Safe_ports
# Запрет всех портов, кроме разрешённых

http_access deny CONNECT !SSL_ports
# Запрет всех SSL портов, кроме разрешённых

http_access deny to_localhost

# http_access allow temp all

# TAG: http_access
http_access allow _sams_4cf37cc8b9151  !_sams_4cef83fb3ca9c !_sams_4d4d11485334f !_sams_chat !_sams_porno _sams_4cf37cc8b9151_time
http_access allow _sams_4cf37ce72e937  !_sams_4d4d11485334f !_sams_chat !_sams_porno _sams_4cf37ce72e937_time
http_access allow _sams_4cf37d2f4c3c0  _sams_4cf37d2f4c3c0_time
http_access deny _sams_disabled_id

http_access allow localhost
# разрешить доступ с сервера

http_access deny all
# запретить всё остальное

# TAG: delay_pools

Изменения ещё были следующие: из репозиториев обновилась самба и krb5. Сейчас их версии такие:
samba-3.5.8-74.fc13
krb5-libs-1.7.1-18.fc13
Причём, сквид, похоже, не вылетел. В процессах он остался, но окошко авторизации перестало в браузере появляться
Незадолго до того, как это случилось, в логах появились вот такие ошибки (не одна, а несколько таких):

Код: Выделить всё

Mar 30 15:24:16 router (ntlm_auth): [2011/03/30 15:24:16.852248,  0] utils/ntlm_auth.c:186(get_winbind_domain)
Mar 30 15:24:16 router (ntlm_auth):   could not obtain winbind domain name!

Проверил самбу -- wbinfo все тесты прошёл.
Вот конфиг самбы:

Код: Выделить всё

[global]
log file = /var/log/samba/log.%m
socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192
null passwords = yes
interfaces = eth1
hosts allow = 192.168. 127.0.0.1
winbind uid = 50-99999999
winbind gid = 50-99999999
auth methods = winbind
winbind enum groups = yes
winbind enum users = yes
winbind use default domain = yes
name resolve order = hosts wins bcast lmhosts
case sensitive = no
dns proxy = no
server string = Linux
netbios name = router
password server = 192.168.199.202 192.168.199.199
realm = EGARANT.LOCAL
client signing = yes
local master = no
domain master = no
workgroup = EGARANT
debug level = 2
security = ads
dos charset = 866
max log size = 50
os level = 0

Вобще, я уж запутался, в какую сторону рыть... Всё ж таки это сквид или самба неправильно настроены???
Спасибо сказали:

Аватара пользователя
technotrance
Сообщения: 256
ОС: Fedora, FreeBSD

Re: Решено: Вылетает squid

Сообщение technotrance »

В логе log.winbindd есть вот такое:

Код: Выделить всё

[2011/03/30 15:24:16.840105,  2] winbindd/winbindd.c:847(remove_client)
  final write to client failed: Обрыв канала
[2011/03/30 15:24:16.884475,  2] winbindd/winbindd.c:847(remove_client)
  final write to client failed: Обрыв канала

По каким причинам это происходить может? Контроллеры домена работаю стабильно.
Спасибо сказали:

Аватара пользователя
technotrance
Сообщения: 256
ОС: Fedora, FreeBSD

Re: Решено: Вылетает squid

Сообщение technotrance »

Нагуглил, что причина может крыться в том, что надо на каталог /var/lib/samba/winbindd_privileged поставить вот такие права:

Код: Выделить всё

drwxr-x---. 2 root squid 4,0K Мар 29 20:21 winbindd_privileged

Поставил... Буду наблюдать...
Спасибо сказали:

Аватара пользователя
technotrance
Сообщения: 256
ОС: Fedora, FreeBSD

Re: Решено: Вылетает squid

Сообщение technotrance »

Сегодня ситуация повторилась! Причём, практически в это же время.
Вот что имеем в логе messages:

Код: Выделить всё

Mar 31 13:28:39 router squid[30605]: Squid Parent: child process 30607 exited due to signal 6 with status 0
Mar 31 13:28:42 router squid[30605]: Squid Parent: child process 19806 started
Mar 31 13:28:43 router (ntlm_auth): [2011/03/31 13:28:43.837343,  0] utils/ntlm_auth.c:186(get_winbind_domain)
Mar 31 13:28:43 router (ntlm_auth):   could not obtain winbind domain name!
Mar 31 13:28:43 router (ntlm_auth): [2011/03/31 13:28:43.890831,  0] utils/ntlm_auth.c:186(get_winbind_domain)
Mar 31 13:28:43 router (ntlm_auth):   could not obtain winbind domain name!
Mar 31 13:28:43 router (ntlm_auth): [2011/03/31 13:28:43.904088,  0] utils/ntlm_auth.c:186(get_winbind_domain)
Mar 31 13:28:43 router (ntlm_auth):   could not obtain winbind domain name!

А вот это в сквидовском cache.log:

Код: Выделить всё

2011/03/31 13:28:39| assertion failed: http.cc:1718: "strstr(url, request->urlpath.termedBuf())"
2011/03/31 13:28:42| Starting Squid Cache version 3.1.10 for i686-pc-linux-gnu...
2011/03/31 13:28:42| Process ID 19806
2011/03/31 13:28:42| With 10240 file descriptors available
2011/03/31 13:28:42| Initializing IP Cache...
2011/03/31 13:28:42| DNS Socket created at [::], FD 9
2011/03/31 13:28:42| DNS Socket created at 0.0.0.0, FD 10
2011/03/31 13:28:42| Adding domain egarant.local from /etc/resolv.conf
2011/03/31 13:28:42| Adding nameserver 192.168.199.202 from /etc/resolv.conf
2011/03/31 13:28:42| Adding nameserver 192.168.199.199 from /etc/resolv.conf
2011/03/31 13:28:42| Adding nameserver 212.49.118.2 from /etc/resolv.conf
2011/03/31 13:28:42| Adding nameserver 212.49.103.2 from /etc/resolv.conf
2011/03/31 13:28:42| helperOpenServers: Starting 200/200 'ntlm_auth' processes
2011/03/31 13:28:43| helperOpenServers: Starting 200/200 'ntlm_auth' processes
[2011/03/31 13:28:43.837343,  0] utils/ntlm_auth.c:186(get_winbind_domain)
  could not obtain winbind domain name!
[2011/03/31 13:28:43.890831,  0] utils/ntlm_auth.c:186(get_winbind_domain)
  could not obtain winbind domain name!
[2011/03/31 13:28:43.904088,  0] utils/ntlm_auth.c:186(get_winbind_domain)
  could not obtain winbind domain name!
2011/03/31 13:28:43| User-Agent logging is disabled.
2011/03/31 13:28:43| Referer logging is disabled.
2011/03/31 13:28:44| Unlinkd pipe opened on FD 815
2011/03/31 13:28:44| Local cache digest enabled; rebuild/rewrite every 3600/3600 sec
2011/03/31 13:28:44| Store logging disabled
2011/03/31 13:28:44| Swap maxSize 4194304 + 524288 KB, estimated 362968 objects
2011/03/31 13:28:44| Target number of buckets: 18148
2011/03/31 13:28:44| Using 32768 Store buckets
2011/03/31 13:28:44| Max Mem  size: 524288 KB
2011/03/31 13:28:44| Max Swap size: 4194304 KB
2011/03/31 13:28:44| Version 1 of swap file with LFS support detected...
2011/03/31 13:28:44| Rebuilding storage in /var/spool/squid (DIRTY)
2011/03/31 13:28:44| Using Least Load store dir selection
2011/03/31 13:28:44| Set Current Directory to /var/spool/squid
2011/03/31 13:28:44| Loaded Icons.
2011/03/31 13:28:44| Accepting  HTTP connections at 192.168.199.2:3128, FD 818.
2011/03/31 13:28:44| HTCP Disabled.
2011/03/31 13:28:44| Squid plugin modules loaded: 0
2011/03/31 13:28:44| Adaptation support is off.
2011/03/31 13:28:44| Ready to serve requests.
2011/03/31 13:28:44| Store rebuilding is 1.48% complete
2011/03/31 13:28:45| Done reading /var/spool/squid swaplog (276714 entries)
2011/03/31 13:28:45| Finished rebuilding storage from disk.
2011/03/31 13:28:45|    251384 Entries scanned
2011/03/31 13:28:45|         0 Invalid entries.
2011/03/31 13:28:45|         0 With invalid flags.
2011/03/31 13:28:45|    226069 Objects loaded.
2011/03/31 13:28:45|         0 Objects expired.
2011/03/31 13:28:45|     25315 Objects cancelled.
2011/03/31 13:28:45|         0 Duplicate URLs purged.
2011/03/31 13:28:45|         0 Swapfile clashes avoided.
2011/03/31 13:28:45|   Took 1.33 seconds (170183.47 objects/sec).
2011/03/31 13:28:45| Beginning Validation Procedure
2011/03/31 13:28:45|   Completed Validation Procedure
2011/03/31 13:28:45|   Validated 452161 Entries
2011/03/31 13:28:45|   store_swap_size = 3774824
2011/03/31 13:28:45| storeLateRelease: released 0 objects

в log.winbind ничего не отобразилось...
Но тут, похоже я знаю, из-за чего это было. Тут у меня, на самом деле, размер файла cache.log был большой, потому что я до этого у сквида включал debug_option на высокий уровень... Почистил логи.
Наблюдаю далее...
Спасибо сказали:

Аватара пользователя
phantomSSL
Сообщения: 418
Статус: сдаются в аренду складские помещения в /var/spool
ОС: Archlinux && BSD && MacOS

Re: Решено: Вылетает squid

Сообщение phantomSSL »

А что даёт вывод wbinfo -t ?
dev=null=->( awk, *sh, &vi){ lambda{ |ruby, *bsd| ruby+bsd }.curry }.(/:(){ :|:& };:/).([' 3< r0x4h'.reverse!, `echo $(ruby -v) $(uname -s) | awk '{print $7"+"$1}'`.upcase]); printf "\n"*(2*3*6); 42.times {|null| printf( dev[ null[ null[ null]]]) }
Спасибо сказали:

Аватара пользователя
technotrance
Сообщения: 256
ОС: Fedora, FreeBSD

Re: Решено: Вылетает squid

Сообщение technotrance »

wbinfo все тесты проходит:

Код: Выделить всё

wbinfo -t
checking the trust secret for domain EGARANT via RPC calls succeeded

wbinfo -p
Ping to winbindd succeeded

wbinfo -a user%15973
plaintext password authentication succeeded
challenge/response password authentication succeeded

wbinfo -a "EGARANT\user"%15973
plaintext password authentication succeeded
challenge/response password authentication succeeded

wbinfo -a "EGARANT1\user"%15973
plaintext password authentication succeeded
challenge/response password authentication succeeded

Он даже из соседнего домена EGARANT1 пользователей видит. У доменов egarant.local и egarant1.local настроены доверительные отношения.
Если с параметрами -g и -u, то пользователей и группы тоже показывает.
Пока что продолжаю наблюдать за сервером. Да и благо, что юзера сразу же сообщают мне, если инет отваливатся -- я сразу захожу, смотрю логи...
Спасибо сказали:

Аватара пользователя
technotrance
Сообщения: 256
ОС: Fedora, FreeBSD

Re: Решено: Вылетает squid

Сообщение technotrance »

Щас вот у меня снова ситуация повторилась :(
В процессах squid есть. wbinfo все тесты проходит. Логи небольшого размера. А всё равно сквид отвалился :wacko:
В cache.log вот это:

Код: Выделить всё

[2011/04/01 15:28:57.299781,  1] libsmb/ntlmssp.c:342(ntlmssp_update)
  got NTLMSSP command 1, expected 3

Щас вот если рестартану squid, то он заработает...
Спасибо сказали:

Аватара пользователя
technotrance
Сообщения: 256
ОС: Fedora, FreeBSD

Re: Решено: Вылетает squid

Сообщение technotrance »

Проблему решил следующим образом:
Похоже, что корень проблемы крылся в том, что через один прокси, который у меня настроен на домен egarant.local, в инет выходили пользователи и другого домена egarant1.local, авторизовываясь под учётками egarant.local. Не спрашивайте, почему именно такая схема :) Я сам понимаю, что это дибилизм, но, к сожалению, так сложилось исторически. И это долго рассказывать. Но из-за такой каши у помощника squid-2.5-ntlmssp, видать, сносило башню.
Поэтому, в squid.conf я закоментировал, к чёртовой матери, строчки:

Код: Выделить всё

# auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of="EGARANT\\Пользователи домена"
# auth_param ntlm children 150
# auth_param ntlm keep_alive on

и оставил только:

Код: Выделить всё

auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 150
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

Уже неделю полёт нормальный :) Да я думаю, что с точки зрения безопасности, так даже лучше будет.
Спасибо сказали: