IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    iptables中开启443端口的正确姿势

    jakes发表于 2015-09-10 07:34:28
    love 0

    今天搬迁博客的时候,在新的VPS中无法正常使用https访问。本来应该不会出错的,因为所有的配置文件都是从原来的环境中搬迁过来的,而且新的VPS也没有什么其它的变更。多次修改配置文件无果后用telnet尝试链接443端口看看。

    telnet gkc.asia 443

    执行显示Connection refused.

    Trying 153.92.43.112...
    telnet: connect to address 153.92.43.112: Connection refused

    连接拒绝,应该是防火墙挡住了。去检查一下防火墙的规则发现实际上我已经配置好了443端口,但实际测试规则并没有生效。

    关掉防火墙后一切访问皆正常了,问题应该在防火墙规则上。分析一下iptables的规则

    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [6490:2419247]
    -A INPUT -i lo -j ACCEPT
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
    -A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 3306 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 3306 -j DROP
    -A INPUT -p tcp -m tcp --dport 888 -j ACCEPT
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT

    前三个是默认策略没有问题

    -A INPUT -i lo -j ACCEPT

    这条表示网络接口lo的访问的所有连接都接受。

    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

    表示与主机发送出去的数据包相关或已经建立连接的数据包都允许通行。

    -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

    -p tcp 表示tcp协议

    -m tcp 表示装入tcp模块

    -dport 80表示针对80端口

    以上选项的组合就表示为在80端口上的tcp协议传入的数据包允许接收。

    -A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 3306 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 3306 -j DROP

    127.0.0.1/32网段的主机发到3306的数据包接收,其它拒绝

    -A INPUT -p tcp -m tcp --dport 888 -j ACCEPT

    888端口开放,这是给科学上网工具ss开放的端口

    -A INPUT -p icmp -j ACCEPT

    允许 ping

    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

    开放22端口(SSH)和443(HTTPS),-m state表示加载state状态模块,--state NEW表示允许新建立连接的数据包通过

    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited

    表示拒绝所有的数据包,并回应说主机被封锁。一般这两条是要放在最后的。

    到这里其实原因已经很明确了!

    -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

    这条策略被放在了 -A INPUT -j REJECT --reject-with icmp-host-prohibited 之后,导致之后的所有策略都被无效。自然443端口就无法传入数据包了。而且上面规则的显示中有大量的相同规则,整理下,修改后更新配置就可以通过HTTPS来访问了。

    新策略如下:

    iptables -F 
    # 先清除所有策略
    # 填加新的策略
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
    iptables -A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 3306 -j ACCEPT
    iptables -A INPUT -p tcp -m tcp --dport 3306 -j DROP
    iptables -A INPUT -p tcp -m tcp --dport 888 -j ACCEPT
    iptables -A INPUT -p icmp -j ACCEPT
    iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
    iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
    iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    
    # 保存到文件
    service iptables save
    # 更新防火墙策略
    service iptables reload

    系统是CentOS 7



沪ICP备19023445号-2号
友情链接