iptables 限制访问规则

时间:2020-12-26 07:00:26
  • iptables -I INPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
    把这条语句插在input链的最前面(第一条),对状态为ESTABLISHED,RELATED的连接放行。
    这条规则在某种情况下甚至比下面开放ssh服务都重要:① 如果INPUT连默认为DROP,② INPUT链默认为INPUT,但存在这条规则-A INPUT -j REJECT --reject-with icmp-host-prohibited,上面两种情况下都必须添加--state RELATED,ESTABLISHED为第一条,否则22端口无法通行,把自己锁在防火墙外面了。
    有了这条规则,可保证只要当前ssh没有关闭,哪怕防火墙忘记开启22端口,也可以继续连接。

  • iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    允许所有,不安全,默认。

  • iptables -A INPUT -s 172.29.73.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    限制指定IP范围能SSH,可取

  • iptables -A INPUT -s 10.30.0.0/16 -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
    允许一个IP段访问多个端口

  • iptables -A INPUT -s 10.30.26.0/24 -p tcp -m tcp --dport 80 -j DROP
    禁止某IP段访问80端口,将-j DROP改成 -j REJECT --reject-with icmp-host-prohibited作用相同。

iptables -A INPUT -s 172.29.73.23 -j ACCEPT
完全信任某一主机,尽量不使用

iptables -I INPUT 2 -i lo -j ACCEPT
允许loopback。回环接口是一个主机内部发送和接收数据的虚拟设备接口,应该放行所有数据包。指定插入位置为 2 则之前该编号为 2 规则依次后移。

  • -A INPUT -p icmp -j ACCEPT
    接受icmp数据包,可以ping。也可以设置只允许某个特定的IP,见后文。

iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
这条规则用在INPUT链默没有DROP的情况,作用与-P DROP相同,当前面所有的规则都没匹配时,自然落到这个 REJECT 上。
类似的FORWARD链也可以这么用:iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited

当然,更强的规则是将OUPUT链也设置成DROP,这样一来情况就会复杂很多,如就是发送名解析请求,也要添加规则iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
正是因为这样的太过麻烦,所以一般OUTPUT策略默认为ACCEPT。(安全性比较高的系统除外)