ip数据包报文的结构
4bit的ip版本,4bit的首部长度,8bit的服务类型,16bit的总长度,16bit的分片id,1bit的R,1bit的DF(不分片,1bit的MF(更多分片),13bit的片偏移量,8bit的TTL,8bit的内层协议类型,16bit的首部校验和。32bit的源ip地址,32bit的目的ip地址,最长40字节的选项,数据。
总长度-首部长度=数据长度
tcp
有连接的协议
先建立tcp连接,建立了一个专用通信线路,
udp
无连接的协议
不需要事先建立连接,而是直接发送数据。
开销少,但是可靠差
tcp报文结构
16bit的源端口号,16位的目的端口号,32bit的序列号,32bit的确认号,4bit的首部长度,6bit的保留位,6bit的标志位(1bit的URG(紧急的),1bit的ACK(确认号是否有效),1bit的PSH(推送),1bit的RST(重置位),1bit的SYN(同步位,就是序列号是否有效),1bit的FIN(结束位)),16bit的tcp校验和,16bit的紧急指针,32bit的选项(可以为0),数据
tcp的三次握手
发送方发起连接请求,创建一个序列号a,接收方发送确认号a+1,序列号b。发送方发送确认号b+1,序列号b。
tcp的四次分手
主动方发送FIN位为1的请求包,被动方发送确认包。被动方发送FIN位为1的数据包,主动方发送确认包。断开完成。
窗口大小
不是固定的,是随时调整的。
tcp的状态
防火墙类型
包过滤防火墙:tcp/ip
应用层网管防火墙:对特定应用程序协议的检查,效率低
/proc/sys/net/ipv4/ip_forward
iptables 用户空间工具
编写规则
netfilter
内核中,框架(framework)
hook function
规则链(CHAIN):
INPUT 路由后到本机内部
mangle
filter
OUTPUT 路由后到本机外部
raw
mangle
nat
filter
FORWARD 转发
mangle
filter
PREROUTING 路由前
raw
mangle
nat
POSTROUTING 路由后
mangle
nat
功能(表):
raw
PRERPUTING,OUTPUT
mangle
PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat
PREROUTING,OUTPUT,POSTROUTING
filter
INPUT,FORWARD,OUTPUT
流向:
到本机
PREROUTING -> INPUT
转发
PREROUTING ->FORWARD -> POSTROUTING
由本机发出
OUTPUT -> POSTROUTING
filter
匹配条件
netfilter 检查模块
扩展模块
处理动作
ACCEPT
DROP(直接丢弃),REJECT(响应拒绝的理由)
#iptables [-t TAB_NAME] COMMAND CHAIN [CRETIRA] -j ACTION
TAB_NAME:
raw
mangle
nat
filter
COMMAND: 对链,或者对链中的规则经行管理操作
链中规则
-A 追加
-I NUM 插入为第NUM条
-R NUM|CRETIRA 替换为第NUM条或者是规则
-D NUM|CRETIRA 删除链中的第NUM条或者是规则
链:
-N 新建一个自定义链
-X 删除一个自定义空链
-E 重命名一条自定义链
-F 清空一条链中的内容,如果不指定链,则清空表中所有链
-P 设定链的默认策略
-Z 置零。每条规则都有2个计数器,1个是被本规则匹配到的所有数据包的个数,另一个是被本规则匹配到的所有的数据包的大小之和。
查看:
-L 查看
-v 详细
-vv 更详细
-vvv 进一步详细
--line-numbers
-x 计数器中显示为精确值,不做单位转换
-n 不要对地址和端口做名称反解析,显示数字地址,不是名称地址
/etc/rc.d/init.d/iptables 服务脚本脚本位置,但是iptables本身不是服务,只是做成了服务的样子
#service iptables status|start|stop|restart|save
使用save选项来保存规则。
/etc/sysconfig/iptables-config 配置文件
/etc/sysconfig/iptables 规则保存位置,默认没有此文件,需要手工新建。