demon.pmi.basnet.by - авторская страница разработчика сайтов.

Установка и настройка прозрачного squid3 с пулами задержки

Устанавливаем Squid3 (платформа Lenny, работаем под root-ом)


server:/# apt-get install squid3

В моем случае установился SQUID 3.0.STABLE8. Останавливаем его


server:/# /etc/init.d/squid3 stop

Файл конфигурации хранится в /etc/squid3/squid.conf. Для не сильно посвященных файл внушает легкий трепет количеством своих опций. Однако по существу не закомментированных опций в этом файле не очень то и много. Для отбора всех не закомментированных опций из конфигурационного файла воспользуемся несложной командой:


server:/# grep -v "^#" /etc/squid/squid3.conf > clsquid.conf

Посмотрите полученный файл clsquid.conf:


acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
icp_access deny all
htcp_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?
access_log /var/log/squid3/access.log squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320
icp_port 3130
coredump_dir /var/spool/squid3

Негусто да? Вот и будем доводить SQUID3 до прозрачного ума… Итак по порядку следования включаемых(изменяемых) опций:


acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8

acl homenet src 192.168.1.0/24		                #наша сеть
acl goodip src "/etc/allow.txt"		                #всех кому можно ходить в Интернет
acl perring src "/etc/squid3/perring.txt"	        #пиринговая сеть
acl bad_url url_regex "/etc/squid3/advare.txt"	        #реклама
acl directurl url_regex "/etc/squid3/nocache.txt"	#избранные сайты
acl timeless time 7:00-23:00				#рабочее время
acl media urlpath_regex -i \.mp3$ \.asf$ \.wma$ \.avi$ \.mov$	#медийный контент

# порты для прозрачного проксирования только 
acl SSL_ports port 443		# HTTP(s)
acl Safe_ports port 80		# http
acl Safe_ports port 443		# https
acl Safe_ports port 1025-65535	# unregistered ports
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny bad_url
http_access allow goodip	# открываем Интернет кому можно
http_access allow localhost
http_access deny all		# остальных «в сад»
icp_access deny all
htcp_access deny all

http_port 3128 transparent		# волшебное слово – прозрачный!

Тэг(опция): hierarchy_stoplist
Список слов, правил, которые объект будет обрабатываться непосредственно этим кэшом. Этот параметр используется, чтобы не запрашивать соседние кэши для определенных объектов.
hierarchy_stoplist cgi-bin ?
Тэг(опция): no_cache
Список ACL элементов, которые (если они согласованы) становятся причиной непринятия кэша, и ответ не будет кэширован. Другими словами, используйте этот параметр, чтобы определенные параметры никогда не кэшировались. Вы можете использовать слово «ОТКЛОНИТЬ», чтобы указать ACL имена, которые НЕ должны быть кэшированы. Другими словами, - объявляет ответы, которые не должны кешироваться!
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
no_cache deny directurl
Тэг(опция): always_direct
Использование: always_direct allow|deny [ ! ]aclname
В данном тэге Вы можете указать элементы ACL, чтобы определить запросы, которые будут ВСЕГДА НАПРЯМУЮ отправляться непосредственно серверам происхождения... Тэг контролирует, какие запросы всегда должны посылаться напрямую к серверу назначения! Не путайте с директивой no_cache... Эта директива не отменяет кеширования ответов, а только заставляет сквид напрямую пересыласть запросы к удаленным серверам. Многие путаются)
always_direct allow directurl
Тэг(опция): cache_mem(в байтах)
Этот параметр не указывает максимальный размер, а только устанавливает границу на дополнительную память squid. или используется как кэш памяти объектов. Squid использует память для других вещей – для перемещаемых объектов, горячих объектов, отрицательно-кэшированных объектов. Данные для этих объектов хранятся в 4КБ блоках. Этот параметр определяет идеальную верхнюю границу всего размера расположенных 4 КБ блоков. Перемещаемые объекты имеют самый высокий приоритет. Если для входящих данных необходима дополнительная память, отрицательно-кэшированные и горячие объекты будут удалены. Другими словами, отрицательно-кэшированные и горячие объекты заполняют неиспользованную память, ненужную для перемещаемых объектов. Понятно, что если обстоятельства требуют, эта граница может быть превышена. Особенно, если скорость входящего запроса требует более, чем “cache_mem” память для размещения перемещаемых объектов, Squid превысит эту границу, чтобы удовлетворить новые запросы. Если нагрузка уменьшается, блоки будут освобождаться до тех пор, пока не будет достигнута отметка уровня. После этого блоки будут использоваться для хранения горячих объектов. Значение, заданное по умолчанию: cache_mem 8MB
cache_mem 64 MB
Тэг(опция): maximum_object_size
Объекты, размер которых превышает данный размер, НЕ будут сохранены на диске. Значение указано в килобайтах и значение, заданное по умолчанию, 4 мегабайта. Если вы хотите получить высокую результативность БИТОВ, вам придется увеличить его. (один 32 мегабайтовый объект приравнивается к 3200 10 килобайтам). Если вы хотите увеличить скорость еще больше, чтобы сохранить ширину полосы пропускания, вам следует оставить ее низкой.
Значение, заданное по умолчанию: maximum_object_size 4096KB
maximum_object_size 8192 KB
Тэг(опция): maximum_object_size_in_memory
Объекты, размер которых превышает установленный, не будут сохраняться в памяти КЭШа, Следует установить более высокое значение, чтобы иметь к ним частый доступ и улучшить режим работы, пока cache_mem.
Значение, заданное по умолчанию: maximum_object_size_in_memory 8 KB
maximum_object_size_in_memory 512 KB
Тэг(опция): cache_dir
Вы можете указать несколько cache_dir строк, чтобы распределить кэш среди различных разделов диска. Тип определяет, какую систему хранения использовать. Только “ufs” задана по умолчанию. Чтобы использовать любую другую систему хранения, смотрите –enable-storeio configure опцию.
«Каталог» - каталог высшего уровня, где будут храниться файлы подкачки КЭШа. Если вы хотите использовать весь диск для кэширования, это может быть установленный каталог. Каталог должен существовать и записываться Squid. Squid НЕ создает этот каталог для вас
ufs тип хранения: “ufs” – старый хорошо известный формат хранения, который всегда существует.
cache_dir ufs Directory-Name Mbytes L1 L2 [options] «Мегабайты» - количество памяти на диске (MB), которая используется в этом каталоге. Значение, заданное по умолчанию, 100 MB. Измените его в соответствии с вашей конфигурацией. НЕ указывайте здесь размер дисковода. Если вы хотите, чтобы Squid использовал весь дисковод, вычтите 20% и используйте это значение.
«Уровень-1» - количество подкаталогов первого уровня, которые будут создаваться под названием «Каталог». Значение, заданное по умолчанию, 16.
«Уровень-2» - количество подкаталогов второго уровня, которые будут создаваться под каждым каталогом первого уровня.
Значение, заданное по умолчанию: cache_dir ufs /var/spool/squid 100 16 256
сache_dir ufs /var/spool/squid3 15000 16 256
Тэг(опция): maximum_object_size
Максимальный размер объекта сохраняемый на диск (частенько не слушается и сохраняет объекты раза в 2-3 большие)
maximum_object_size 8192 KB
Тэг(опция): access_log, cache_store_log, pid_filename
Регистрирует активность запроса клиента. Содержит запись для каждого полученного HTTP и ICP запроса. Чтобы блокировать этот параметр, введите “none”. PID файл хрянящий номер процесса squid3 - может понадобится при написании скриптов bash.
access_log /var/log/squid3/access.log squid
cache_store_log none
pid_filename /var/run/squid3.pid
Тэг(опция): debug_options
Опции регистрации устанавливаются как раздел, уровень, где каждый исходный файл рассматривается как отдельный раздел. Нижние уровни в результате приводят к меньшему выпуску, полное устранение неполадок (уровень 9) может привести к созданию очень большого файла регистрации, так что будьте осторожны. (за несколько минут до 1GB). Волшебное слово «ALL» устанавливает уровни исправления ошибок для всех разделов. Мы рекомендуем использовать «ALL,1». Для получения подробной информации о работе squid3, срабатывании правил и прочем включим более подробный лог: debug_options ALL,1 28,9 позднее можно вернуть на ALL,1
Значение, заданное по умолчанию: debug_options ALL, 1
debug_options ALL,1
Тэг(опция): ftp_user
Если вы хотите, чтобы анонимный пароль стал более информативным (и разрешить использование picky ftp серверы), установите его на что-то необходимое для вашего домена, например, wwwuser@somewhere/net. Причиной того, что по умолчанию задано не использовать домен, является то, что запрос может быть сделан от лица пользователя в любом домене, в зависимости от того как используется кэш. Некоторые ftp серверы действуют, если адрес электронной почты действителен (например, perl.com).
Значение, заданное по умолчанию: ftp_user Squid@
ftp_user guest@
Тэг(опция): ftp_passive
Если ваш межсетевой экран не позволяет Squid использовать пассивные подключения, выключите эту опцию.
Значение, заданное по умолчанию: ftp_passive on
ftp_passive on
Тэг(опция): ftp_sanitycheck
По причинам безопасности и целостности данных Squid по умолчанию выполняет санитарные проверки адресов FTP подключений данных, гарантируя, что данные поступят на запрашиваемый сервер. Если вы хотите разрешить FTP соединения к серверам, используя другие IP адреса, отключите эту опцию.
Значение, заданное по умолчанию: ftp_sanitycheck on
ftp_sanitycheck on
Тэг(опция): refresh_pattern
применение: refresh_pattern [-i] regex min percent max [options]
По умолчанию заданы регулярно использующиеся выражения CASE-SENSITIVE.Чтобы сделать их такими, используйте –I опцию.
“Min” – время (в минутах) для объекта без выраженного истечения времени. Рекомендуемое значение – 0, любое большее значение может привести к динамическому применению, которое может быть кэшировано с ошибками до тех пор, пока конструктор прикладных программ не примет соответствующие меры.
“Percent” – процентное отношение возраста объекта (время с последнего возраста преобразований), объект без явно выраженного времени истечения будет считаться новым.
“Max” – верхняя граница, как долго объекты без ярко выраженного срока истечения будут считаться новыми. Опции: override-expire, override-lastmod, reload-into-ims, ignore-reload
override-expire обязывает использовать минимальный возраст, даже если сервер отправляет Expires заголовок. Если это происходит, НАРУШАЮТСЯ требования HTTP стандарта. Разрешая данный параметр, вы несете ответственность за проблемы, которые он вызывает.
override-lastmod обязывает использовать минимальный возраст даже тех объектов, которые были недавно изменены. reload-into-ims изменяет запросы клиента. Если это происходит, НАРУШАЮТСЯ требования HTTP стандарта. Разрешая данный параметр, вы несете ответственность за проблемы, которые он вызывает.
ignore-reload игнорирует заголовок. Если это происходит, НАРУШАЮТСЯ требования HTTP стандарта. Разрешая данный параметр, вы несете ответственность за проблемы, которые он вызывает.
refresh_pattern строки проверяются в порядке, указанном здесь. Используется первая соответствующая запись. Если нет соответствующих записей, используется значение, заданное по умолчанию.
Обратите внимание, вы не должны комментировать все строки, заданные по умолчанию, если вы хотите изменить их. Значение, заданное по умолчанию, активно в том случае, если ни одна не используется.
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320
Тэг(опция): quick_abort_min (в килобайтах), quick_abort_max (в килобайтах), quick_abort_pct (в процентах)
Кэш, заданный по умолчанию, продолжает скачивание отброшенных запросов, которые почти завершены (осталось меньше 16 килобайтов). Это нежелательно использовать на медленных (например, SLIP) строках и/или очень занятых кэшах. Нетерпеливые пользователи могут объединить дескриптор файла и пропускную способность с помощью постоянных запросов и немедленного прекращения скачивания. Когда пользователь преждевременно прекращает запрос, Squid проверяет значения и количество данных, переданных раннее.
Если передача составляет меньше килобайт, чем “quick_abort_min”, она прервет поиск.
Если передача составляет больше килобайт, чем “quick_abort_pct”, она закончит поиск.
Если вы не хотите продолжать возобновление после прекращения работы клиента, установите “quick_abort_min” и “quick_abort_max” параметры на 0 килобайтов. Если вы хотите продолжить возобновление после кэширования, установите “quick_abort_min” на -1 килобайт.
Значения, заданные по умолчанию:
quick_abort_min 16 KB
quick_abort_max 16 KB
quick_abort_pct 95
Тэг(опция): negative_ttl time-units
Время существования (TTL) для неполучившихся запросов. Определенные виды ошибок (таких как «в соединении отказано» и «404 не найден») отрицательно кэшированы для количества времени для конфигурации. Время, заданное по умолчанию: 5 минут. Обратите внимание, что это значение отличается от отрицательного кэширования DNS поисков.
Значение, заданное по умолчанию:
negative_ttl 5 minutes
Тэг(опция): positive_dns_ttl time-units
Верхняя граница времени, за которое Squid будет кэшировать положительные DNS ответы. Время, заданное по умолчанию: 6 часов (360 минут), Эта директива должна быть установлена на большее значение, чем negative_dns_ttl.
Значение, заданное по умолчанию:
positive_dns_ttl 6 hours
Тэг(опция): negative_dns_ttl time-units
Время существования (TTL) для отрицательного кэширования неудачных DNS поисков. Это приводит к установке нижней границы кэширования на положительных поисках. Минимальное значение – 1 секунда, и не рекомендуется использовать больше 10
Значение, заданное по умолчанию:
negative_dns_ttl 1 minutes
Тэг(опция): request_header_access, header_replace
Делаем наш прокси относительно анонимным. Только учтите, что если вы неверно настроите правила доступа, то получите бесплатный релей для кучи желающих злоумышленников из сети Интернет. Последняя строчка (header_replace) может выдавать запрашивающим заведомо ложную информацию о вашем браузере, например Вы можете указать lynx (lynx/2.8.6). Осторожнее с этим, потому что есть много сайтов анализирующие ваш браузер для корректного отображения страниц.
request_header_access From deny all
request_header_access Referer deny all
request_header_access Server deny all
request_header_access User-Agent deny all
request_header_access WWW-Authenticate deny all
request_header_access Link deny all
header_replace User-Agent Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.5.24 Version/10.53
Практика показала, что подмена истинного браузера на что-либо заведомо ложное крайне негативно отражается на работе ряда интернет-сайтов. В частности, указав текcтовый браузер lynx у меня перестал работать сайт open.by, "перекосило" новую почтовую службу TUT.by (та которая на Google), отказала половина функционала сайта Одноклассники (Odnoklassniki.ru - всплывающие меню, выставление оценок), завязанного на JScript и несколько других...
Вылечило указание нормального браузера, взятого из http://ru.wikipedia.org/wiki/User_Agent, в частности:
header_replace User-Agent Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.5.24 Version/10.53
Тэг(опция): half_closed_clients
Некоторые клиенты могут закрыть сторону отправки их TCP подключений, в то время как сторона получения открыта. Иногда Squid не сообщает разницу между наполовину закрытым и полностью закрытым TCP подключением. По умолчанию, наполовину закрытые соединения клиента остаются открытыми до тех пор, пока прочитывание или запись на двунаправленном канале возвращает ошибку. Переключите эту опцию на “off” и Squidнемедленно закроет подключение клиента, когда прочитывание вернет “no more data to read” («нет больше данных для чтения»).
Значение, заданное по умолчанию:
half_closed_clients on
Тэг(опция): cache_effective_user, cache_effective_group
Логично, что нельзя чтобы такая довольно уязвимая служба как Squid работала от имени root-a! Для этого есть два параметра в файле конфигурации. При установке Squid3 автоматически создается пользователь proxy. Вот его и необходимо использовать.
cache_effective_user proxy
cache_effective_group proxy
Тэг(опция): visible_hostname
Скорректируем также видимое снаружи имя хоста
visible_hostname server.ex
Тэг(опция): delay_pools, delay_class, delay_access, delay_parameters
Настроим пулы задержки для честной раздачи интернета (DELAY POOL). С учетом того, что наш канал 2Мб\сек. (256 КБ/сек), сделаем 3 пула:
Правило №1 Избранные сайты - без ограничений! Предназначено для того, чтобы Ваши любимые сайты грузились всегда на максимальной скорости и безо всяких ограничений.
Правило №2 Ночью - Интернет без границ! Снимает ВСЕ ограничения на скачивания в ночной период (с 23.00 до 7 утра). Без комментариев.
Правило №3 Первый мегабайт (1МБ) скачивается на максимальной скорости, всё что выше - 35% от канала. Действует в остальное время (кроме п.2) и кроме избранных сайтов (п.1). Предназначено для ускорения серфинга (простого просмотра страниц) простым смертным. Для закачки канал обрезается вдвое!
delay_pools 3
# 1 класс - для избранных сайтов вся сеть качает без ограничений
delay_class 1 1
delay_access 1 allow piring
delay_access 1 allow directurl
delay_parameters 1 -1/-1
delay_access 1 deny all
# 2 класс - в период с 23.00 по 7.00 вся сеть качает без ограничений
delay_class 2 1
delay_access 2 allow !timeless
delay_parameters 2 -1/-1
delay_access 2 deny all
# 3 класс - до 1МБ загружают весь канал без ограничений, свыше 1МБ только 35% от канала
delay_class 3 2
delay_access 3 allow goodip
delay_parameters 3 -1/-1 90000/1000000
delay_access 3 deny all
Тэг(опция): icp_port
Порт для управления КЭШем, по умолчанию:
icp_port 3130
Тэг(опция): error_directory
Изменим язык сообщение об ошибках и служебных страницах на русский:
error_directory /usr/share/squid3/errors/Russian-koi8-r
Тэг(опция): hosts_file
Расположение базы данных имени IP адреса местного главного компьютера, Многие операционные системы имеют такой файл: под Un*X задано по умолчанию в /etc/hosts. Файл содержит отдельные определения на новой строке, в форме Ip_address_in_dotted_form имени [name…], имена разделены пробелами. Строки, которые начинаются со знака #, являются комментариями. Файл проверяется при запуске и во время конфигурации. Если он установлен на “none”, он не будет проверяться. Если используется append_domain, домен будет добавлен в локальный домен (т.е. не содержит точки).
hosts_file /etc/hosts
Тэг(опция): forwarded_for
Запретим пересылку в заголовке адресов клиентов. Сделано, чтобы не «светить» серые ip адреса нашей локальной сети
forwarded_for off
Тэг(опция): coredump_dir
Директория куда будет писаться дамп программы в случае критической ошибки и последующего вылета сквида
coredump_dir /var/spool/squid3

В итоге, если теперь применить скрипт отбора опций из файла конфигурации, мы получим итоговый конфигурационный файл


server:/# grep -v "^#" /etc/squid/squid3.conf > clsquid.conf

acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8

acl homenet src 192.168.1.0/24
acl goodip src "/etc/allow.txt"
acl perring src "/etc/squid3/perring.txt"
acl bad_url url_regex "/etc/squid3/advare.txt"
acl directurl url_regex "/etc/squid3/nocache.txt"
acl timeless time 7:00-23:00
acl media urlpath_regex -i \.mp3$ \.asf$ \.wma$ \.avi$ \.mov$

acl SSL_ports port 443
acl Safe_ports port 80		# http
acl Safe_ports port 443		# https
acl Safe_ports port 1025-65535	# unregistered ports
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny bad_url
http_access allow goodip
http_access allow localhost
http_access deny all
icp_access deny all
htcp_access deny all

http_port 3128 transparent

hierarchy_stoplist cgi-bin ?

acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
no_cache deny directurl

always_direct allow directurl

cache_mem 64 MB
maximum_object_size_in_memory 512 KB
cache_dir ufs /var/spool/squid3 15000 16 256
maximum_object_size 8192 KB

access_log /var/log/squid3/access.log squid
cache_log /var/log/squid3/cache.log
cache_store_log none

pid_filename /var/run/squid3.pid
debug_options ALL,1

refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern (cgi-bin|\?)	0	0%	0
refresh_pattern .		0	20%	4320
quick_abort_min 16 KB
quick_abort_max 16 KB
quick_abort_pct 95
negative_ttl 5 minutes
positive_dns_ttl 6 hours
negative_dns_ttl 1 minutes

request_header_access From deny all
request_header_access Referer deny all
request_header_access Server deny all
request_header_access User-Agent deny all
request_header_access WWW-Authenticate deny all
request_header_access Link deny all
header_replace User-Agent Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.5.24 Version/10.53

cache_effective_user proxy
cache_effective_group proxy
visible_hostname server.ex

delay_pools 3

delay_class 1 1
delay_access 1 allow perring
delay_access 1 allow directurl
delay_parameters 1 -1/-1
delay_access 1 deny all

delay_class 2 1
delay_access 2 allow !timeless
delay_parameters 2 -1/-1
delay_access 2 deny all

delay_class 3 2
delay_access 3 allow goodip
delay_parameters 3 -1/-1 90000/1000000
delay_access 3 deny all

icp_port 3130
error_directory /usr/share/squid3/errors/Russian-koi8-r

hosts_file /etc/hosts
forwarded_for off

coredump_dir /var/spool/squid3
Обращаю Ваше внимание, что отбор командой grep незакоментированных опция, - я производил исключительно для удобства (и в другой файл)... Конечно, и с "вычищенным" конфигом сквид будет прекрасно работать без сбоев. Но!, я обычно оставляю все коментарии - для себя же, - на будущее. Но как поступите Вы - решайте самостоятельно!
Как заставить весь HTTP трафик повернуть на сквид (заворачивание трафика) Вы можете узнать в статье Настраиваем IpTables для шлюза. Если быть более точным - за это отвечает только одно правило Iptables:
#Заворачиваем весь остальной трафик по 80 порту на SQUID
$IPT -t nat -A PREROUTING -i eth0 -p tcp -s $INTNET -d ! 192.168.1.1 -m multiport --dport 80 -j REDIRECT --to-port 3128

Ваши предложения

Представьтесь, пожалуйста
Электронная почта
Оставьте Ваше сообщение:
#11 Гарри
Почитаю что Вы пишете - дом2 вспоминается :)
#10 zoogeografia(точка)ru
Очень признателен, по-настоящему полезная информация.
#9 Гималаи
Тема старая конечно , но прочитал с удовольствием :)
#8 Савва
И как автору не жалко столько времени на написание статей тратить, мы конечно очень благодарны, но вот я лично на такой альтруизм не способен :)
#7 Виталий Павленко
Большое спасибо. Давно такое искал :)
#6 alikos
Занимательная тема, продолжайте. Иногда нахожу ответы, которые получить самому просто реально не хватает времени. Благодарю!
#5 Олег
Хех... :) Почаще пишите смайлики, а то всё так как будто серъёзно :)
#4 Алексей Рубин
Что-то у меня в Firefox дизайн вашего блога расползается...
#3 Федор Малкин
Премного благодарен за занимательную точку зрения. Я с ней не совсем согласен, но она имеет право быть.
#2 BaLaM
Люблю посты в таком духе! Премного благодарен :)
#1 Василий Петров
Спасибо. Прочитал с огромным интересом, и вообще полезный у Вас блог