iptables防火墙设置-语法

今天心情不好,果然,放个歌的链接都有问题

相信看了前面的还是不懂怎么写,其实前面的只是以讲故事的方式了解了一下表和链,以及简单的添加和删除


man page中规则的写法已经写的很详细了

这里总结一下:

iptables -t 使用什么表 -增加/删除/修改 那条链 (数字) -p 协议 -s 目标地址 -j 丢弃/接收

当然了,也不是每条规则都需要写这么多参数的.只要能达到目标即可,比如说:我想阻止所有的tcp请求(默认是filter表可以不写,-I默认写入到规则列表最上面,后面数字也不必写,已经阻止所有tcp请求了,ip地址也不需要写)

sudo iptables -I INPUT -p tcp -j DROP

上面这条规则写完后,你会惊喜的发现你已经打不开百度网页了.为什么呢?我只阻止了tcp请求啊,跟服务器给我发消息有什么关系呢?tcp协议是有三次握手的,网页传输正好使用了tcp协议,我们给服务器发送一个请求后,服务器会给我们回一个请求,可是我们阻止了所有的tcp请求,自然无法完成握手,也就无法打开网页了.打不开网页多可怕,所以把上面的规则删掉

sudo iptables -D INPUT 1

下面正式写语法:

  • 新增规则

    iptables [-t table] -A chain rule-specification 
    iptables [-t table] -I chain rulenum rule-specification
    iptables [-t table] -N chain
    • rule-specification表示指定规则,比如说指定ip,指定协议,指定动作这些
      rule-specification =[matches...] [target]
      • match = -m matchname [per-match-options]
        举个例子:match为-p tcp 或者 -s 192.168.0.12
      • target = -j targetname [per-target-options]
        举个例子:target为-j DROP 或者 -j ACCEPT
    • [-t table]表示可选,可以写,可以不写(如果是filter表就不需要写,其它表是必须写的)
    • -A参数与-I参数区别:A表示append/add,新增或在已有规则后面添加.I表示insert,插入到指定位置,可以将规则写入到表中的任意位置,这个位置就是后面的rulenum决定的.
    • -N表示添加用户自定义的链
    • targetname表示对规则的处理,有accept接收/drop丢弃/return暂存
  • 删除规则

    iptables [-t table] -D chain rulenum
    iptables [-t table] -F
    iptables [-t table] -X
    • -D删除rulenum所指的规则
    • -F删除指定的整个表的规则
    • -X删除用户自定义的表
  • 查看规则

    iptables [-t table] -C chain rule-specification
    iptables [-t table] -L [chain [rulenum]]
    iptables [-t table] -S [chain [rulenum]]

    -Ccheck检查是否存在规则,存在不给提示,不存在给出提示
    -L-S区别:L显示的信息全面,S显示简略信息
    常用的查看规则(显示排序数字): sudo iptables -nvL --line-numbers

  • 修改规则

    iptables [-t table] -R chain rulenum rule-specification
    iptables [-t table] -E old-chain-name new-chain-name
    iptables [-t table] -P chain target
    • -Rreplace替代rulenum指定的规则

    • -Erename修改用户自定义链的名字

    • -Ppolicy修改iptables默认链的规则,target只有drop和accept这两种情况
      举个例子:
      我们的个人电脑一般是不会用来做路由的吧,路由转发这种事是服务器和路由器做的,所以forward这条链对我们的作用几乎为零,那我们就可以将链的规则修改为丢弃

      sudo iptables -P FORWARD -j DROP
  • 清除所有链/指定链/指定规则的数据包统计

    iptables [-t table] -Z [chain [rulenum]]

    清除数据之前

清除数据之后


over over语法已经完了
想想和mysql的增删改查好像没多大区别吧,其实语法写起来简单,难的是rule-specification的写法,就比如说可以ping别的主机且不允许被ping,就需要了解icmp-type的相关知识了.