{{tag>squid proxy rokomnadzor blocklist}}

====== Squid ======

  * [[https://gist.github.com/search?p=3&q=squid.conf&utf8=%E2%9C%93|Примеры настроек]]
  * [[http://break-people.ru/cmsmade/index.php?page=articles_squid_practice|Советы]]

===== Параметры =====

  * src: IP-адрес источника (клиент) 
  * dst: IP-адрес назначения (сервер) 
  * myip: локальный IP-адрес клиентского соединения 
  * srcdomain: имя домена источника (клиент) 
  * dstdomain: имя домена назначения (сервер) 
  * srcdom_regex: шаблон регулярного выражения источника (клиент) 
  * dstdom_regex: шаблон регулярного выражения назначения (сервер) 
  * time: время дня и день недели 
  * url_regex: шаблон регулярного выражения для URL 
  * urlpath_regex: шаблон регулярного выражения для части URL, исключая протокол и имя хоста 
  * port: номер порта назначения (сервер) 
  * myport: номер локального порта, куда подключается клиент 
  * proto: тип протокола передачи (http, ftp, etc) 
  * method: метод HTTP-запроса (get, post, etc) 
  * browser: шаблон регулярного выражения, совпадающего с заголовком user-agent из запроса 
  * ident: строка совпадения с именем пользователя 
  * ident_regex: шаблон регулярного выражения имени пользователя 
  * src_as: номер Автономной Системы источника (клиент) 
  * dst_as: номер Автономной Системы назначения (сервер) 
  * proxy_auth: аутентификация пользователя через внешний процесс 
  * proxy_auth_regex: регулярное выражение аутентификации пользователя через внешний процесс 
  * snmp_community: строка SNMP-сообщества 
  * maxconn: ограничение максимального кол-ва соединений с одного клиентского IP-адреса 
  * req_mime_type: шаблон регулярного выражения для заголовка content-type запроса 
  * arp: Ethernet (MAC)-адрес 

===== Darknet (onion) + i2p + hosts =====

==== Обход запрета роскомнадзора ====

nano /etc/squid/getblocklist.sh
<code bash>
#!/bin/bash
# git clone https://github.com/zapret-info/z-i.git
curl -s -X GET -L https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv > /etc/squid/blocklist.csv
URL_LIST=`cat /etc/squid/blocklist.csv | csvtool -t ';' col 2 - | sed -e '/^[0-9\.]*$/d' -e '/^[0-9\.a-z-]*$/!d' | \
sed -e 's/^.*\.\([a-z0-9\-]\{2,63\}\.[a-z0-9\-]\{2,63\}\)$/\1/' | sort | uniq 2>/dev/null`;
cat /dev/null > /etc/squid/eais.list 2>/dev/null;
for URL in $URL_LIST; do
        echo $URL | sed -e 's/\./\\\./g' -e 's/^/^http(s)?:\\\/\\\/([a-zA-Z0-9]+\\.)?/g' -e 's/$/.*$/g' >> /etc/squid/eais.list 2>/dev/null;
done;
/usr/sbin/squid3 -k reconfigure
</code>

==== cron ====

crontab -e
<code bash>
1 2 * * * /bin/bash /etc/squid/getblocklist.sh
</code>
==== squid.conf ====

nano /etc/squid/squid.conf
<code bash>
########################################################
# ОСНОВНЫЕ НАСТРОЙКИ SQUID
########################################################

# Отключение проверки имён хостов
check_hostnames off

# Определение локальных сетей (RFC 1918 и др.)
acl localnet src 0.0.0.1-0.255.255.255     # "this" network (LAN)
acl localnet src 10.0.0.0/8                    # RFC 1918 private
acl localnet src 100.64.0.0/10               # RFC 6598 CGN
acl localnet src 169.254.0.0/16               # RFC 3927 link-local
acl localnet src 172.16.0.0/12               # RFC 1918 private
acl localnet src 192.168.0.0/16              # RFC 1918 private
acl localnet src fc00::/7                      # RFC 4193 private
acl localnet src fe80::/10                     # RFC 4291 link-local

# ACL для блокируемых/специальных ресурсов
acl russia_block_list url_regex "/etc/squid/eais.list"
acl onion_list url_regex -i .*://.*\.onion\/.*

# ACL для разделения HTTP/HTTPS .i2p
acl i2p_http url_regex -i ^http://.*\.i2p(/.*)?$
acl i2p_https url_regex -i ^https://.*\.i2p(/.*)?$

########################################################
# НАСТРОЙКА PEER-СЕРВЕРОВ (UPSTREAM PROXIES)
########################################################

# HTTP .i2p → порт 4444
cache_peer 192.168.1.131 parent 4444 4444 no-digest \
    protocol=http \
    name=i2p_http_peer \
    connect-timeout=15 \
    request-timeout=60 \
    dead-peer-timeout=30 \
    round-robin

# HTTPS .i2p → порт 4445
cache_peer 192.168.1.131 parent 4445 4445 no-digest \
    protocol=https \
    name=i2p_https_peer \
    connect-timeout=15 \
    request-timeout=60 \
    dead-peer-timeout=30 \
    round-robin

# privoxy peer (порт 8118)
cache_peer 192.168.1.131 parent 8118 8118 no-digest \
    protocol=http \
    name=privoxy_peer \
    connect-timeout=15 \
    request-timeout=60 \
    dead-peer-timeout=30 \
    round-robin

########################################################
# ПРАВИЛА ДОСТУПА К PEER-СЕРВЕРАМ
########################################################

cache_peer_access i2p_http_peer allow i2p_http
cache_peer_access i2p_https_peer allow i2p_https
cache_peer_access privoxy_peer allow onion_list
cache_peer_access privoxy_peer allow russia_block_list

########################################################
# ПРАВИЛА НАПРАВЛЕНИЯ ЗАПРОСОВ
########################################################

# never_direct: всегда использовать peer для указанных ACL
never_direct allow i2p_http
never_direct allow i2p_https
never_direct allow onion_list
never_direct allow russia_block_list
never_direct deny localnet

# always_direct: никогда не использовать peer для указанных ACL
always_direct deny i2p_http
always_direct deny i2p_https
always_direct deny onion_list
always_direct deny russia_block_list
always_direct allow localnet

########################################################
# HTTP-ДОСТУП И БЕЗОПАСНОСТЬ
########################################################

# Разрешить доступ из локальных сетей
http_access allow localnet

# Файл hosts для разрешения имён
hosts_file /etc/squid/hosts

# Порты для безопасных соединений
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
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 deny !Safe_ports

# Запретить CONNECT к небезопасным SSL-портам
http_access deny CONNECT !SSL_ports

# Доступ для менеджера (только локально)
http_access allow localhost manager
http_access deny manager

# Включить дополнительные конфиги
include /etc/squid/conf.d/*

# Разрешить локальный доступ
http_access allow localhost

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

########################################################
# ПОРТ И ДИРЕКТОРИИ
########################################################

# Основной HTTP-порт прокси
http_port 3128

# Директория для coredump
coredump_dir /var/spool/squid

########################################################
# НАСТРОЙКИ КЭШИРОВАНИЯ
########################################################

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

########################################################
# ДОПОЛНИТЕЛЬНЫЕ НАСТРОЙКИ (ОПЦИОНАЛЬНО)
########################################################

# Уровень отладки (раскомментировать при необходимости)
# debug_options ALL,1 33,2

# Логирование доступа (стандартный формат)
access_log /var/log/squid/access.log

# Логирование кэша
cache_log /var/log/squid/cache.log

# Размер кэша (пример: 10 ГБ)
# cache_dir ufs /var/spool/squid 10240 16 256

# Максимальный размер объекта в кэше (например, 100 МБ)
# maximum_object_size 102400 KB

# DNS-серверы (если требуется)
# dns_nameservers 8.8.8.8 1.1.1.1
# dns_timeout 15 seconds
</code>

  - cache_peer_access - какие(чьи) запросы к доменам, порождают соединение, проходящее через соседский прокси
  - never_direct - какие(чьи) запросы, НИКОГДА НЕ БУДУТ идти напрямую в Интернет
  - always_direct - какие(чьи) запросы, будут ВСЕГДА идти напрямую в Интернет

===== Удаление комментариев =====

<code bash>
$ cat /etc/squid/squid.conf | grep "^[^#;]"
</code>
===== Перенаправление на другой сайт =====

<code>
acl redirect url_regex czx.to
http_access deny redirect
deny_info http://video.czx.to redirect
</code>