我正在尝试为无线网络实现透明 Squid 代理,它主要为移动设备服务。我使用的软件是 Debian 7.6 服务器和 IPTables 中的 squid 3.4.6(从源代码编译的最新版本)。我的网络由许多 VLAN 组成,所有 VLAN 都由 CheckPoint 的中央防火墙控制,它还允许我们控制谁去哪里以及哪些服务器直接连接到互联网。这是我创建的一个小图表:
因此,到目前为止,我所做的就是为移动设备隔离一个 VLAN,在那里,移动设备的 DHCP/DNS 请求被重定向到我们所有服务器所在的数据中心。最后使用一个选项,将所有 HTTP 和 HTTPS 流量(http 映射)从该无线专用 VLAN 重定向到数据中心的单个 Squid 服务器。
我安装了带有一个 NIC 的 squid 服务器(它使用 Checkpoint 防火墙将所有 squid 流量直接连接到互联网),Debian 已更新,并且我记录了安装过程,以便于复制。所有这些都在同一台机器上完成:
安装 VMWARE 工具
apt-get install -y build-essential linux-headers-amd64
mount /dev/cdrom /mnt/
cp /mnt/VMwareTools-4.0.0-236512.tar.gz /tmp/
umount /mnt/
tar -zxvf /tmp/VMwareTools-4.0.0-236512.tar.gz --directory=/tmp/
mkdir -pv /usr/lib64
/tmp/vmware-tools-distrib/vmware-install.pl --default
rm /tmp/WM* /tmp/vm* -rf
安装 SQUID
apt-get install -y libtool libssl-dev libcrypto++-dev devscripts fakeroot htop ssl-cert squid-langpack && apt-get build-dep -y squid3
sysctl -w net.ipv4.ip_forward=1
nano /etc/sysctl.conf
- net.ipv4.ip_forward=1
- net.ipv4.conf.default.rp_filter = 0
- net.ipv4.conf.default.accept_source_route = 0
wget http://www.squid-cache.org/Versions/v3/3.4/squid-3.4.6.tar.gz
tar -zxvf squid-3.4.6.tar.gz
cd squid-3.4.6
nano configure.sh
chmod +x configure.sh
./configure.sh
make
make install
configure.sh 的内容
#!/bin/sh
'./configure' \
'--build=x86_64-linux-gnu' \
'--srcdir=.' \
'--prefix=/usr' \
'--includedir=/usr/include' \
'--localstatedir=/var' \
'--mandir=/usr/share/man' \
'--infodir=/usr/share/info' \
'--libexecdir=/usr/lib/squid' \
'--datadir=/usr/share/squid' \
'--sysconfdir=/etc/squid' \
'--localstatedir=/var' \
'--bindir=/usr/sbin' \
'--enable-inline' \
'--enable-ssl' \
'--enable-ssl-crtd' \
'--enable-icap-client' \
'--enable-follow-x-forwarded-for' \
'--enable-removal-policies=heap,lru' \
'--enable-delay-pools' \
'--enable-cache-digests' \
'--enable-storeio=ufs,aufs,diskd,rock' \
'--enable-disk-io' \
'--disable-eui' \
'--disable-snmp' \
'--disable-wccp' \
'--disable-wccpv2' \
'--disable-http-violations' \
'--disable-translation' \
'--disable-auto-locale' \
'--disable-htcp' \
'--disable-internal-dns' \
'--with-default-user=proxy' \
'--with-logdir=/var/log/squid/' \
'--with-pidfile=/var/run/squid.pid' \
'--with-filedescriptors=65536' \
'--with-cppunit-basedir=/usr' \
'--with-large-files' \
"$@"
配置 SQUID
nano /etc/init.d/squid
chmod +x /etc/init.d/squid
chown -R proxy:proxy /var/log/squid/
update-rc.d squid defaults
mkdir -p /etc/squid/ssl
openssl genrsa -des3 -out openssl.key 1024
openssl req -new -key openssl.key -out openssl.csr
cp openssl.key openssl.key.old
openssl rsa -in openssl.key.old -out openssl.key
openssl x509 -req -days 365 -in openssl.csr -signkey openssl.key -out openssl.crt
/usr/lib/squid/ssl_crtd -c -s /etc/squid/ssl/db
nano /etc/squid/squid.conf
squid.conf 的内容
http_port 3128
http_port 3129 transparent
https_port 3130 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=8MB cert=/etc/squid/ssl/openssl.crt key=/etc/squid/ssl/openssl.key version=3
visible_hostname proxyc.domain.com
dns_nameservers 8.8.8.8 8.8.4.4
strip_query_terms on
access_log stdio:/var/log/squid/access.log
cache_log /var/log/squid/cache.log
coredump_dir /var/cache/squid
shutdown_lifetime 1 second
ssl_bump server-first all
always_direct allow all
sslcrtd_program /usr/lib/squid/ssl_crtd -s /etc/squid/ssl/db -M 8MB
sslcrtd_children 5
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER,NO_DEFAULT_CA
http_access allow all
http_reply_access allow all
我认为问题就在这里,但我不知道该怎么办:
IPTABLES 配置
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 3128 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 3129 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 3130 -j ACCEPT
iptables -t nat -I PREROUTING -i eth0 ! -s 192.168.1.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:3129
iptables -t nat -I PREROUTING -i eth0 ! -s 192.168.1.1 -p tcp --dport 443 -j DNAT --to-destination 192.168.1.1:3130
我如何让 IPTables 将传入的 HTTP/HTTPS 流量作为 DNAT 重定向到 3129 和 3130 上的 Squid 端口...端口 3128 可以在任何浏览器中工作,我可以配置代理,但使用 IPTables 的重定向让我抓狂!
我在 IPTables 中发布的上述内容不起作用。我一直收到错误 111 连接被拒绝,如果我安装某个 Web 浏览器,我在其中放置的任何 URL 都会一直显示 Apache 欢迎页面“它有效!!”。如果有人能告诉我我做错了什么,我将不胜感激。