在CentOS系统中,使用iptables实现透明代理可以通过以下步骤完成。透明代理意味着客户端不需要进行任何配置,它们的流量会自动通过代理服务器。
首先,确保你已经安装了Squid和ipset。
sudo yum install squid ipset
编辑Squid配置文件 /etc/squid/squid.conf
,添加以下内容:
http_port 3128 transparent
acl all src 0.0.0.0/0
http_access allow all
这里,http_port 3128 transparent
启用了透明代理模式,acl all src 0.0.0.0/0
允许所有IP访问,http_access allow all
允许所有访问。
启动Squid服务并设置开机自启:
sudo systemctl start squid
sudo systemctl enable squid
在网关或路由器上配置iptables,将流量重定向到Squid代理服务器。
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3128
这两条规则将HTTP(端口80)和HTTPS(端口443)流量重定向到Squid代理服务器的端口3128。
如果你有多个代理服务器或者需要更复杂的流量控制,可以使用ipset。
sudo ipset create whitelist hash:ip
sudo ipset add whitelist 192.168.1.0/24
然后在iptables规则中使用ipset:
sudo iptables -t nat -A PREROUTING -m set --match-set whitelist src -p tcp --dport 80 -j REDIRECT --to-port 3128
sudo iptables -t nat -A PREROUTING -m set --match-set whitelist src -p tcp --dport 443 -j REDIRECT --to-port 3128
为了确保重启后规则仍然有效,可以使用iptables-save
和iptables-restore
命令,或者安装iptables-services
包并启用保存功能。
sudo yum install iptables-services
sudo systemctl enable iptables
sudo systemctl start iptables
在客户端浏览器中访问任意网站,检查是否通过代理服务器访问。你可以使用以下命令查看Squid的访问日志:
sudo tail -f /var/log/squid/access.log
通过以上步骤,你应该能够在CentOS系统上使用iptables实现透明代理。