iptable防火墙原理
简介
Linux 2.0 ipfs/firewalld
Linux 2.2 ipchain/firewall
Linux 2.4 iptables/netfilter (iptables 是在用户空间写规则的,neifilter工作在内核空间放置规则的位置)
netfilter是内核的一个数据包处理模块,具有如下功能:
网络地址转换
数据包内容修改
数据包过滤的防火墙功能
表和钩子函数
五个钩子函数:input output,forward,pre_routing,post_routing
表:
Mangle表:对数据进行修改,包含5条链
Raw表:,prerouting,output
Filter表:过滤 input,output,forward
Nat表:prerouting,postouting
目标地址转换是发生在路由决策前,刚进入本机的时候,源地址转换是在出去的时候。
防火墙处理数据包的方式
ACCEPT,DROP,REJECT,SNAT,DNAT
数据包路由的原理
网络数据包由底层数据包的网卡接收,通过数据链路层的捷报之后(去除数据链路层帧头),就进入了TCP/IP协议栈(本质上就是一个处理网络数据包的内核驱动)和netfilter混合的数据包的处理流程中了。
总结一下规律:
1)当一个数据包进入网卡的时候,数据包首先进入PREROUTING链,在PREROUTING链中我们有机会修改数据包的目的IP,然后内核的路由模块根据数据包的目的IP判断是否需要转出去
2)如果数据包就是进入本机的,数据包就会沿着图向下移动,到达INPUT链,数据包到达INPUT链后。任何进程都会收到它
3)本机上运行的程序发送数据包经过OUTPUT链,然后经过POSTROUTING链输出
4)如果数据包是要转发出去的,且内核允许转发,数据包就会香油移动,经过FORWARD链,然后到达POSTROUTING链输出。
iptable编写规则
-F 清除规则
-X 清除链
-t filter 指定表
-p tcp/udp
-j DROP/REJECT/ACCEPT/
-s源地址
-d 目的地址
-i eth0 从网络接口eth0进来
-o eth0 从网络接口eth0出去
--sport 源端口
--dportz 目的端口