我正在使用运行 CentOS 6.7 并带有 2 个 NIC(eth0 和 eth1)的 PC 作为 Squid 代理服务器。eth0(红色接口/192.168.0.2/24)与路由器(192.168.0.1/24)物理连接,而 eth1(绿色接口/192.168.1.1/24)与 LAN 连接。
eth0:
Connect automatically
Method = Manual
Address = 192.168.0.2
Mask = /24
GW = 192.168.0.1
DNS = 8.8.8.8, 8.8.4.4
eth1:
Connect automatically
Method = Manual
Address = 192.168.1.1
Mask = /24
GW = 192.168.0.2
DNS = 8.8.8.8, 8.8.4.4
在将 CentOS 框配置为代理服务器时,我进行了以下配置:
更新 yum 并安装 Squid
编辑 /etc/squid/squid.conf 文件如下所示:
#
# 推荐最低配置:
#
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1# 允许从本地网络访问的示例规则。
# 适应列出
应允许浏览的(内部)IP 网络
#acl localnet src 10.0.0.0/8 # RFC1918 可能的内部网络
#acl localnet src 172.16.0.0/12 # RFC1918 可能的内部网络acl localnet src 192.168.1.0/24 # RFC1918 可能的内部网络
#acl localnet src fc00::/7 # RFC 4193 本地私有网络范围
#acl localnet src fe80::/10 # RFC 4291 链路本地(直接插入)机器 ...
( 其他行暂时保持不变)启动 Squid 代理:
# 服务 squid 启动 # chkconfig squid 开启
编辑 /etc/sysctl.conf 文件如下
网.ipv4.ip_forward=1
编辑 /etc/sysconfig/iptables-config 文件
将以下行中的“否”更改为“是”:并保存
IPTABLES_SAVE_ON_STOP="是" IPTABLES_SAVE_ON_RESTART="是"
修改iptables中的规则如下:
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -t filter -D INPUT -j REJECT --reject-with icmp-host-prohibited
# iptables -t filter -D FORWARD -j REJECT --reject-with icmp-host-prohibited
# iptables -t filter -A INPUT -p tcp --dport 3128 -j ACCEPT
# iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
# iptables -A FORWARD -i eth1 -p tcp --dport 443 -d www.facebook.com -j DROP
# iptables -A FORWARD -i eth1 -p tcp --dport 443 -d www.youtube.com -j DROP# 服务 iptables 保存
# chkconfig iptables on
# 服务 iptables 重启安装了 dhcp 服务器(yum install dhcp)
禁用 Selinux:
# setenforce 0
# vim /etc/sysconfig/selinux 并更改;
SELINUX=enforcing 为
SELINUX=disabled编辑 /etc/sysconfig/dhcpd 文件并添加;
DHCPDARGS=eth1
编辑 /etc/dhcp/dhcpd.conf 文件如下:
# DHCP 服务器配置文件。
# 参见 /usr/share/doc/dhcp*/dhcpd.conf.sample#
参见 'man 5 dhcpd.conf'
#
authoritative;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.50 192.168.1.220;
option domain-name-servers 8.8.8.8, 8.8.4.4;
# option domain-name "centos.local"
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
default-lease-time 600;
max-lease-time 7200;
}启动 dhcp 服务器
# 服务 dhcpd 启动
# chkconfig dhcpd 开启在将过滤站点/规则/文件扩展名添加到
a.) /etc/squid/acls.txt
b.) /etc/squid/adult.txt 和
c.) /etc/squid/badsites.txt 文件后,我更改了 /etc/squid/squid.conf 文件:.
.(以上规则在步骤 2 中进行了更改)
.
#
# 在此处插入您自己的规则以允许您的客户端进行访问
#
visible_hostname cetos-server.local
acl social dstdomain -i "/etc/squid/acls.txt"
acl badsites dstdomain -i "/etc/squid/badsites.txt"
acl adult url_regex -i "/etc/squid/adult.txt"
acl non-working time SMTWHFS 18:00-23:59
acl non-working time SMTWHFS 00:00-06:00http_access 拒绝非工作
http_access 拒绝社交
http_reply_access 拒绝不良网站
http_reply_access 拒绝成人# 我们建议您至少使用以下行。hierarchy_stoplist
cgi-bin?# 取消注释并调整以下内容以添加磁盘缓存目录。cache_dir
ufs /var/spool/squid 10240 16 256
.
.(其他规则未改变)重新启动 squid、dhcpd 和 iptables:
# chkconfig squid on
# 服务 squid 重启# chkconfig iptables on
# 服务 iptables 重启# chkconfig dhcpd on
# 服务 dhcpd 重启
一旦完成,代理就可以正常工作。局域网中的任何 PC 都无法不通过代理服务器(192.168.1.1 端口:3128)访问互联网。
但,
问题:
一旦我重新启动 CentOS 机器,尽管上述所有配置仍然存在,并且 Squid、DHCP 和 iptables 正常运行(因为它们在重新启动机器之前就已运行),但现在我的 LAN 中的 PC 无需向该 PC 添加代理设置即可访问互联网。 (例如:具有 192.168.1.155/24 的 PC 无需在系统代理设置中添加代理服务器 IP 和端口即可访问互联网。)
你能帮我纠正这个问题吗?
谢谢。
答案1
非常感谢。我删除了 eth1 中的网关 IP。我还更改了 iptables 规则。
首先我清理了所有 iptable 规则。
# iptables -F
# iptables -X
# iptables -t nat -F
# iptables -t nat -X
# iptables -t mangle -F
# iptables -t mangle -X然后添加以下规则:
# modprobe ip_conntrack
# modprobe ip_conntrack_ftp
# iptables -P INPUT DROP
# iptables -P OUTPUT ACCEPT
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT
# iptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE
# iptables --append FORWARD --in-interface $LAN_IN -j ACCEPT
# iptables -A INPUT -i $LAN_IN -j ACCEPT
# iptables -A OUTPUT -o $LAN_IN -j ACCEPT
# iptables -t nat -A PREROUTING -i $LAN_IN -p tcp --dport 80 -j DNAT --到 $SQUID_SERVER:$SQUID_PORT
# iptables -t nat -A PREROUTING -i $INTERNET -p tcp --dport 80 -j REDIRECT --到端口 $SQUID_PORT
# iptables -A INPUT -j LOG
# iptables -A INPUT -j DROP
除此之外,为了阻止 YouTube 和 Facebook,我将对 www.youtube.com 和 www.facebook.com 的传入请求从端口 443 转移到 squid 服务器(即 192.168.1.1:3128)(如下所述)。在这里,由于我已经使用 squid 代理阻止了上述 2 个网站,因此 LAN 内的任何人都无法访问上述 2 个网站。
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -d www.facebook.com -j DNAT --to 192.168.1.1:3128
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -d www.youtube.com -j DNAT --to 192.168.1.1:3128
现在代理服务器工作正常。