Настройка squid и маршрутизация трафика.

Автор korsavitaliy, 15 октября 2018, 19:36:42

« назад - далее »

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

korsavitaliy


acl localnet src 192.168.0.0/24
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

dns_nameservers 8.8.8.8
http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access allow localhost manager
http_access deny manager

http_access allow localnet
http_access allow localhost
http_access deny all

#http_port 3128
#прозрачный порт указывается опцией intercept
http_port 192.168.10.1:3128 intercept options=NO_SSLv3:NO_SSLv2

http_port 192.168.10.1:3128 options=NO_SSLv3:NO_SSLv2

#и наконец, указываем HTTPS порт с нужными опциями
https_port 192.168.10.1:3129 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/squidCA.pem

always_direct allow all
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER


sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB

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
cache_dir aufs /var/spool/squid 2048 49 256
maximum_object_size 61440 KB
minimum_object_size 3 KB

cache_swap_low 90
cache_swap_high 95
maximum_object_size_in_memory 512 KB
memory_replacement_policy lru

#logfile_rotate 31
logfile_daemon /usr/lib/squid/log_db_daemon
access_log daemon:/127.0.0.1:3306/base/table/user/password squid

Имеется такой конфиг, делал по статье https://habr.com/post/267851/ как и указано сгенерировал pem файл
openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout squidCA.pem -out squidCA.pem
при запуске squid ругается на эти строки

http_port 192.168.10.1:3128 intercept options=NO_SSLv3:NO_SSLv2

http_port 192.168.10.1:3128 options=NO_SSLv3:NO_SSLv2

#и наконец, указываем HTTPS порт с нужными опциями
https_port 192.168.10.1:3129 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/squidCA.pem

Суть в том, что необходимо реализовать автоматическое окно регистрации hotspot. Для этого пробывал http_responce_code(511) , но это не сработало captive portal detection не обнаружился.

endru

Цитата: korsavitaliy от 15 октября 2018, 19:36:42при запуске squid ругается на эти строки
логи где?
Цитата: korsavitaliy от 15 октября 2018, 19:36:42http_port 192.168.10.1:3128 intercept options=NO_SSLv3:NO_SSLv2

http_port 192.168.10.1:3128 options=NO_SSLv3:NO_SSLv2
2 строки в конфиге с одинаковым портом?

korsavitaliy

Извиняюсь там вышла опечатка.

-- Начат процесс запуска юнита squid.service.
окт 16 11:05:58 debian squid[12672]: Bungled /etc/squid/squid.conf line 1368: http_port 192.168.10.1:3128 intercept options=NO_SSLv3:NO_SSLv2
окт 16 11:05:58 debian squid[12677]: Bungled /etc/squid/squid.conf line 1368: http_port 192.168.10.1:3128 intercept options=NO_SSLv3:NO_SSLv2
окт 16 11:05:58 debian squid[12664]: FATAL: Unknown http_port option 'options=NO_SSLv3:NO_SSLv2'. FATAL: Bungled /etc/squid/squid.conf line 1368: http_port 192.168.10.1
окт 16 11:05:58 debian systemd[1]: squid.service: Control process exited, code=exited status=3
окт 16 11:05:58 debian systemd[1]: Failed to start LSB: Squid HTTP Proxy version 3.x.
-- Subject: Ошибка юнита squid.service
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- Произошел сбой юнита squid.service.
--
-- Результат: failed.
окт 16 11:05:58 debian systemd[1]: squid.service: Unit entered failed state.
окт 16 11:05:58 debian systemd[1]: squid.service: Failed with result 'exit-code'.
окт 16 11:06:22 debian systemd[1]: Starting LSB: Squid HTTP Proxy version 3.x...
-- Subject: Начинается запуск юнита squid.service
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- Начат процесс запуска юнита squid.service.
окт 16 11:06:22 debian squid[12701]: Bungled /etc/squid/squid.conf line 1368: http_port 192.168.10.1:3128 intercept options=NO_SSLv3:NO_SSLv2
окт 16 11:06:22 debian squid[12706]: Bungled /etc/squid/squid.conf line 1368: http_port 192.168.10.1:3128 intercept options=NO_SSLv3:NO_SSLv2
окт 16 11:06:22 debian squid[12696]: FATAL: Unknown http_port option 'options=NO_SSLv3:NO_SSLv2'. FATAL: Bungled /etc/squid/squid.conf line 1368: http_port 192.168.10.1
окт 16 11:06:22 debian systemd[1]: squid.service: Control process exited, code=exited status=3
окт 16 11:06:22 debian systemd[1]: Failed to start LSB: Squid HTTP Proxy version 3.x.


endru

squid3 -v | grep ssl
или
squid -v| grep ssl
если ничего не вывел, значит собран без ssl, удаляй и делай все по новой.

korsavitaliy

А может есть другие варианты, как заставить клиента автоматически вывести captive network authentication на устройстве, составил все правила в Iptables . если зайти в бразуер то он делает редирект но также только через 80 порт а на 443 ругается бразуер.

#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
#Объявление переменных
export IPT="iptables"
# интерфейс который смотрит в интернет
export WAN=enp2s0
# локальная сеть  vlan
export LAN=vlan10
export LAN_IP_RANGE=192.168.10.0/24
# внешний  IP
export EXT_IP=91.109.224.106
# Очистка всех цепочек iptables
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
# Закрываем изначально ВСЁ (т.е. изначально все что не разрешено - запрещено):
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
# разрешаем локальный траффик для loopback и внутренней сети
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -i $LAN -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A OUTPUT -o $LAN -j ACCEPT
# разрешаем серверу и клиентам dns  dns
$IPT -A INPUT -s 91.109.224.2 -j ACCEPT
# SSH
$IPT -A INPUT -i $WAN -p TCP --dport 22 -j ACCEPT
#новая цепочка
$IPT -N internet -t mangle
$IPT -t mangle -A PREROUTING -i $LAN -j internet
#$IPT -t mangle -A PREROUTING -i $LAN -p tcp -m tcp --dport 80 -j internet
#$IPT -t mangle -A PREROUTING -i $LAN -p tcp -m tcp --dport 443 -j internet
#awk 'BEGIN { FS="\t"; } { system("$IPT -t mangle -A internet -m mac --mac-source "$4" -j RETURN"); }' /var/lib/users /var/lib/users
#маркируем все пакеты
$IPT -t mangle -A internet -j MARK --set-mark 99
# все маркированные пакеты которые идут на 80 порт отправляем на наш сервер
$IPT -t nat -A PREROUTING -i $LAN -p tcp -m mark --mark 99 -m tcp --dport 80 -j DNAT --to-destination 192.168.0.250
$IPT -t nat -A PREROUTING -i $LAN -p tcp -m mark --mark 99 -m tcp --dport 443 -j DNAT --to-destination 192.168.0.250
#http
$IPT -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
#port dns
$IPT -t filter -A INPUT -p udp --dport 53 -j ACCEPT
#drop
$IPT -t filter -A INPUT -m mark --mark 99 -j DROP
#остояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
#Пропускать все уже инициированные соединения, а также дочерние от них
$IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Пропускать новые, а так же уже инициированные и их дочерние соединения
$IPT -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#$IPT -A FORWARD -p all -j ACCEPT
$IPT -A FORWARD -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#$IPT -A INPUT -m mac --mac-source a8:a6:68:6d:93:fa -j ACCEPT
# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# # Отбрасывать все пакеты, которые не могут быть идентифицированы
# и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
# Приводит к связыванию системных ресурсов, так что реальный
# обмен данными становится не возможным.
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
# азрешаем доступ из внутренней сети наружу
$IPT -A FORWARD -i $LAN -o $WAN -j ACCEPT
#Запрещаем доступ снаружи во внутреннюю сеть
$IPT -A FORWARD -i $WAN -o $LAN -j REJECT
#$IPT -A FORWARD -i $LAN -o $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT
#маскарадинг
$IPT -t nat -A POSTROUTING -o $WAN -s $LAN_IP_RANGE -j MASQUERADE
#$IPT -A INPUT -m mac --mac-source a8:a6:68:6d:93:fa -j ACCEPT
# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# # Отбрасывать все пакеты, которые не могут быть идентифицированы
# и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
# Приводит к связыванию системных ресурсов, так что реальный
# обмен данными становится не возможным.
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
# азрешаем доступ из внутренней сети наружу
$IPT -A FORWARD -i $LAN -o $WAN -j ACCEPT
#Запрещаем доступ снаружи во внутреннюю сеть
$IPT -A FORWARD -i $WAN -o $LAN -j REJECT
#$IPT -A FORWARD -i $LAN -o $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT
#маскарадинг
$IPT -t nat -A POSTROUTING -o $WAN -s $LAN_IP_RANGE -j MASQUERADE
# вывод информации о состояние таблиц
route -n
$IPT -L
$IPT -L -v -n
$IPT -L -v -n -t nat
#/sbin/iptables-save  > /etc/iptables.rules



korsavitaliy

#5
Цитата: endru от 16 октября 2018, 10:27:49
squid3 -v | grep ssl
или
squid -v| grep ssl
если ничего не вывел, значит собран без ssl, удаляй и делай все по новой.
Установил Squid Cache: Version 3.5.23 из исходиков с поддержкой ssl, вот и следственно как через заставить подменять сертификат, для обнаружения captive portal detection


acl localnet src 192.168.10.0/24
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 deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access allow localnet
http_access deny all
http_port 192.168.10.1:3128 intercept
http_port 192.168.10.1:3129 intercept intercept ssl-bump cert=/etc/squid/squidCA.pem
ssl_bump peek all
ssl_bump splice all
sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB
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

конфиг Iptables , в данный момент происходит лишь определение для устройств IOs.

#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
#Объявление переменных
export IPT="iptables"
# интерфейс который смотрит в интернет
export WAN=enp2s0
# локальная сеть  vlan
export LAN=vlan10
export LAN_IP_RANGE=192.168.10.0/24
# внешний  IP
export EXT_IP=91.109.224.106
# Очистка всех цепочек iptables
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
# Закрываем изначально ВСЁ (т.е. изначально все что не разрешено - запрещено):
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
# разрешаем локальный траффик для loopback и внутренней сети
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -i $LAN -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A OUTPUT -o $LAN -j ACCEPT
# разрешаем серверу и клиентам dns  dns
$IPT -A INPUT -s 91.109.224.2 -j ACCEPT
# SSH
$IPT -A INPUT -i $WAN -p TCP --dport 22 -j ACCEPT
#новая цепочка
$IPT -N internet -t mangle
$IPT -t mangle -A PREROUTING -i $LAN -j internet
$IPT -t mangle -A internet -j MARK --set-mark 99
# все маркированные пакеты которые идут на 80 порт отправляем на наш сервер
$IPT -t nat -A PREROUTING -i $LAN -p tcp -m mark --mark 99 -m tcp --dport 80 -j DNAT --to-destination 192.168.0.250
$IPT -t nat -A PREROUTING -i $LAN -p tcp -m mark --mark 99 -m tcp --dport 443 -j DNAT --to-destination 192.168.0.250
#http
$IPT -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
#port dns
$IPT -t filter -A INPUT -p udp --dport 53 -j ACCEPT
#drop
$IPT -t filter -A INPUT -m mark --mark 99 -j DROP
#cостояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
#Пропускать все уже инициированные соединения, а также дочерние от них
$IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Пропускать новые, а так же уже инициированные и их дочерние соединения
$IPT -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# # Отбрасывать все пакеты, которые не могут быть идентифицированы
# и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
# Приводит к связыванию системных ресурсов, так что реальный
# обмен данными становится не возможным.
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
# разрешаем доступ из внутренней сети наружу
$IPT -A FORWARD -i $LAN -o $WAN -j ACCEPT
#Запрещаем доступ снаружи во внутреннюю сеть
$IPT -A FORWARD -i $WAN -o $LAN -j REJECT
#маскарадинг
$IPT -t nat -A POSTROUTING -o $WAN -s $LAN_IP_RANGE -j MASQUERADE
# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# # Отбрасывать все пакеты, которые не могут быть идентифицированы
# и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
# Приводит к связыванию системных ресурсов, так что реальный
# обмен данными становится не возможным.
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
# разрешаем доступ из внутренней сети наружу
$IPT -A FORWARD -i $LAN -o $WAN -j ACCEPT
#Запрещаем доступ снаружи во внутреннюю сеть
$IPT -A FORWARD -i $WAN -o $LAN -j REJECT
#$IPT -A FORWARD -i $LAN -o $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT
#маскарадинг
$IPT -t nat -A POSTROUTING -o $WAN -s $LAN_IP_RANGE -j MASQUERADE
# вывод информации о состояние таблиц
route -n
$IPT -L
$IPT -L -v -n
$IPT -L -v -n -t nat
#/sbin/iptables-save  > /etc/iptables.rules