1.iptable介绍
- Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具
- iptables是基于内核的防火墙,功能非常强大,基于数据包的过滤!特别是可以在一台非常低的硬件配置下跑的非常好
- iptables主要工作在OSI七层的2.3.4层。七层的控制可以使用squid代理+iptables。
- iptabes:生产中根据具体情况,一般,内网关闭,外网打开。大并发的情况不能开iptables,影响性能(消耗cpu)。
2.iptables传输数据包的过程
- ① 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
- ②
如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。 - ③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。
3.四表五链
优先顺序:Raw——mangle——nat——filter
iptables名词和术语
- Netfilter/iptables
其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构。
表(tables)
表(tables)是链的容器,即所有的链(chains)都属于其对应的表(tables)
- Filter
(默认表,真正负责主机防火墙功能的)
作用:实现防火墙数据过滤功能
内核模块:iptables_filter
其所属链
INPUT链:
作用
- 负责过滤所有目标是本机地址的数据包 通俗来说:就是过滤进入主机的数据包
- 对于指定到本地套接字的包,即到达本地防火墙服务器的数据包。 FORWARD链:
作用
- 负责转发流经主机的数据包。起到转发的作用,和NAT关系很大。 LVS NAT 模式,net.ipv4.ip_forward=0
- 路由穿过的数据包,即经过本地防火墙服务器的数据包。
OUTPUT链:
作用:
处理所有源地址是本机地址的数据包 通俗的讲:就是处理从主机发出的数据包
NAT:
作用:
负责网络地址转换的,即来源与目的的IP地址和port的转换。
所属其的链
FREROUTING链:
在数据包到达防火墙时,进行路由判断之前执行的规则,作用是改变数据包的目的地址、目的端口等
OUTPUT链:
和主机放出去的数据包有关,改变主机发出数据包的目的地址。
POSTROUTING链:
在数据包离开防火墙时进行路由判断之后执行的规则,作用改变数据包的源地址,源端口等。
例如。默认笔记本和虚拟机都是局域网地址,在出网的时候被路由器将源地址改为公网地址。
应用:和主机本身无关,一般用于局域网共享上网或者特殊的端口转换相关。
工作场景
用于企业路由(zebra)或网关(iptables),共享上网(POSTROUTING)
做内部外部IP地址一对一映射(dmz),硬件防火墙映射IP到内部服务器,FTP服务(PREROUTING)
WEB,单个端口的映射,直接映射80端口(PREROUTING)
Mangle:
作用:
- 数据包重构和修改(给数据打标记,做标记)
- 主要用于修改数据包的 ToS ( Type of Service ,服务类型)、TTL (Time toLive
,生存周期)以及为数据包设置 Mark 标记,以实现 QoS(Quality of Service ,服务质量)调整以及策略路由等应用
raw :数据跟踪处理
对地址的转换
4.防火墙处理数据包的四种方式
- ACCEPT 允许数据包通过
- DROP 直接丢弃数据包,不给任何回应信息
- REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。
- LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
5.iptables命令的语法格式
注意事项
- 不指定表名时,默认表示filter表
- 不指定链名时,默认表示该表内所有链
- 除非设置规则链的缺省策略,否则需要指定匹配条件
iptables命令使用方法
iptables -t [ 要操作的表] <操作命令> [要操作的链] [规则号码] [匹配条件] [-j 匹配到以后的动作](ACCEPT运行接收该数据包,REJECT拒绝,DROP丢弃)
- iptables -I INPUT -p icmp -j ACCEPT
- iptables -D INPUT 3 #删除第三行
- iptables -I INPUT -s IP -p tcp --dport 22 -j REJECT 禁止这个源IP ssh 本主机的端口
- service iptables save 保存
- systemctl restart iptables 重启(如果不保存重启之后规则就不在了)
操作命令
- -A 在链的末尾追加规则
- -I num 插入,把当前规则插入为第几条(默认是 在开头)
- -D num 删除,明确指定删除第几条规则
- -P 设置默认策略的
- -F 清空所有规则
- -L:列出一个链或所有链中的规则信息
- -n:以数字形式显示地址、端口信息
- -v:更详细的方式显示规则信息
- -t :指定表名
查看命令
- -[vnx]L
- -L 列出规则
- -n 以数字格式显示ip和port,需要配合-L选项使用
- -v 显示信息,以详细信息显示
防火墙状态机制配置
状态集简单说明:
- NEW:表示新建立连接的数据包状态
- ESTABLISHED:表示新建立连接数据包发送之后,回复响应的数据包状态
- RELATED 表示借助已经建立的链路,发送新的连接数据包
- INVALID 无效无法识别的数据包
6.Iptable工作流程
- 1.防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
- 2.如果匹配上了规则,既明确表明是阻止还是通过,此时数据包就不再向下匹配新规则了。
- 3.如果所有规则中没有明确表明是阻止还是让这个数据包通过,也就是没有匹配上规则,则向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
- 4.防火墙的默认规则则是对应链的所有的规则执行完以后才会执行的(最后的执行的规则)
7.一个数据包经过的路径可能性
- 1.本机收到目的IP说本机的数据包:
PRE_ROUTING -> IN
- 2.收到的目的IP不是本机的数据包:
PRE_ROUTING ->FORWARD–>POST_ROUTING
- 3.本地发出去的数据包
OUT–>ROUTING