iptables/netfilter是一组工具
netfilter:是内核中的一个过滤框架,规则生效位置的框架
iptables:是一个能生防火墙规则,并能将规则附加在netfilter上的,真正实现数据报文过滤和规则生成的工具
网络:IP报文首部
①ipv4(4bit) Hdr Len首步-长度(4bit) type of service(8bit) total lenght(16bit)
②Identification(Fragment ID 16bits)段标识:数据报文传在网络传输的时候,如果两个网络设备之间支持接收的数据报文大小不同的时候,要
实行分片机制,所以每个分片的报文都有一个标识符,从而实现在对端设备进行重组
MF:更多的分片;DF:不进行分片;R:返回错误信息; Fragment Offset:片偏移量 0表示第一个
③Time-To-Live(TTL 8bits) 生存时间
Protocol(8bits)协议:tcp ucp icmp(互联网控制消息协议)
Header首部校验和Checksum(16bits):存放报文首部检验码,接收方可通过首部校验码查看首部报文是否有问题
④Source IP Address源IP地址(32bits): 源IP地址信息
⑤Destination IP Address(32bits): 目的IP地址信息
⑥Options:可变长度,可选数据
⑦Data:数据
IP实现主机和主机的通信,进程间是通过端口通信,因为linux一切接文件,所以每打开一个端口就会生成一个套接字文件
TCP报文首部
①Source Port Number(16bits)源端口:报文发送方的端口
Destination Port Number(16bits)目的端口:接收方的端口
②Sequence Number(32bits)序列号:发送方告诉接收方自己发送报文的编号
③Acknowledgement Number(32bits)确认号:接收方将接收到的每个报文在序列号的基础上+1并发送给对方来告诉对方自己收到了
④Header Length(4bits)首步-长度
Reserved(6bit)保留位;
URG紧急指针位:如果等于1表示有效
ACK确认号:用来说明确认号是否有效
PSH推送:一旦出现推送,那说明这个报文不能停留在缓存中了。需要内核优先处理
RST重置位
SYN同步请求:请求连接的第一个报文
FIN断开连接的
Window Size窗口大小(16bits)
⑤TCP Checksum(16 bits)TCP报文首部校验和
⑥Urgent Pointer(16 bits)紧急指针
⑦Options可选长度
⑧Data
tcp三次握手的三种状态:
具体三次握手的过程在百度网盘的IPtables学习资料中
①客户端第一次向服务器发起请求的时候状态由closed转换为syn_sent
②服务器在响应客户端的请求之前状态由Listen转化为syn_reserved
③客户端再次向服务端发起请求之后服务端的状态由syn_reserved转化为ESTABLISHED,之后开始传输数据
对TCP协议来讲这三种状态结合起来叫做:TCP有限状态机
tcp四断开的四种状态:
①客户端向服务器发送FIN位,这个时候客户端为主动断开方,服务器为被动段开方,客户端的状态由ESTABLISHED转换为TIME_WAIT1
②服务端接收到报文后会向客户端发送ACK位
③服务端向客户端发送FIN位请求断开,这个时候服务端的状态由ESTABLISHED转换为closed_wait,而客户端的状态转换为time_wait2
④客户端会接收到服务端的FIN报文后,会向服务端发送ACK确定断开,这个时候服务端的状态由closed_wait转换为last_ack
这个过程我们叫做TCP的状态转移
防火墙简述:
对于计算机网络来讲,防火墙可能工作在主机或者是网络的边缘(数据报文进出的地方),对进出的报文进行检查监控,并且根据事先定义的规则
匹配报文,一旦符合规则的标准那么久采取由这个规则所定义的处理动作处理报文。能够完成这一套流程的机制我们称之为网络防火墙或者主机防火
墙
规则:匹配标准和处理办法(能够具体定义TCP各种状态的规则)
默认规则:
堵:默认任何报文都能够进入只有符合规则的报文才被阻挡
通:默认任何报文都无法进入只有符合规则的报文才能够进来
Linux防火墙详解:
在Linux下防火墙是工作在内核空间中的,工作在内核空间的TCP/IP协议栈的几个位置中,这几个位置开放给linux用户空间的一个命令,这个命令
负责管理防火墙
netfilter会给内核TCP/IP协议栈的三个位置提供过滤框架:
本机接收报文(input) 本机发出报文(output) 本机转发报文(forward)
这三个框架就是hook function(钩子函数),任何一个报文经过这三个框架的时候都会被吊起来。进行匹配是否符合规则(其实还有两个函数,分别在
报文在刚到网卡的时候(prerouting)和报文由网卡转发出去(postrouting)的时候)
五个钩子:PREROUTING INPUT OUTPUT FORWARD POSTROUTING
每一个钩子函数上存放多条规则我们称之为规则链
Iptables由4个表和五个链组成
filter(过滤):INPUT OUTPUT FORWARD
NAT(地址转换):POSTROUTING PREROUTING OUTPUT
mangle(将报文拆分修改在合并):PREROUTING INPUT OUTPUT FORWARD POSTROUTING
raw(不对报文做任何的修改):PREROUTING OUTPUT
****表包含链,而链包含规则 表的生效范围:raw>mangle>nat>filter
iptables可以使用自定义链,但只有在调用时才能被发挥,而且如果没有被自定义链中的任何规则匹配,还应该有返回机制,用户可以删除自定义的
空链如果不空是删除不了的。默认链不能被删除
每个规则都有两个内置的计数器
①被匹配的报文个数
②被匹配的报文体积之和
匹配标准:
通用匹配
-s --src 源地址或者源IP
-d --dst 指定目标地址或者目标网络
-p {tcp|udp|icmp} 指定协议
-p
-p udp
--sport
--dport
-i(input interface)ethX:指定数据报文流入的接口
-o(output interface)ethX:指定数据报文流出的接口
扩展匹配:要想实现这种匹配就必须要iptables的扩展模块才能完成的匹配
隐含扩展:不用特别指明由那个模块进行扩展,因为此时使用-p(tcp|udp|icmp)
-p
--icmp-type
0:(echo-reply)外边进站的响应报文
8:(echo-request)内部向外的请求报文
例:写一条规则允许内部能够ping通外网
iptables -t filter -A OUTPUT -d 192.168.124.0/24 -s 192.168.124.15/32 -p icmp --icmp-type 8 -j ACCEPT 请求出去报文
iptables -t filter -A INPUT -d 192.168.124.15/32 -s 192.168.124.0/24 -p icmp --icmp-type 0 -j ACCEPT 外部回应进来
外部想要ping进来规则相反:input icmp-type为8 output icmp-type为0
--sport[port-port可使用连续表示法] 源端口
--dport 目的端口
--tcp-flags mask comp 只检查mask指定的标志位,是逗号分割的标志位列表;comp表示此列表中的标志位必须为1;comp中没出现
而mask中出现的必须为0;
例:--tcp-flags mask comp SYN,ACK,FIN,RST SYN== --syn 此表示匹配tcp三次握手的第一次握手
显式扩展:必须指明由那个模块进行的扩展,在iptables中使用-m选项可完成此功能
-J target
accept
drop 悄悄丢弃
reject 不但丢弃 还给返回拒绝信息
iptables的基本语法:
iptables [-t TABLE] command CHAIN(链) [num] 匹配条件 -j 处理动作
命令:
管理规则命令
-A(append)附加一条规则,在链的尾部附加一条规则
-I(insert)CHAIN [num]:插入一条规则,插入到对应CHAIN上的第num条规则,如果省略了num表示插入到第一条
-D(delete)CHAIN [num]:删除指定CHAIN中的第num条规则
-R(replace)CHAIN [num]:替换指定CHAIN中的第num条规则
管理链命令
-F(flush)CHAIN:清空指定规则,如果指定CHAIN,则清空对应表中的所有链
-P(policy)CHAIN:设定指定链的默认策略
-N(NEW-CHAIN)CHAIN:自定义一条新链
-X(DELETE-CHAIN):删除自定义的空链,如果是非空的需要用-F清空之后在删除
-Z(ZERO-CHAIN):置零指定链中所有规则的计数器;
-E(RENAME-CHAIN):重命名自定义的链
查看类命令
-L(list)显示指定链中的所有规则
-n:以数字方式显示主机地址和端口号
-v:显示详细信息
-x(exact精确的):显示计数器的精确值
--line-number:显示规则号码的
可执行的动作(target):
ACCEPT 允许通过
DROP 丢弃包文
REJECT 拒绝通过并返回信息
DNAT 目标地址转换
SNAT 源地址转化
REDIRECT 端口重定向
MASQUERADE 地址伪装,实现源地址转换的
LOG 记录日志
MARK 给报文打上一个标记
iptables不是服务,但有服务脚本;服务脚本的主要作用在于管理保存的规则
ip_conntrack:是一个内核模块,能够实时记录当前主机上客户端服务器端彼此正在建的连接关系,并且能够追踪到连接之间处于什么状态并拥有什么样的关系
*****tcp报文是传输控制协议,是一种有状态的协议,双方在通讯过程中是要三次握手的
——————————————来自马哥课程
来源:oschina
链接:https://my.oschina.net/u/4263437/blog/4948949