Linux 防火墙iptables学习

Linux 网络数据包处理流程

image.png

iptables 用法

  • 注意事项
    iptables 设置是有顺序的,如果数据包满足前面制定的规则,那么后面的规则将不被采用,所以对于舍弃的数据包尽可能的放在接收数据包的前面,这样可以避免本来要舍弃的数据被接收。
    1. filter
      内建三个链,INPUT 、OUTPUT 、FORWARD;对数据包进行DROP、ACCEPT、LOG、REJECT等操作。
    2. nat
      仅用于NAT,用来转换源或者目的地址,用来解决ipv4地址空间不够问题,搭建局域网等,只有NAT主机具有公网ip地址,局域网内的其他主机通过重定向源或目的地址来实现外网的访问,当然也提高可内网主机的安全性,可通过防火墙禁止外网主机主动联机内网主机。

注意事项:
属于一个流的数据包只经过nat表一次。如果第一个包被允许做NAT或者Masqueraded, 那么余下的数据包会自动得做相同的操作。这也是为什么不推荐在nat表中做过滤的原因。

  • DNAT
    改变目的地址,以使包能重路由到某台主机。

  • SNAT
    改变包的源地址,可以用来复用ipv4地址。

  • MASQUERADE
    ip地址是动态的,类似于DHCP,与DNAT和SNAT固定的ip地址不同。

    1. mangle
      可以使用mangle匹配改变包的TOS 等特性,注意事项:不要在这个表中做任何过滤。mangle 表仅有的操作:
  • TOS

  • TTL
    可以让所有数据包只有一个特殊的TTL。 某些ISP可能会通过TTL来判断计算机是否共享网络,可以用来欺骗ISP

  • MARK

    1. raw
  1. INPUT
    网络数据包的目的地是本地Linux主机。
  2. OUTPUT
    网络数据包的原是本地Linux 主机。
  3. FORWARD
    由一个本地Linux 主机的一个网卡接收到的数据发到另一个网卡。
  4. PREROUTING
    路由前
  5. POSTROUTING
    路由后
  6. 自定义链
  • 状态机制
    状态机制只是一种连接状态跟踪机制,能提供更严密的安全机制。

    NEW
    INVAILD
    不能识别属于哪个 连接或者没有任何状态的数据包,通常的措施是DROP。
    ESTABLISHED
    只要发送的数据有应答,即标记为ESTABLISHED状态,无论是发往防火墙还是由防火墙转发。ICMP等数据包也看作是,只有所发出的数据包有应答信息。
    RELATED
    前提是已经有一个端口实现ESTABLISHED状态,然后这个ESTABLISHED再建立另外一个连接,这个新的连接就是RELATED。 典型的是FTP协议,一个控制端口和一个数据端口。

所有状态的改变和计算都是在nat表中的PREROUTING链和OUTPUT链里完成的: 如果本地发送一个数据包,那么会在OUTPUT链里标记状态为NEW,当本地接收到回应的包时,会在PREROUTING中标记为ESTABLISHED状态。

  • 常用命令
    1. 观察规则
      iptables [-t tables] -L [-nv]
      -t : 省略此项,默认是filter; 还可使nat、 filter
      -L : 列出当前tables的规则
      -n : 不进行IP 和 HOSTNAME 的 反查,显示速度比较快
      -v : 显示详细信息
      --line-numbers 查看规则时显示相应的序号


    2. 删除规则
      其中的filter可以换成其他表。
      iptables -t filter -F #删除所有已定的规则
      iptables -t filter -X #除掉所有用户“自定义”的链(tables)
      iptables -t filter -Z #所有链的计数与流量统计清零
      -D 删除链内指定序号或内容的规则

    3. 默认策略
      iptables [-t nat] -P [INPUT, OUTPUT, FORWARD] [DROP, ACCEPT]
      -P : 定义策略policy
      DROP :偷偷丢弃数据包
      ACCEPT: 接收数据包
      当数据包不在制定的规则中,则采用默认策略。 一般严格设置的话,将输入的数据包全部丢弃,输出的数据包和转发的数据包全部接收。

      iptables -P INPUT DROP
      iptables -P OUTPUT ACCEPT
      iptables -P FORWARD ACCEPT
      
  1. TCP连接

  2. UDP

  3. ICMP
    ICMP包有很多类型,但只有四种类型有应答包,它们是回显请求和应答(Echo request and reply),时间戳请求和应答(Timestamp request and reply),信息请求和应答(Information request and reply),还有地址掩码请求和应答(Address mask request and reply),这些包有两种状态,NEW和ESTABLISHED 。


    ICMP 1

ICMP的另一个非常重要的作用是,告诉UDP、TCP连接或正在努力建立的连接发生了什么,这时ICMP应答被认为是RELATED的。主机不可达和网络不可达就是这样的例子。当试图连接某台机 子不成功时(可能那台机子被关上了),数据包所到达的最后一台路由器就会返回以上的ICMP信息,它们就 是RELATED的,如下图:


ICMP 2

参考文献

鸟哥的Linux 私房菜 服务器架设篇
iptables 指南 1.1.19

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容