iptables概念
一、 iptables的前身叫ipfirewall(内核1.x时代),这是一个作者从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具。但是ipfirewall工作功能极其有限(它需要将所有的规则都放进内核当中,这样规则才能够运行起来,而放进内核,这个做法一般是极其困难的)。当内核发展到2.x系列的时候,软件更名为ipchains,它可以定义多条规则,将他们串起来,共同发挥作用,而现在,它叫做iptables,可以将规则组成一个列表,实现绝对详细的访问控制功能。
二、他们都是工作在用户空间中,定义规则的工具,本身并不算是防火墙。它们定义的规则,可以让在内核空间当中的netfilter来读取,并且实现让防火墙工作。而放入内核的地方必须要是特定的位置,必须是tcp/ip的协议栈经过的地方。而这个tcp/ip协议栈必须经过的地方,可以实现读取规则的地方就叫做 netfilter.(网络过滤器)
三、内核空间的5个位置
- 内核空间中:从一个网络接口进来,到另一个网络接口去的
- 数据包从内核流入用户空间的
- 数据包从用户空间流出的
- 进入/离开本机的外网接口
- 进入/离开本机的内网接口
linux的防火墙iptables
netfilter(iptables)
- netfilter --工作在内核软件,实现数据包的过滤。
- iptables --工作应用层一个软件,用来控制netfilter。
1.netfilter/iptables包过滤防火墙(tcp/ip四层)
1)应用层 --通过软件为用户提供接口
2)传输层 --提供可靠或不可靠的数据传输(TCP/UDP)使用端口来标示服务类型 sport dport
3)网络层 --提供路由和选址(icmp) sip dip
4)数据链路层 --传输数据帧(MAC) s _mac arp写 在局域网内泛洪 来找到我们对应的MAC
5)物理层 --传输透明比特流 eth0 eth1
过滤的依据: s_mac/sip/dip/sport/dport/状态(三次握手/四次断开)SYN DDOS攻击怎么防御我们DDOS 小流量
netfilter的逻辑架构: nat 10
netfilter防火墙的元素及关系:
netfilter==>表==>链==>规则
三张表:
filter 防火墙表,允许和拒绝都在这里实现
nat 地址转换
mangle 数据包整形
五条链:
INPUT 本机进站的数据流 (路由前)
OUTPUT 本机出站的数据流 (数据包流入口)
FORWARD 路由的数据流 (转发管卡)
POSTROUTING 路由后的数据流(数据包出口)
PREROUTING 路由前的数据流 (路由后)
注意:这是NetFilter规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链。
表跟链的对应关系:
- filter: INPUT——OUTPUT——FORWARD
- nat: OUTPUT——PREROUTING——POSTROUTING
- mangle: INPUT——OUTPUT——FORWARD——PREROUTING——POSTROUTING
四种数据流:
本机进站的数据流:packet–>ethX–>PREROUTING–>INPUT–>本机
本机出站的数据流:packet–>OUTPUT–>POSTROUTING–>ethX–>destination
路由的数据流:
出去: packet–>eth0–>PREROUTING–>FORWARD–>POSTROUTING–>eth1–destination
回来: packet–>eth1–>PREROUTING–>FORWARD–>POSTROUTING–>eth0–destination
本机访问本机: 本机–>packet–>lo–>PREROUTING–>INPUT–>本机
- 表的匹配顺序:mangle–>nat–>filter
- 防火墙规则匹配顺序:
- 按顺序匹配,如果第一条匹配到了就直接执行这条规则的动作,不往下匹配其它规则。
- 如果第一条匹配不到,第二条也匹配不到,继续往下匹配直到找到匹配的规则,如果找不到匹配默认规则。
传输层:协议(tcp/udp)
端口(sport/dport)
网络层:IP地址(sip/dip/icmp) ping
数据链路层: mac地址(–mac-source)
物理层: 从哪个网卡进来 -i eth0 eth1 服务器2个地址 外网地址 一个内网地址
iptables操作命令
#iptables --help
Usage: iptables -[AD] chain rule-specification [options]
iptables -[RI] chain rulenum rule-specification [options]
iptables -D chain rulenum [options]
iptables -[LFZ] [chain] [options]
iptables -[NX] chain
iptables -E old-chain-name new-chain-name
iptables -P chain target [options]
iptables -h (pri