V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lygmqkl
V2EX  ›  问与答

帮忙看看 centos 6.5 web 服务器这样写 iptables 可以吗?欢迎高手进来给意见

  •  
  •   lygmqkl · 2016-12-13 16:03:37 +08:00 · 1366 次点击
    这是一个创建于 3204 天前的主题,其中的信息可能已经有所发展或是发生改变。
    环境 Centos6.5 + nginx + php(phpfpm) + mysql 组成的 web 服务器,
    主要需要做的事情包括: 80 and 443 web 服务, ftp 服务, mysql 远程登录管理, SS 备用(并非主力服务器算是一台测试备用服务器所以加了一个 SS 备用)

    我算是 php 玩家对于 centos 和运维基本不太懂,网上找了一圈没找到合适的文章,所以自己花了几个小时学习了一下,写出了下面一份规则,希望能在大家的帮助下,完成一份较经典的 web 服务器 iptables 命令集合,方便后来人。我也承诺最后会 append 一个完成的列表, 希望能不吝赐教,谢谢。


    #################################### iptables plan v1.0 ####################################
    #清空所有规则
    iptables -F
    iptables -X


    ###Basic
    # basic.ssh
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT #ssh 端口 22 ,如已修改需要改成对应的

    #basic.ftp
    iptables -A INPUT -p tcp --dport 21 -j ACCEPT #ftp 连接端口 21
    iptables -A INPUT -p tcp -m tcp --dport 50000:51000 -j ACCEPT # ftp 被动端口 50000-51000
    #以上 2 组写在最前面是为了保证救命,话说每个玩 iptables 的人都应该有被关在门外的经历,说多了都是眼泪


    #basic.rules
    iptables -A INPUT -p icmp --icmp-type any -j ACCEPT #允许 icmp 包进入
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已经建立和相关的数据包进入
    iptables -A OUTPUT -p icmp --icmp any -j ACCEPT #允许 icmp 包出去
    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已经建立和相关的数据包出去

    #basic.localhost and loopback
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT
    iptables -A INPUT -s localhost -d localhost -j ACCEPT #允许本地的数据包
    iptables -A OUTPUT -s localhost -d localhost -j ACCEPT #允许本地数据包

    #@@ 问题一:原则上这 2 个应该是一样的留上面 lo 那组就行了吧?



    ###Application
    #app.rules
    #https
    iptables -A INPUT -P tcp --dport 443 -j ACCEPT #打开 https 需要用到的 443 端口,用户以 https 方式访问是使用
    #没有配置 output 是因为上面有了“#允许已经建立和相关的数据包出去” 下面同理

    #http
    iptables -A INPUT -P tcp --dport 80 -j ACCEPT #打开 https 需要用到的 443 端口,用户以 https 方式访问是使用

    #mysql
    iptables -A INPUT -p tcp --dport 3306 -j ACCEPT #主要用于 mysql workbench 远程数据管理,虽然知道不安全,但是有这么个坏习惯, 尽量使用比较复杂的用户名+密码,屏蔽 root ,应该也还行

    #ss.rules
    #ss
    iptables -A INPUT -P tcp --dport 8989 -j ACCEPT #允许 ss 从 8989 建立连接,然后 output 同 #app.rules
    #@@ 问题二:不知道这个规则能否应付 ss 的需求,对这个部分没有概念,是不是还要做对应的 forward 配置?求解说谢谢。


    ###Option rules
    #opt.web access, 从服务器访问其他网站,如果问题二的功能不需要这个部分支持,这里就不会配置
    iptables -A OUTPUT -p udp --dport 53 -j ACCEPT #打开 DNS 需要用到的 53 端口
    iptables -A OUTPUT -P tcp --dport 443 -j ACCEPT #访问其他服务器的 https
    #没有配置 input 是因为上面有了“#允许已经建立和相关的数据包进入” 下面同理
    iptables -A OUTPUT -P tcp --dport 80 -j ACCEPT #访问其他服务器的 http
    #@@ 问题三,原则上 web 服务器不需要使用这些功能,但是我对 53 端口有疑问,如果要使用 ping baidu.com 和 wget http://baidu.com/a.zip 这种功能是不是最少也要打开 output 的 53+80 ? 因为中间有域名 ip 转换的需要这个应该是需要通过 53 发包出去,然后 wget 的时候应该需要通过 80 发包出去


    ###Adv
    #adv.basic
    iptables -A FORWARD -f -m limit --limit 100/sec --limit-burst 100 -j ACCEPT #处理 IP 碎片数量,防止攻击,允许每秒 100 个
    iptables -A FORWARD -p icmp -m limit --limit 10/s --limit-burst 10 -j ACCEPT #设置 ICMP 包过滤,允许每秒 1 个包,限制触发条件是 10 个包
    #@@ 问题四:这里是不是应该还有其他策略?欢迎补齐


    ##Forbid Rest
    iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
    iptables -A OUTPUT -j REJECT --reject-with icmp-host-prohibited
    iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    # 意思是在 INPUT 表, OUTPUT 表和 FORWARD 表中拒绝所有其他不符合上述任何一条规则的数据包。并且发送一条 host prohibited 的消息给被拒绝的主机。
    #@@ 问题五:据说这样比直接 drop 要好点?我觉得有了上面的 basic.ssd and basic.ftp 已经可以做到不死之身了吧?欢迎指出差别



    ###Save and apply
    service iptables save #保存配置
    service iptables restart #重启 iptables

    #################################### 结束下面为讨论部分 ####################################



    #@@ 问题 6:之前的规则里还有这 2 条没看懂
    -A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN
    -A syn-flood -j REJECT --reject-with icmp-port-unreachable


    # @@ 问题7 还想问问这2个写法的区别,第一种会自动补全 -m tcp吗?
    -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
    第 1 条附言  ·  2016-12-15 09:53:35 +08:00
    目前尚无回复
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1015 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:00 · PVG 02:00 · LAX 11:00 · JFK 14:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.