iptables
iptables架构图
![image]()
iptables防火墙
	1. 什么是防火墙
	防止别人恶意访问。
	2. 防火墙种类
	2.1硬件防火墙
		F5
	2.2软件防火墙
		iptables
		firewalld
	安全组
iptables基本介绍
用户  --->  调用iptables  --->  ip_tables内核模块  --->  Netfilter(系统安全框架) --->  过滤请求
![image]()
包过滤防火墙
1、什么是包
	在数据传输过程,并不是一次性传输完成的;而是将数据分成若干个数据包,一点一点的传输。
2、 什么是包过滤防火墙
	过滤数据包的防火墙。
	ps:通过系统安全框架,过滤数据包。
Iptables链的概念
四表五链
1、那四个表,有哪些作用
    具备某种功能的集合叫做表。
    filter:  负责做过滤功能呢	:    	INPUT、OUTPUT、FORWARD
    nat:	 网络地址转换	      		PREROUTING、INPUT、OUTPUT、POSTROUTING
    mangle:	 负责修改数据包内容	      PREROUTING、INPUT、OUTPUT、POSTROUTING、FORWARD
    raw:	 负责数据包跟踪              	PREROUTING、OUTPUT
2、那五条链,运行在那些地方
    PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING
    1) PREROUTING: 主机外报文进入位置,允许的表mangle, nat(目标地址转换,把本机地址转换为真正的目标机地址,通常指响应报文)
    2) INPUT:报文进入本机用户空间位置,允许的表filter, mangle
    3) OUTPUT:报文从本机用户空间出去的位置,允许filter, mangle, nat
    4) FOWARD:报文经过路由并且发觉不是本机决定转发但还不知道从哪个网卡出去,允许filter, mangle
    5) POSTROUTING:报文经过路由被转发出去,允许mangle,nat(源地址转换,把原始地址转换为转发主机出口网卡地址)
    流入本机:PREROUTING  -->  INPUT  --> PROCESS(进程)
    经过本机:PREROUTING  --> FORWARD --> POSTROUTING
    从本机流出:PROCESS(进程) -->  OUTPUT --> POSTROUTING![image]
Iptables流程图
流入本机: A  --->  PREROUTING  --->  INPUT ---> B
流出本机:OUTPUT  --->  POSTROUTING  ---> B
经过本机: A ---> OUTPUT ---> POSTROUTING | ---> PREROUTING ---> FORWARD  ---> POSTROUTING ---> C ---> PREROUTING  ---> INPUT ---> B
filter :  INPUT 、FORWARD、 OUTPUT 
nat : PREROUTING 、 INPUT、 OUTPUT、 POSTROUTING
raw : PREROUTING、 OUTPUT
mangle : PREROUTING INPUT FORWARD OUTPUT POSTROUTING
![image]()
Iptables的使用
1、安装Iptables
	[root@m01 ~]# yum install iptables*
2、启动Iptables
	[root@m01 ~]# systemctl start iptables
3、关闭firewalld
	[root@m01 ~]# systemctl disable --now firewalld
格式:iptables -t 表名 选项 链名称 条件  动作
-t:				   指定操作的表
-L, --list			列出当前的规则
-v				    显示数据包和数据包大小
-n                   不反解地址
-A, --append		追加一条规则到链中
-I, --insert		插入一条规则,插入到顶部
-F, --flush			清空
-Z, --zero			清空计数器(  包数量 、包大小)
-D, --delete		删除链中的规则
-R, --replace		修改
-S, --list-rules	列出所有的规则
-N, --new-chain		创建一个自定义 链
-X, --delete-chain	删除一个自定义链
-P, --policy		指定链的默认策略  
iptables动作
ACCEPT		将数据包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链。
REJECT 		拦阻该数据包,并传送数据包通知对方。
DROP 		丢弃包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
REDIRECT	将包重新导向到另一个端口,进行完此处理动作后,将会继续比对其它规则。
iptables基本条件匹配
TCP(http)
UDP
ICMP(ping)
ALL
-s,-d源地址,目标地址
源地址:发送请求的地址
目标地址  : 访问的地址
--sport源端口,--dport目标端口
源端口:发送请求的端口
目标端口:访问的端口
-i、-o、-m、-j  动作
-i : 进来的网卡
-o : 出去的网卡
-m : 指定模块
-j : 转发动作
-p :指定协议
iptables模块
拓展iptables的功能的。
-m : 指定模块
1、连续匹配多个端口(multiport)
	--dports  : 指定多个端口(不同端口之间以逗号分割,连续的端口使用冒号分割)。
        iptables -t filter -A INPUT -p TCP -m multiport --dports 22,80,443,30000:50000 -j ACCEPT
	
2、指定一段连续的ip地址范围(iprange)
    --src-range from[-to]:	源地址范围
    --dst-range from[-to]	目标地址范围
    iptables -t filter -A INPUT -p TCP -m iprange --src-range 192.168.15.1-192.168.15.10 -j ACCEPT
3、匹配指定字符串(string)
    --string pattern	# 指定要匹配的字符串
    --algo {bm|kmp}		# 匹配的查询算法\
    iptables -t filter -A INPUT -p TCP -m string --string "HelloWorld" --algo kmp -j DROP
    
4、根据时间段匹配报文(time)(utc时间)
    --timestart hh:mm[:ss]		# 开始时间
    --timestop hh:mm[:ss]		# 结束时间
    --monthdays day[,day...]	# 指定一个月的某一天
    --weekdays day[,day...]		# 指定周 还是  周天
    iptables -t filter -A INPUT -p TCP -m time  --timestart 4:00   --timestop 5:00 -j DROP 
    
5、禁ping, 默认本机无法ping别人 、别人无法ping自己
	--icmp-type {type[/code]|typename}
		echo-request  (8) 请求 
		echo-reply    (0) 回应
        iptables -t filter -A INPUT -p TCP -m icmp --icmp-type "echo-request" -j DROP
6、限制链接数,并发连接数(connlimit)
    --connlimit-upto n		#  如果现有连接数小于或等于  n  则 匹配
    --connlimit-above n		#  如果现有连接数大于n 则匹配
    iptables -t filter -A INPUT -p TCP --dport 22 -m connlimit --connlimit-above 2 -j DROP
7、针对 报文速率 进行限制。 秒、分钟、小时、天。
     --limit rate[/second|/minute|/hour|/day] # 报文数量 
     --limit-burst number  # 报文数量(默认:5)
     iptables -t filter -A INPUT -p TCP -m limit 333/s -j ACCEPT