不久前我开了飞机站[Kuro Neko] 还受到了 友商的亲切“来访”
对此我也对服务器的iptables进行了特殊优化,故写此文章 作为记录

实现原理

根据Cloudflare官方发布的ip地址(https://www.cloudflare.com/ips/) 使用iptables对进站规则进行设定
屏蔽除了来自Cloudflare来访ip外的所有访问ip,这样就可以有效防止ddos攻击(拒绝访问...

实际操作

两个系统的iptables基本一样,仅仅是规则文件所在的位置不同

Debian/Ubuntu

nano /etc/iptables.up.rules

Centos/Redhat

vi /etc/sysconfig/iptables

文件内容

 # Firewall configuration written by system-config-securitylevel
 # Manual customization of this file is not recommended.
 *filter
 :INPUT DROP [0:0]
 :FORWARD ACCEPT [0:0]
 :OUTPUT ACCEPT [0:0]
 :syn-flood - [0:0]
 -A INPUT -i lo -j ACCEPT
 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 -A INPUT -p tcp -m state --state NEW -m tcp --dport 7758 -j ACCEPT
 -A INPUT -s 198.41.128.0/17 -p tcp -m tcp --dport 80 -j ACCEPT
 -A INPUT -s 197.234.240.0/22 -p tcp -m tcp --dport 80 -j ACCEPT
 -A INPUT -s 190.93.240.0/20 -p tcp -m tcp --dport 80 -j ACCEPT
 -A INPUT -s 188.114.96.0/20 -p tcp -m tcp --dport 80 -j ACCEPT
 -A INPUT -s 173.245.48.0/20 -p tcp -m tcp --dport 80 -j ACCEPT
 -A INPUT -s 172.64.0.0/13 -p tcp -m tcp --dport 80 -j ACCEPT
 -A INPUT -s 162.158.0.0/15 -p tcp -m tcp --dport 80 -j ACCEPT
 -A INPUT -s 141.101.64.0/18 -p tcp -m tcp --dport 80 -j ACCEPT
 -A INPUT -s 131.0.72.0/22 -p tcp -m tcp --dport 80 -j ACCEPT
 -A INPUT -s 108.162.192.0/18 -p tcp -m tcp --dport 80 -j ACCEPT
 -A INPUT -s 104.16.0.0/12 -p tcp -m tcp --dport 80 -j ACCEPT
 -A INPUT -s 103.31.4.0/22 -p tcp -m tcp --dport 80 -j ACCEPT
 -A INPUT -s 103.22.200.0/22 -p tcp -m tcp --dport 80 -j ACCEPT
 -A INPUT -s 103.21.244.0/22 -p tcp -m tcp --dport 80 -j ACCEPT
 -A INPUT -s 198.41.128.0/17 -p tcp -m tcp --dport 443 -j ACCEPT
 -A INPUT -s 197.234.240.0/22 -p tcp -m tcp --dport 443 -j ACCEPT
 -A INPUT -s 190.93.240.0/20 -p tcp -m tcp --dport 443 -j ACCEPT
 -A INPUT -s 188.114.96.0/20 -p tcp -m tcp --dport 443 -j ACCEPT
 -A INPUT -s 173.245.48.0/20 -p tcp -m tcp --dport 443 -j ACCEPT
 -A INPUT -s 172.64.0.0/13 -p tcp -m tcp --dport 443 -j ACCEPT
 -A INPUT -s 162.158.0.0/15 -p tcp -m tcp --dport 443 -j ACCEPT
 -A INPUT -s 141.101.64.0/18 -p tcp -m tcp --dport 443 -j ACCEPT
 -A INPUT -s 131.0.72.0/22 -p tcp -m tcp --dport 443 -j ACCEPT
 -A INPUT -s 108.162.192.0/18 -p tcp -m tcp --dport 443 -j ACCEPT
 -A INPUT -s 104.16.0.0/12 -p tcp -m tcp --dport 443 -j ACCEPT
 -A INPUT -s 103.31.4.0/22 -p tcp -m tcp --dport 443 -j ACCEPT
 -A INPUT -s 103.22.200.0/22 -p tcp -m tcp --dport 443 -j ACCEPT
 -A INPUT -s 103.21.244.0/22 -p tcp -m tcp --dport 443 -j ACCEPT
 -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
 -A INPUT -p tcp -m tcp --dport 80 -j DROP
 -A INPUT -p tcp -m tcp --dport 443 -j DROP
 -A INPUT -j REJECT --reject-with icmp-port-unreachable
 COMMIT

Tips

Debian

对于有些商家的debian系统 还需做以下步骤

nano /etc/network/if-pre-up.d/iptables

 #!/bin/bash
 /sbin/iptables-restore < /etc/iptables.up.rules

Centos7

由于centos7默认使用的firewall 所以 需要卸载/禁用firewall,并自行安装iptables

最后再重启一下iptables即可 service iptables reload

总结

哪怕我们已经设置了iptables规则来屏蔽不希望来访的ip地址,但实际上最重要的防护还是得依靠cloudflare的cdn 所以保护好源站的ip地址十分重要;千万不能让不怀好意的人知道(所以快去把php探针什么的删了吧,那玩意会暴露源站ip

已有 2 条评论

  1. Otstar Lin:

    通过iptables禁IP防御DDOS的效果并不是很好,因为VPS的下行端口还是会被占用

    2018-08-14 12:39 回复
    1. Tao:

      我这刚开坑...还没填呢。emmm

      2018-08-14 18:19 回复

preView