技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 网络系统 --> 加速WEB访问:使用DNSmasq与squid代理并过滤广告

加速WEB访问:使用DNSmasq与squid代理并过滤广告

浏览:3429次  出处信息
文章目录

简介

   DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,提供了DNS功能和可选择的DHCP功能。通过其DNS缓存的功能,可以大大提高公共网络中的域名解析速度,从而提升网站访问速度。

   squid代理服务提供了WEB页面缓存的功能,也可以帮助用户加速网站的访问,还能进行必要的行为管控(如禁止访问某些网站、过滤网页中的某些内容等)。本文将同时介绍正向代理和透明代理:

  • 正向代理:需要用户在客户端进行配置,手动指定代理服务器和端口,但是通过该代理,可以访问所有WEB服务(HTTP和HTTPS)。

  • 透明代理:则不需要用户进行任何配置即可使用,即对于应用而言不需要知道代理的存在。

  •    然而,透明代理有个缺点,它只能代理HTTP (80端口)协议,而对于经过加密的HTTPS协议,及其他协议如FTP、POP3等就爱莫能助了。这时候就需要用到CentOS的IP转发功能了。通过防火墙的设置,可以只允许访问HTTPS等必要的服务。

    实验环境

       为容易理解,本实验虚拟机所在网络仅一个公有Internet网络,并不接入企业网络或者其他形式的私有网络。

       实验中,假设CentOS所用IP地址为192.168.10.24,外网路由器地址192.168.10.1

    DNSmasq的配置

       DNSmasq是一种轻量级的非常容易部署的服务,不仅可以在流行的Linux发行版中随处可见,在众多流行的路由器系统中也有,如OpenWRT, DD-WRT, Tomato等,并且其DHCP服务往往是其提供的。因此这里的配置也适用于安装这些系统的路由器参考。

    #不要使用/etc/resolv.conf文件
    no-resolv
    no-poll
    
    #这两行告诉DNSmasq使用当地ISP的本地DNS进行解析
    server=218.2.2.2
    server=218.4.4.4
    
    #对于google,youtube的服务,使用谷歌的DNS解析
    server=/google.com/8.8.8.8
    server=/youtube.com/8.8.8.8
    
    #这两行用于防止DNS污染
    bogus-nxdomain=202.102.110.203
    bogus-nxdomain=202.102.110.204
    
    #DNSmasq也可以通过域名过滤某些网站或服务
    address=/googlesyndication.com/127.0.0.1
    address=/cpro.baidu.com/127.0.0.1
    address=/union.baidu.com/127.0.0.1
    address=/google-analytics.com/127.0.0.1
    address=/admaster.com.cn/127.0.0.1
    address=/jiathis.com/127.0.0.1
    

       配置完成后,需要重启服务:

    systemctl restart dnsmasq
    

       服务启动后,需要到路由器上修改DHCP中指定的DNS服务器地址,改成CentOS主机的地址“192.168.10.24”

       重新获取IP后,可用过nslookup命令查看是否成功,如:nslookup union.baidu.com 返回 127.0.0.1则表示成功。

    squid代理的配置

    安装Squid

    yum install squid
    chkconfig squid on
    

    配置Squid

       编辑/etc/squid/squid.conf,指定两行http_port

       以下第一行为3128端口启用普通正向代理,第二行为3129端口启用透明代理。

    http_port 0.0.0.0:3128
    http_port 0.0.0.0:3129 transparent
    

    IP转发

       由于透明代理只能代理HTTP协议,为了让虚拟机能够想路由器一样工作,需要开启该功能。

       即在/etc/sysctl.conf中,设置:

    net.ipv4.ip_forward=1
    

       之后通过sysctl -p加载并启用新设置。

    防火墙的配置

    # 允许接收相关应答
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    
    # 仅允许以下入站协议
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    iptables -A INPUT -p tcp --dport 443 -j ACCEPT
    iptables -A INPUT -p tcp --dport 3128 -j ACCEPT
    iptables -A INPUT -p tcp --dport 3129 -j ACCEPT
    iptables -A INPUT -p udp --dport 53 -j ACCEPT
    
    # 将HTTP服务重定向到3129端口,交给squid,这是透明代理的关键
    iptables -t nat -A PREROUTING -p tcp -s 192.168.10.0/24 --dport 80 -j REDIRECT --to-ports 3129
    
    # 仅允许以下协议转发给默认路由(即外网路由器)
    iptables -A FORWARD -p tcp --dport 443 -j ACCEPT
    
    # 默认策略
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    

    测试代理服务

       配置完成后,需要重启代理服务:

    systemctl restart squid
    

       对于正向代理,直接在IE中指定代理服务器192.168.10.24和端口3128即可,如能正常访问WEB,则成功。

       服务启动后,需要到路由器上修改DHCP中指定的新的网管地址,改成CentOS主机的地址“192.168.10.24”

       通过手机等客户端,不加设置,就应可以访问外网了。

       另外,可以通过/var/log/squid/access.log查看访问日志,如果成功访问,日志中会有体现。

    屏蔽广告

       我们通过以下脚本生成ad_block.txt,该文件包含了一个屏蔽列表:

    # Generate ad_block.txt
    #!/bin/bash
    wget -O /etc/squid/ad_block.txt 'http://pgl.yoyo.org/adservers/serverlist.php?hostformat=squid-dstdom-regex&showintro=0&mimetype=plaintext'
    systemctl restart squid
    

       可以将该脚本加入crond中,以定期更新之。

       编辑/etc/squid/squid.conf,增加下面两行:

    acl ads dstdom_regex "/etc/squid/ad_block.txt"
    http_access deny ads
    

       重启squid服务后,即可。

建议继续学习:

  1. 使用Squid缓存视频    (阅读:9224)
  2. php缓存与加速分析与汇总    (阅读:6416)
  3. 系统架构的一些思考    (阅读:5705)
  4. Ubuntu工作机使用FlashCache技术加速    (阅读:5342)
  5. [调优] Squid 不同版本的性能对比    (阅读:4333)
  6. [squid] 过期时间在 60 秒内 squid 不 Cache 的问题    (阅读:4026)
  7. Squid 限制用户并发连接数    (阅读:4002)
  8. [Squid] TCP_MEM_HIT 和 TCP_HIT 的性能到底相差多远    (阅读:3667)
  9. squid缓存失效之谜:一步步提高squid缓存命中率办法记录    (阅读:3583)
  10. squid对源网站进行限速    (阅读:3166)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1