iptables和netfilter是一组网络防火墙工具,netfilter是一个规则过滤框架,iptables是一个生成规则并且可以附在netfilter上实现数据报文,NAT,mangle的工具,在说网络防火墙之前需要先了解一下网络相关的知识,网络本身是一门很复杂本篇也不可能完全讲的清楚,这里凭借着几年前研究LVS的知识简单说说tcp ip报文首部。
    ip报文首部

    image.png

    Ip version:ip版本
    Hdr Len:报文首部长度(实际上要乘以4才是真正首部长度)
    Type of Service:服务类型
    Total Length:报文总长度,报文总长度-首部长度=报文数据(对于ip报文来说数据里面包含了tcp首部,对于http协议数据里面应该也含有http首部对于ip来讲一律将其视为数据)
    Identification:段标识符,如果两个设备所支持的报文大小不相等需要对数据报文进行分片,当达到目标主机上根据段标识id相等判断进行合并分片
    MF:More Fragment更多分片
    DF:Don’t Fragment不允许分片,发不出去直接返回错误信息
    R:
    Fragment Offset:段偏移量,当合并分片的时候按照偏移量进行次序合并
    Time-To-Live:生存时间,当报文发送至网络如果循环路由那么这个报文就会一直在网络上游荡,为了避免这种情况报文每经过一个路由将TTL值减1 直到为0如果还没有到达目标主机则丢弃
    Protocol:协议,标记不同协议类型
    Header Checksum:首部校验和,存放首部校验码客户端通过校验码校验报文的完整性
    Source IP Address:源ip
    Destination IP Address:目标ip
    Options:可变报文可变数据
    Data:数据
    ip首部控制将报文从一台主机发往另一台主机中间可能会经由很多设备比如路由器、交换机等等发往目标主机,最终通讯的就是两台主机的进程,通过靠ip地址和端口号区分主机的不同进程。所以众多的上层应用协议都是基于tcp或udp协议的再次封装以标记两台主机通讯的进程,于是有了tcp首部
    tcp报文首部

    image.png

    Source Port Number:源端口,(当数据报文流动方向不同是时候源端口和目标端口会发生翻转)
    Destination Port NUmber:目标端口
    Sequence Number:序列号,tcp三次握手;发送方发送给接收方的编号
    Acknowledgement Numer:确认号,接收方将发送方序列号+1并回复给发送方的确认编号
    Header Length:报文首部长度
    Reserved:保留位
    URG:紧急指针
    ACK:报文确认号
    PSH:立即发送至缓冲区优先处理
    RST:重置
    SYN:同步
    FIN:断开
    Window Size:窗口大小,滑动窗口,窗口接收报文字节大小
    TCP Checksum:报文校验码
    Urgent Pointer:紧急指针
    OPtions:可选可变报文数据
    Data:数据
    iptables:
    iptables主要靠netfilter过滤表实现规则过滤,netfilter提供5个钩子函数分别工作在5个规则链上,
    input,output,prerouting,postrouting,forward,nat地址转换就是工作在prerouting,output和postrouting上
    另外还有个mangle表,原理就是拆开报文首部进行修改最后重新组装
    所以设置iptables最重要的是理解规则链和tcp ip报文,因为最终iptables是工作在规则链上将tcp ip网络报文进行过滤,关键的还是网络及tcp知识概念