LINUX.ORG.RU

Сообщения Graybit

 

squid + ssl bump

Доброго дня. Ситуация такая - есть vps за бугром, есть домашняя сеть с ubuntu в качестве шлюза. Домашний шлюз и vps соединены openvpn туннелем. Хочется часть сайтов пускать через vps, так как есть ограничения и обходить их установкой на каждую машину vpn не подходит. А те ресурсы, которые не подпадают под «ограничения», чтобы работали напрямую.

squid подошел идеально, но, видимо, я его настроить нормально не могу и работает «кривенько». шлюз с ubuntu(далее просто ubuntu) имеет named, который форвардит запросы на 1.1.1.1 через туннель vps, чтобы в днс траф никто не лазил.

squid version:

squid --version
Squid Cache: Version 4.13
Service Name: squid
Ubuntu linux

This binary uses OpenSSL 1.1.1f  31 Mar 2020. For legal restrictions on distribution see https://www.openssl.org/source/license.html

configure options:  '--build=x86_64-linux-gnu' '--prefix=/usr' '--includedir=${prefix}/include' '--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' '--sysconfdir=/etc' '--localstatedir=/var' '--disable-silent-rules' '--libdir=${prefix}/lib/x86_64-linux-gnu' '--runstatedir=/run' '--disable-maintainer-mode' '--disable-dependency-tracking' 'BUILDCXXFLAGS=-g -O2 -fdebug-prefix-map=/home/builder/ubuntu20/build/squid/squid-4.13=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now ' 'BUILDCXX=g++' '--with-build-environment=default' '--enable-build-info=Ubuntu linux' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--libexecdir=/usr/lib/squid' '--mandir=/usr/share/man' '--enable-inline' '--disable-arch-native' '--enable-async-io=8' '--enable-storeio=ufs,aufs,diskd,rock' '--enable-removal-policies=lru,heap' '--enable-delay-pools' '--enable-cache-digests' '--enable-icap-client' '--enable-ssl' '--enable-follow-x-forwarded-for' '--enable-auth-basic=DB,fake,getpwnam,LDAP,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB' '--enable-auth-digest=file,LDAP' '--enable-auth-negotiate=kerberos,wrapper' '--enable-auth-ntlm=fake,SMB_LM' '--enable-external-acl-helpers=file_userip,kerberos_ldap_group,LDAP_group,session,SQL_session,time_quota,unix_group,wbinfo_group' '--enable-security-cert-validators=fake' '--enable-storeid-rewrite-helpers=file' '--enable-url-rewrite-helpers=fake' '--enable-eui' '--enable-esi' '--enable-icmp' '--enable-zph-qos' '--enable-ecap' '--disable-translation' '--with-swapdir=/var/spool/squid' '--with-logdir=/var/log/squid' '--with-pidfile=/run/squid.pid' '--with-filedescriptors=65536' '--with-large-files' '--with-default-user=proxy' '--enable-linux-netfilter' '--with-systemd' '--with-openssl' '--enable-ssl-crtd' 'build_alias=x86_64-linux-gnu' 'CFLAGS=-g -O2 -fdebug-prefix-map=/home/builder/ubuntu20/build/squid/squid-4.13=. -fstack-protector-strong -Wformat -Werror=format-security -Wall' 'LDFLAGS=-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now ' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2' 'CXXFLAGS=-g -O2 -fdebug-prefix-map=/home/builder/ubuntu20/build/squid/squid-4.13=. -fstack-protector-strong -Wformat -Werror=format-security'

на vps squid является parent proxy с конфигом:

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

shutdown_lifetime 5 seconds

dns_nameservers 1.1.1.1

http_port 3128
http_port 3129 intercept
https_port 1080 intercept cert=/etc/squid/cert/squidCA.pem ssl-bump

sslproxy_cert_error allow all
always_direct allow all

acl step1 at_step SslBump1
acl step2 at_step SslBump2
acl step3 at_step SslBump3


ssl_bump stare step2
ssl_bump bump step3


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

access_log stdio:/var/log/squid/access.log squid
logfile_rotate 4

auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm proxy

acl authenticated proxy_auth REQUIRED
http_access allow authenticated

на ubuntu пакеты с 443 и 80-ых портов с помощью правил nftables перекидываются на squid:

table nat {
	chain prerouting {
		ip saddr 10.0.0.0/24 ip daddr != 10.0.0.0/24 tcp dport 80 counter redirect to 3129 comment "HTTP traffic"
		ip saddr 10.0.0.0/24 ip daddr != 10.0.0.0/24 tcp dport 443 counter redirect to 3130 comment "HTTPS traffic"
	}
}

на ubuntu squid настроен на просмотр доменов и в зависимости от домена: либо пускать напрямую запросы, либо через parent squid на vps:

acl SSL_ports port 443
acl SSL_ports port 1012 # for badssl.comm
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 1012        # for badssl.com
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


acl localnet src 10.0.0.0/24
dns_nameservers 127.0.0.1

debug_options ALL,2 28,9
shutdown_lifetime 5 seconds


acl rkn_domain dstdomain .ya.ru .facebook.com .instagram.com .mail.ru .fbcdn.net .linkedin.com

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny manager

http_access allow localnet
http_access allow localhost
http_access deny all

icp_access deny all 
htcp_access deny all


http_port 10.0.0.1:3128
http_port 10.0.0.1:3129 intercept
https_port 10.0.0.1:3130 intercept ssl-bump \
 options=ALL:NO_SSLv3:NO_TLSv1:NO_TLSv1_1:NO_TLSv1_2 \
 connection-auth=off \
 generate-host-certificates=on \
 dynamic_cert_mem_cache_size=4MB \
 tls-cert=/etc/squid/sslcert/squid.pem \
 tls-key=/etc/squid/sslcert/squid.key

sslproxy_cert_error allow all
acl step1 at_step SslBump1
acl step2 at_step SslBump2
acl step3 at_step SslBump3

ssl_bump stare step2
ssl_bump bump step3


# http://www.squid-cache.org/Doc/config/cache_peer/
#                                        proxy  icp
#          hostname             type     port   port	options
#          -------------------- -------- -----	-----	-----------
cache_peer OPENVPN_IP		parent	 1080	0	proxy-only no-query default no-digest no-delay no-netdb-exchange

cache_peer_access OPENVPN_IP allow rkn_domain
cache_peer_access OPENVPN_IP deny !rkn_domain
never_direct allow rkn_domain



logformat self %{%Y.%m.%d/%H:%M:%S}tl %Ss %>Hs %rm %ru %Sh/%<A
logformat squid_full      %ts.%03tu %6tr %>A %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<A %mt



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

access_log stdio:/var/log/squid/access_rkn.log squid_full rkn_domain
access_log stdio:/var/log/squid/access.log squid_full
#access_log none
cache_log /dev/null

# logfile_rotate 4
logfile_rotate 0

# Disable via and x-forwarded-for headers
via off
forwarded_for delete

netdb_filename none

Связка работает для instagram.com как нужно, но вот для linkedin.com не работает. Когда я вбиваю linkedin.com на машине из сети, то запись появляется в /var/log/squid/access.log, то есть либо домен не подошел под .linkedin.com,либо может squid не смог домен вытащить?

1653466922.169  30000 10.0.0.54 TCP_TUNNEL/200 0 CONNECT 13.107.42.14:443 - ORIGINAL_DST/13.107.42.14 -
  • ping
PING linkedin.com (13.107.42.14) 56(84) bytes of data.

Ну и 2-ой момент, не могу понять какой формат логов указать, чтобы мне в логах писались домены, а не IP адреса. Буду благодарен за советы!

 , ,

Graybit
()

ifupdown настройка параметров запуска dhclient

Доброго дня.

Есть Ubuntu 20.04, в которой полностью сеть откатил на работу через ifupdown. 1 из интерфейсов должен получать параметры через dhclient

#/etc/network/interfaces
allow-hotplug enp2s0
auto enp2s0
iface enp2s0 inet dhcp

Что приводит к

#ps -Af | grep dhclient

/sbin/dhclient -1 -4 -v -i -pf /run/dhclient.enp2s0.pid -lf /var/lib/dhcp/dhclient.enp2s0.leases -I -df /var/lib/dhcp/dhclient6.enp2s0.leases enp2s0

Клиент у меня

dhclient --version
isc-dhclient-4.4.1

Все, что связано с конфигами клиента:

# cat /etc/dhcp/dhclient.conf 
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;

send host-name = gethostname();
request subnet-mask, broadcast-address, time-offset, routers,
	domain-name, domain-name-servers, domain-search, host-name,
	dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
	netbios-name-servers, netbios-scope, interface-mtu,
	rfc3442-classless-static-routes, ntp-servers;

timeout 60;
retry 60;
reboot 10;
reject 10.100.0.2;

Замучался гуглить, как из такого запуска dhclient превратить его в(режим работы демона и чтобы клиент не умирал после неудачной попытки в течении таймаута):

/sbin/dhclient -nw -4 -v -pf /run/dhclient.enp2s0.pid -lf /var/lib/dhcp/dhclient.enp2s0.leases -I -df /var/lib/dhcp/dhclient6.enp2s0.leases enp2s0

 , , ,

Graybit
()

Сервер с nftables не обрабатывает корректно nat на 443 порт

Есть сервер, который выступает в роли шлюза в интернет на Debian 4.19.194-1 as с интерфейсами LAN, WAN, PPPOE (шлюз) и компьютер в сети LAN, который выходит в сеть через этот сервер.

И я не знаю почему, но с сервера доступны любые сайты через wget,curl, а с компьютера из сети часть работает(googlemyandex,youtube и тд), а часть просто виснет и по таймауту отваливается, хотя в этот же момент с сервера wget’ом легко забирается. Из такого примера сайт https://teleguide.info, который отвечает по 46.29.166.30 айпишнику, на который я trace кинул в nftables.

В качестве фаервола использую nftables с набором правил:

#!/usr/sbin/nft -f
flush ruleset

define EXTIF = "ppp0"
define LANIF = "enp1s0"
define WANIF = "enp4s0"
define LOCALIF = "lo"

table firewall {
	chain input {
		type filter hook input priority 0

		ct state {established, related} counter accept
		ct state invalid counter drop

		ip protocol icmp counter accept
		ip protocol igmp counter accept comment "Accept IGMP"
        ip protocol gre counter accept comment "Accept GRE"

		iifname { $LOCALIF, $LANIF } counter accept
		tcp dport 44122 counter accept
		udp dport 11897 counter accept
		udp dport 1194 counter accept
		udp dport {67,68} counter accept comment "DHCP"
		counter reject
	}

	chain forwarding {
		type filter hook forward priority 0

        	# teleguide.info for ntf monitor
		ip daddr 46.29.166.30 meta nftrace set 1 counter accept
        	ip saddr 46.29.166.30 meta nftrace set 1 counter accept

		udp dport 1194 counter accept
        	tcp dport 5938 counter accept
        	udp dport 5938 counter accept

		ip daddr 10.10.0.0/24 counter accept
        	ip saddr 10.10.0.0/24 counter accept
        	ip protocol gre counter accept comment "Accept GRE Forward"

		counter drop comment "all non described Forward drop"
	}

	chain outgoing {
		type filter hook output priority 0
		oifname $LOCALIF counter accept
	}
}

table nat {
	chain prerouting {
		type nat hook prerouting priority 0
		iifname $EXTIF udp dport 1194 counter dnat to 10.10.0.4
	}

	chain postrouting {
		type nat hook postrouting priority 0
		ip saddr 10.10.0.0/24 oifname $EXTIF counter masquerade
	}
}


lsmod:

tun                    53248  2
pppoe                  20480  2
pppox                  16384  1 pppoe
ppp_generic            45056  6 pppox,pppoe
slhc                   20480  1 ppp_generic
binfmt_misc            20480  1
i915                 1736704  0
ppdev                  20480  0
evdev                  28672  2
video                  49152  1 i915
drm_kms_helper        208896  1 i915
iTCO_wdt               16384  0
iTCO_vendor_support    16384  1 iTCO_wdt
parport_pc             32768  0
coretemp               16384  0
sg                     36864  0
serio_raw              16384  0
pcspkr                 16384  0
drm                   495616  3 drm_kms_helper,i915
parport                57344  2 parport_pc,ppdev
i2c_algo_bit           16384  1 i915
rng_core               16384  0
button                 20480  0
nft_masq_ipv4          16384  3
nft_masq               16384  1 nft_masq_ipv4
nft_reject_ipv4        16384  1
nf_reject_ipv4         16384  1 nft_reject_ipv4
nft_reject             16384  1 nft_reject_ipv4
nft_counter            16384  25
nft_ct                 20480  2
nft_connlimit          16384  0
nf_conncount           20480  1 nft_connlimit
nf_tables_set          32768  3
nft_tunnel             16384  0
nft_chain_nat_ipv4     16384  2
nf_nat_ipv4            16384  2 nft_chain_nat_ipv4,nft_masq_ipv4
nft_nat                16384  1
nf_tables             143360  112 nft_reject_ipv4,nft_ct,nft_nat,nft_chain_nat_ipv4,nft_tunnel,nft_counter,nft_masq,nft_connlimit,nft_masq_ipv4,nf_tables_set,nft_reject
nf_nat                 36864  2 nft_nat,nf_nat_ipv4
nfnetlink              16384  1 nf_tables
nf_conntrack          172032  8 nf_nat,nft_ct,nft_nat,nf_nat_ipv4,nft_masq,nf_conncount,nft_connlimit,nft_masq_ipv4
nf_defrag_ipv6         20480  1 nf_conntrack
nf_defrag_ipv4         16384  1 nf_conntrack
ip_tables              28672  0
x_tables               45056  1 ip_tables
autofs4                49152  2
ext4                  745472  2
crc16                  16384  1 ext4
mbcache                16384  1 ext4
jbd2                  122880  1 ext4
fscrypto               32768  1 ext4
ecb                    16384  0
crypto_simd            16384  0
cryptd                 28672  1 crypto_simd
glue_helper            16384  0
aes_x86_64             20480  1
raid10                 57344  0
raid456               172032  0
async_raid6_recov      20480  1 raid456
async_memcpy           16384  2 raid456,async_raid6_recov
async_pq               16384  2 raid456,async_raid6_recov
async_xor              16384  3 async_pq,raid456,async_raid6_recov
async_tx               16384  5 async_pq,async_memcpy,async_xor,raid456,async_raid6_recov
xor                    24576  1 async_xor
raid6_pq              122880  3 async_pq,raid456,async_raid6_recov
libcrc32c              16384  3 nf_conntrack,nf_nat,raid456
crc32c_generic         16384  5
raid0                  20480  0
multipath              16384  0
linear                 16384  0
raid1                  45056  2
md_mod                167936  8 raid1,raid10,raid0,linear,raid456,multipath
sd_mod                 61440  6
ata_generic            16384  0
ata_piix               36864  4
libata                270336  2 ata_piix,ata_generic
psmouse               172032  0
scsi_mod              249856  3 sd_mod,libata,sg
ehci_pci               16384  0
i2c_i801               28672  0
uhci_hcd               49152  0
lpc_ich                28672  0
ehci_hcd               94208  1 ehci_pci
mfd_core               16384  1 lpc_ich
usbcore               299008  3 ehci_pci,ehci_hcd,uhci_hcd
r8169                  90112  0
realtek                20480  2
libphy                 77824  2 r8169,realtek
usb_common             16384  1 usbcore

ntf monitor trace(добавил трейсы по айпишнику сайта, везде verdict accept):

trace id 2c2a8923 ip firewall forwarding packet: iif "enp1s0" oif "ppp0" ether saddr xxx ether daddr xxx ip saddr 10.10.0.96 ip daddr 46.29.166.30 ip dscp cs0 ip ecn not-ect ip ttl 127 ip id 32611 ip length 52 tcp sport 62489 tcp dport https tcp flags == syn tcp window 8192 
trace id 2c2a8923 ip firewall forwarding rule ip daddr 46.29.166.30 nftrace set 1 counter packets 0 bytes 0 accept (verdict accept)
trace id 2c2a8923 ip nat postrouting packet: oif "ppp0" @ll,xxx ip saddr 10.10.0.96 ip daddr 46.29.166.30 ip dscp cs0 ip ecn not-ect ip ttl 127 ip id 32611 ip length 52 tcp sport 62489 tcp dport https tcp flags == syn tcp window 8192 
trace id 2c2a8923 ip nat postrouting rule ip saddr 10.10.0.0/24 oifname "ppp0" counter packets 0 bytes 0 masquerade (verdict accept)
trace id 73f8f405 ip firewall forwarding packet: iif "ppp0" oif "enp1s0" ip saddr 46.29.166.30 ip daddr 10.10.0.96 ip dscp af32 ip ecn not-ect ip ttl 58 ip id 0 ip length 52 tcp sport https tcp dport 62489 tcp flags == 0x12 tcp window 29200 
trace id 73f8f405 ip firewall forwarding rule ip saddr 46.29.166.30 nftrace set 1 counter packets 0 bytes 0 accept (verdict accept)
trace id ca8ec4f5 ip firewall forwarding packet: iif "enp1s0" oif "ppp0" ether saddr xxx ether daddr xxx ip saddr 10.10.0.96 ip daddr 46.29.166.30 ip dscp cs0 ip ecn not-ect ip ttl 127 ip id 32612 ip length 40 tcp sport 62489 tcp dport https tcp flags == ack tcp window 256 

net.ipv4.ip_forward в 1 выставлен.

Есть мысли, почему может так себя вести?

 , , , ,

Graybit
()

RSS подписка на новые темы