centos

centos iptables如何实现透明代理

小樊
46
2025-08-08 09:00:10
栏目: 智能运维

在CentOS系统中,使用iptables实现透明代理可以通过以下步骤完成。透明代理意味着客户端不需要进行任何配置,它们的流量会自动通过代理服务器。

前提条件

  1. 两台服务器:一台作为代理服务器(例如:proxy.example.com),另一台作为网关或路由器(例如:gateway.example.com)。
  2. iptables和ipset:确保你的CentOS系统上已经安装了iptables和ipset。
  3. 代理软件:例如Squid。

步骤

1. 安装必要的软件

首先,确保你已经安装了Squid和ipset。

sudo yum install squid ipset

2. 配置Squid

编辑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 允许所有访问。

3. 启动Squid

启动Squid服务并设置开机自启:

sudo systemctl start squid
sudo systemctl enable squid

4. 配置iptables

在网关或路由器上配置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。

5. 配置ipset(可选)

如果你有多个代理服务器或者需要更复杂的流量控制,可以使用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

6. 保存iptables规则

为了确保重启后规则仍然有效,可以使用iptables-saveiptables-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实现透明代理。

0
看了该问题的人还看了