iptables使用详解( 四 )

匹配指定链接状态的数据包链接状态有以下几种:

  • NEW:新创建的连接
  • ESTABLISHED 已经建立的连接
  • RELATED:跟已经创建的连接相关的连接
  • INVALID:非正常状态
  • DNAT:如果一个连接其目标地址被nat表PREROUTING链中的规则修改了 , 即是这个状态
  • SNAT:如果一个连接其源地址被nat表中的规则修改了 , 即是这个状态
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT即只对已经建立的连接和由此产生的相关连接进行放行
【iptables使用详解】有些版本的linux , 对应的module不是conntrack , 而是state 。对应指定状态的参数不是ctstate 而是--state 。所以 , 上述写法在有些linux版本中需要替换成
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT一般来讲 , 这些规则不可能单独出现 , 如果都不允许任何NEW状态连接建立 , 那哪来的已建立连接和相关连接?所以正确的做法一般是:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT //这条规则允许已经建立的连接和相关连接iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT //新建链接如果是访问22号端口 , 则允许访问改变某个链的默认规则一般每个链都有默认规则 , 即该链没有任何规则或者没有任何一条规则被匹配的情况下 , 对数据的放行策略是怎么样的 。
Chain INPUT (policy ACCEPT)...Chain FORWARD (policy ACCEPT)...Chain OUTPUT (policy ACCEPT)..以filter表的三个链为例 , 默认是ACCEPT 。但是我们可以改变这个模型规则 , 比如默认规则就是DROP
iptables -t filter -P INPUT DROP回环地址的访问始终允许iptables -t filter -A INPUT -i lo -j ACCEPT //在本地网络通信的所有包 , 都放行-i 表示input 输入网口 。lo表示本地的网络接口 。这里没有指定-s-d地址  , 表示在回环网络上通信的所有端口 , 都放行 , 这样我们本机的web service , 访问本机的mysql数据库才不会有问题 。当然一般INPUT的默认规则是ACCEPT , 你不用配置上述的规则 , 只要没有其它规则去限制 , 那么本机回环地址之间的端口通信也是放行的 , 除非你对INPUT链默认开启了拒绝策略
在使用某个网络时 , 不响应请求iptables -A OUTPUT -o wlan0 -d 121.18.238.0/29 -j DROP上述配置含义:所有发给目标网口是wlan0 且 目标ip是121.18.238.0/29 地址的包 , 都会被丢弃 。-o 表示 数据包的目标网口 。
在linux命令行中 , 使用ifconfig,就能看见当前已连接的所有网络接口
iptables使用详解

文章插图
规则的取反配置上述规则配置 , 一般都是满足某某条件 , 做什么动作 。除此之外 , 我们还可以配置 , 如果不满足某某条件 , 则做某个动作 。
iptables -A INPUT -p tcp -m multiport ! --dports 22,80,443 -j DROP这个不满足则的取动作 , 是通过感叹号来实现的 。上述命令的含义是:非22,80,443的端口 , 我们直接丢弃 。
当然这条命令之前 , 应该要配置一条规则:

经验总结扩展阅读