You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过iptables阻止Facebook爬取服务器(*.fbsv.net)的请求?

如何通过iptables阻止Facebook爬取服务器(*.fbsv.net)的请求?

嘿,我来帮你搞定这个被Facebook爬取服务器骚扰的问题!首先得说清楚:iptables本身没法直接拦截域名(比如*.fbsv.net),它只能针对IP地址操作,所以我给你准备了两种方案——临时应急的快速方法,以及更持久的长效方案,你可以根据需求选。

一、临时应急方案(适合快速阻止已知IP)

这个方法能让你立刻见效,但缺点是Facebook的CDN IP会经常变动,过段时间可能需要手动更新:

  1. 先获取*.fbsv.net相关的IP地址,用dig命令就行:
    # 获取泛域名解析的IP
    dig +short *.fbsv.net
    # 也可以单独解析你提到的那两个具体主机
    dig +short fwdproxy-cco-031.fbsv.net fwdproxy-prn-050.fbsv.net
    
  2. 把这些IP逐个加入iptables的拦截规则,或者用批量命令一次性添加:
    for ip in $(dig +short *.fbsv.net); do iptables -A INPUT -s $ip -j DROP; done
    
    这条命令会自动解析所有*.fbsv.net的IP,然后把它们都加入INPUT链的DROP规则里,直接拒绝这些IP的请求。

二、长效持久方案(用ipset动态管理IP)

如果不想频繁手动更新IP,推荐用ipset工具来管理IP集合,还能配合定时任务自动更新,一劳永逸:

  1. 先安装ipset(不同系统命令略有不同):
    • Debian/Ubuntu系统:apt install ipset -y
    • CentOS/RHEL系统:yum install ipset -y
  2. 创建一个专门用来存放Facebook骚扰IP的集合:
    ipset create facebook_spam hash:ip
    
  3. 把*.fbsv.net的IP添加到这个集合里:
    # 添加泛域名IP
    for ip in $(dig +short *.fbsv.net); do ipset add facebook_spam $ip; done
    # 再手动添加你提到的那两个具体主机IP,确保覆盖
    for host in fwdproxy-cco-031.fbsv.net fwdproxy-prn-050.fbsv.net; do
        ip=$(dig +short $host)
        if [ ! -z "$ip" ]; then
            ipset add facebook_spam $ip
        fi
    done
    
  4. 给iptables添加规则,拦截这个集合里的所有IP:
    iptables -A INPUT -m set --match-set facebook_spam src -j DROP
    
  5. 设置定时任务自动更新IP集合(防止Facebook换IP):
    • 先创建一个更新脚本,比如/usr/local/bin/update_facebook_ipset.sh,内容如下:
      #!/bin/bash
      # 清空旧的IP集合
      ipset flush facebook_spam
      # 添加新的泛域名IP
      for ip in $(dig +short *.fbsv.net); do
          ipset add facebook_spam $ip
      done
      # 再次添加指定主机的IP
      for host in fwdproxy-cco-031.fbsv.net fwdproxy-prn-050.fbsv.net; do
          ip=$(dig +short $host)
          if [ ! -z "$ip" ]; then
              ipset add facebook_spam $ip
          fi
      done
      
    • 给脚本添加执行权限:chmod +x /usr/local/bin/update_facebook_ipset.sh
    • 编辑crontab定时任务,让它每天凌晨自动更新:
      crontab -e
      
      在打开的文件里添加一行:
      0 0 * * * /usr/local/bin/update_facebook_ipset.sh
      
      保存退出后,每天凌晨0点就会自动刷新IP集合啦。
  6. (可选)保存ipset规则,防止重启服务器后丢失:
    • Debian/Ubuntu:ipset save > /etc/ipset.conf,然后在/etc/rc.local里添加ipset restore < /etc/ipset.conf(记得给rc.local加执行权限)
    • CentOS/RHEL:直接启用ipset服务systemctl enable ipset,系统会自动保存和恢复规则。

取消阻止的方法

如果你之后想取消拦截,也很简单:

  • 临时方案:用iptables -D INPUT -s [具体IP] -j DROP逐个删除规则,或者用iptables -F INPUT清空所有INPUT链规则(谨慎操作,会清空所有INPUT规则)
  • 长效方案:先删除iptables规则iptables -D INPUT -m set --match-set facebook_spam src -j DROP,然后销毁ipset集合ipset destroy facebook_spam

备注:内容来源于stack exchange,提问作者kungfooman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 08:24:37