将 CentOS 6.7 配置为 Squid 代理服务器:如何解决这个问题?

将 CentOS 6.7 配置为 Squid 代理服务器:如何解决这个问题?

我正在使用运行 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 框配置为代理服务器时,我进行了以下配置:

  1. 更新 yum 并安装 Squid

  2. 编辑 /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 链路本地(直接插入)机器 ...
    ( 其他行暂时保持不变)

  3. 启动 Squid 代理:

    # 服务 squid 启动 # chkconfig squid 开启

  4. 编辑 /etc/sysctl.conf 文件如下

    网.ipv4.ip_forward=1

  5. 编辑 /etc/sysconfig/iptables-config 文件

    将以下行中的“否”更改为“是”:并保存

    IPTABLES_SAVE_ON_STOP="是" IPTABLES_SAVE_ON_RESTART="是"

  6. 修改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 重启

  7. 安装了 dhcp 服务器(yum install dhcp)

  8. 禁用 Selinux:

    # setenforce 0
    # vim /etc/sysconfig/selinux 并更改;
    SELINUX=enforcing 为
    SELINUX=disabled

  9. 编辑 /etc/sysconfig/dhcpd 文件并添加;

    DHCPDARGS=eth1

  10. 编辑 /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;
    }

  11. 启动 dhcp 服务器

    # 服务 dhcpd 启动
    # chkconfig dhcpd 开启

  12. 在将过滤站点/规则/文件扩展名添加到
    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:00

    http_access 拒绝非工作
    http_access 拒绝社交
    http_reply_access 拒绝不良网站
    http_reply_access 拒绝成人

    # 我们建议您至少使用以下行。hierarchy_stoplist
    cgi-bin?

    # 取消注释并调整以下内容以添加磁盘缓存目录。cache_dir
    ufs /var/spool/squid 10240 16 256
    .
    .(其他规则未改变)

  13. 重新启动 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 规则。

  1. 首先我清理了所有 iptable 规则。

    # iptables -F
    # iptables -X
    # iptables -t nat -F
    # iptables -t nat -X
    # iptables -t mangle -F
    # iptables -t mangle -X

    1. 然后添加以下规则:

      # 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

  2. 除此之外,为了阻止 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

现在代理服务器工作正常。

相关内容