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