Linux:网络防火墙
netfilter:Frame 内核提供的框架
IPtables:数据报文过滤:NAT mangle等规则生成工具数据,过滤放在netfilter中Frame才能生效。
IP Header 32位 版本号4位,报文首部的长度4位(需要乘以4才是首部长度,首部为32位),
Type of Service 服务类型,Total Length 报文总长度,Idetification (Fragment ID)段标识
不同设备支持的发送最大数据 进行分片
M F(more Fragment)更多的分片 D F(dont Fragment)不能分片 控制标记
Fragment Offset段偏移 报文的顺序 报文的排列顺序
Idetification段标识一样表示要将报文合并在一起,DF是不能分片,报文在互联网上发送是不能分片,如果分片报错。
Time-to-live(TTL)生存时间,protocol 协议 ,ICMP(三层半协议)网络控制协议,header Chercksum首部校验和(存放首部的校验码),
Source IP Address 源IP地址,Destination IP Address 目的地址,Options可变长度可选数据,TCP UDP通过端口号区别是哪个进程,0-1023只能管理员使用。
TCP报文首部 传输控制协议 有三次握手 有重传机子
Source Port Number 源端口号 Destination 目标端口号
sequence Number 序列号(发送方告诉接收方第一个是随机值后面依次加一) acknowledgement Nunber 确认号 (确认好加一)每一次确认加一 URG紧急指针0无效 1有效 用来说明确认号是否有效
RST 重置 抖动时重置
urgent pointer
windows Size滑动窗口用来接收和发送方的缓冲区大小
TCP Checksum 校验和
网络能够发送的数据格式:文本 二进制
被动打开 listen
请求主动打开 sent
主动发送报文 SYN=1 ack =0第一次 SYN_SENT
服务器回包 SYN=1 ACK =1 SYN_RECV
第二次发包 SYN=1 ACK=2 SYN_established
服务器回包 SYN=1 ACK=3 SYN_established
四次挥手 客户端状态 发送 FIN FIN_wait1
服务器端 close_wait ACK TIME_WAIT1
客户端等待服务器服务器数据发送完成
服务器 FIN 数据发送完成
客户端不能立即close
2*msl
closing状态
客户端 ack 断开连接 last_ack
服务器立即(closed)断开
上面为TCP的状态转移
TCP的有限状态机实现TCP的状态转移。
网络:IP报文首部,TCP协议
防火墙:硬件,软件
规则:标准
将数据报文按照处理数据,如果数据符合规则,就处理。
FRAMEWORK:
默认规则:
开放(堵非法)
关闭(通认证)
规则:匹配标准
IP:源IP,目标IP
TCP:SPORT,DSPORT SYN=1,FIN=0,RST=0,ACK=0,SYN=1,FIN=0,RST=0,ACK=1
SYN=1,FIN=0,RST=0,ACK=2(establish)
ICMP:ICMP-type 使用报文类型
数据报文过滤:
Linux2.0
ipfw/firewall
Linux2.0
ipchain/firewall
Linux2.4
iptables/netfilter
/proc/sys/net/ipv4/ip_forward是否允许转发
路由决策:进入本机网卡到tcpip协议栈然后进行决策转发。
hook:钩子函数。工作在TCPIP上的三个钩子。规则就是钩子。
nat地址转换:nat会化表
nat转换使用了5个钩子。
目标地址转换:在报文进入时更改目标地址
原地址转换:在报文离开时更改原地址
hook function:钩子函数
preouting
input
output
forward
prestrouting
规则:
PREROUTING
INPUT
PORWARD
OUTPUT
POSTROUTING
filter(过滤):表
INPUT
OUTPUT
FORWARD
nat(地址转换):表
PREROUTING
OUTPUT
POSTROUTING
mangle(拆开、修改、封装):表
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
raw(原始格式):表
PREROUTING
OUTPUT
iptables:raw :PREROUTING
mangle:PREOUTING
nat :PREOUTING
路由选择:
1 、本机应用:mangle:INPUT
filter:INPUT
1.1路由选择
raw:OUTPUT
mangle:OUTPUT
nat:OUTPUT
filter:OUTPUT
2、数据转发:
mangle:FORROUTING
fliter:FORWARD
出栈数据:
mangle:POSTROUTING
nat:POSTROUTING
500条规则
能否使用自定义规则?
可以使用自定义链,但只在被调用才能发挥作用,而且如果没有自定义链中的任何规则匹配,应该还有返回机制:
用可以删除自定义的空链
默认链无法删除
每个规则都有两个,内置的计数器:
被匹配的报文个数
被匹配的报文大小之和
规则:匹配标准、处理动作
匹配标准:
通用匹配
iptables [-t TABLE] COMMAND CHAIN [num]匹配标准 -j 处理办法
扩展匹配
-s ,--src 指定原地址
-d,--dst 指定目标地址
-p {tcp|udp|icmp}指定四层协议
-i INTERFACE:指定数据报文流入的接口
可用于定义标准的链:PREROUTING,INPUT,FORWARD
-o INTERFACE:指定数据报文流出的接口
可用于标准定义的链:OUTPUT,POSTROUTING,FORWARD
-j TARGET跳转
ACCEPT
DROP 丢弃
REJECT拒绝
隐含扩展:不用特别指明那个模块进行的扩展时使用-p {tcp|udp|icmp}
显示扩展:必须指明由那个模块进行扩展,在ipatles中使用-m选项完成此动作
iptables -t filter -A INPUT -s 192.16.0.0/16 -d 192.16.100.7 -j DROP