day13 iptables防火墙
一、防火墙的概述
1、什么是防火墙
防止恶意流量访问的软件就叫做防火墙。
2、防火墙的种类
软件防火墙:firewalld、iptables
硬件防火墙:F5
firewalld和iptables的区别?
firewalld更简单
firewalld底层操作的还是iptables。
iptables更底层
ptables底层操作是系统内核流量的走向。
四表五链
系统安全框架。
二、Iptables基本介绍
1、什么是iptables
iptables:防火墙软件
2、iptables防火墙应用场景
1.主机安全
2.内部共享上网
3.端口或IP转发
3、iptables防火墙注意事项
1.匹配规则是从上往下一次执行的
2.只要匹配上规则,就不会在往下执行
3.如果都没有匹配到规则,就执行默认规则
4.默认规则最后执行,默认允许所有
5.经常使用的规则往前放
4、什么是包过滤防火墙
数据包。
过滤数据包的防火墙就是包过滤防火墙
5、什么是表
filter: 负责做过滤功能:INPUT、OUTPUT、FORWARD
nat: 负责网络地址转换:PREROUTING、INPUT、OUTPUT、POSTROUTING
mangle: 负责修改数据包内容:PREROUTING、INPUT、OUTPUT、POSTROUTING、FORWARD
raw: 负责数据包跟踪:PREROUTING、OUTPUT
6、什么是链
1) PREROUTING: 主机外报文进入位置,允许的表mangle, nat(目标地址转换,把本机地址转换为真正
的目标机地址,通常指响应报文)
2) INPUT:报文进入本机用户空间位置,允许的表filter, mangle
3) OUTPUT:报文从本机用户空间出去的位置,允许filter, mangle, nat
4) FORWARD:报文经过路由并且发觉不是本机决定转发但还不知道从哪个网卡出去,允许filter, mangle
5) POSTROUTING:报文经过路由被转发出去,允许mangle,nat(源地址转换,把原始地址转换为转发主
机出口网卡地址)
![](C:\Users\Lenovo\Pictures\Camera Roll\ipatables.png)
![](C:\Users\Lenovo\Pictures\Camera Roll\iptables链的流程.png)
总结:表的作用各有不同,链的位置各有不同,表中的链就是将表的功能放到链的具体位置去执行。
7、filter表
#过滤数据包,主要作用就是阻止和允许访问
1.INPUT链:过滤流入主机的数据包
2.OUTPUT链:过滤流出主机的数据包
3.FORWARD链:负责转发流经主机的数据包
8、Nat表
#用于网络地址转换,主要作用就是端口转发和ip转发
1.OUTPUT链:过滤流出主机的数据包
2.PREROUTING链:数据包到达防火墙时进行判断,改写数据包的地址或或端口(进)
3.POSTROUTING链:数据包到达防火墙时进行判断,改写数据包的地址或或端口(出)
9、什么是规则
防火墙规则右称之为防火墙策略,主要是描述执行什么防火墙功能的记录。
10、防火墙和链之间的关系
# 防火墙表与链之间的关系
filter: 负责做过滤功能:INPUT、OUTPUT、FORWARD
nat: 负责网络地址转换:PREROUTING、INPUT、OUTPUT、POSTROUTING
mangle: 负责修改数据包内容:PREROUTING、INPUT、OUTPUT、POSTROUTING、FORWARD
raw: 负责数据包跟踪:PREROUTING、OUTPUT
链的流程:
[root@web01 ~]# iptables -vnL -t filter
filter: INPUT ------------------> FORWARD ---------------> OUTPUT
[root@web01 ~]# iptables -vnL -t nat
nat: PREROUTING ----------> INPUT ----------> OUTPUT -----------> POSTROUTING
[root@web01 ~]# iptables -vnL -t mangle
mangle: PREROUTING ---------> INPUT --------> FORWARD -------> OUTPUT --------> POSTROUTING
[root@web01 ~]# iptables -vnL -t raw
raw : PREROUTING ---------> OUTPUT
三、防火墙的增删改查(常用参数)
1、安装iptables
[root@web01 ~]# yum install iptables-services -y
2、启动iptables
[root@web01 ~]# systemctl restart iptables.service
3、常用参数
-t: 指定操作的表
-A, --append 追加一条规则到链中
-I, --insert 插入一条规则,插入到顶部
-D, --delete 删除链中的规则
-R, --replace 修改
-S, --list-rules 列出所有的规则
-Z, --zero 清空计数器( 包数量 、包大小)
-N, --new-chain 创建一个自定义 链
-X, --delete-chain 删除一个自定义链
-P, --policy 指定链的默认策略
--line-number : 防火墙规则的编号
-p : 指定对应的管理流量类型 # -p协议
TCP
UDP
ICMP : ping
ALL : 所有协议
-j : 指定动作,转发模式
ACCEPT : 允许通过
DROP : 不允许通过
-s 源地址
-d 目标地址
--sport 源端口
--dport 目标端口
-i : 进来的网卡
-o : 出去的网卡
-m : 指定模块
-j : 转发模式
# 动作
ACCEPT 将数据包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链。
REJECT 拦阻该数据包,并传送数据包通知对方。
DROP 丢弃包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
REDIRECT 将包重新导向到另一个端口,进行完此处理动作后,将会继续比对其它规则。
4、增删改查之查询
# 查
格式:iptables -t 表名 选项 链名称 条件 动作
参数:
-L, --list 列出当前的规则
-n, 禁止反向解析
-v, 显示数据包详情
-t: 指定操作的表(默认的表是:filter)
--line-number : 防火墙规则的编号
案例:
[root@web01 ~]# iptables -L
[root@web01 ~]# iptables -nL # 查看防火墙策略
[root@web01 ~]# iptables -vnL -t nat # 查看指定的表
[root@web01 ~]# iptables -vnL --line-number # 查出编号
5、增删改查之增加
# 增加
格式:iptables -t 表名 选项 链名称 条件 动作
增加参数:
-A, --append 追加一条规则到链中 # 追加:在后面增加
-I, --insert 插入一条规则,插入到顶部 # 插入:插入到前面
-p : 指定对应的管理流量类型 # -p协议
TCP
UDP
ICMP : ping
ALL : 所有协议
-j : 指定动作,转发模式
ACCEPT : 允许通过
DROP : 不允许通过
# 注意:链的匹配规则是从上到下的,一旦匹配上了就无法在往下进行匹配了。
# 追加
案例1:不允许访问本机
[root@web01 ~]# iptables -t filter -A INPUT -p ALL -j DROP # 使用-A参数
案例2:要求172.16.1.0可以访问web01,其他的请求全部拒绝
[root@web01 ~]# iptables -t filter -A INPUT -p ALL -s 172.16.1.0/20 -j ACCEPT
[root@web01 ~]# iptables -t filter -A INPUT -p ALL -j DROP
# 插入
案例3:要求在案例2的基础上,允许192.168.15.1可以访问?
在cmd输入ipconfig命令查看主机ip:192.168.15.1
[root@web01 ~]# iptables -t filter -I INPUT -p ALL -s 192.168.15.1 -j ACCEPT
案例4:只允许自己ping通自己,根据上边的题。
[root@web01 ~]# iptables -t filter -I INPUT -p ICMP -s 192.168.15.7 -j ACCEPT
6、增删改查之删除
参数:
-F, --flush 清空
iptables -F : 清除所有的防火墙规则
格式:
iptables -t [表] -D [链] [规则编号]
--line-number : 防火墙规则的编号
-D, --delete 删除链中的规则
[root@web01 ~]# iptables -vnL --line-numberr # 查询编号
[root@web01 ~]# iptables -t filter -D INPUT 1 # 指定编号删除规则
7、增删改查之修改
-R, --replace 修改
[root@web01 ~]# iptables -t filter -R INPUT 1 -p icmp -j DROP # 修改
8、例题
1、要求只有172.16.0.0网段的能够登录web01
[root@web01 ~]# iptables -t filter -I INPUT -p ALL -s 172.16.0.0/20 -j ACCEPT
[root@web01 ~]# iptables -t filter -A INPUT -p ALL -j DROP
2、访问web01的8080端口转发至80端口
[root@web01 ~]# iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
四、防火墙规则永久生效
[root@web01 ~]# service iptables save
五、iptables常用端口
multiport:连续匹配多个窗口
案例1:要求192.168.15.0/24网段的所有IP只能够访问22,80,443端口,其他的拒绝。
[root@web01 ~]# iptables -t filter -A INPUT -p tcp -s 192.168.15.0/24 -m multiport --dports 22,80,443 -j ACCEPT
[root@web01 ~]# iptables -t filter -A INPUT -p tcp -j DROP
案例2:要求192.168.15.0/24网段的所有IP只能够访问70-90端口,其他拒绝
[root@web01 ~]# iptables -t filter -A INPUT -p tcp -s 192.168.15.0/24 -m multiport --dports 70:90 -j ACCEPT
[root@web01 ~]# iptables -t filter -A INPUT -p tcp -j DROP
iprange模块:连续匹配多个IP
解释:连续匹配多个IP
参数:
--src-range from[-to]: 源地址范围
--dst-range from[-to] 目标地址范围
案例1:要求只有192.168.15.7到192.168.15.66能够通过22端口登录,其他的拒绝
iptables -t filter -A INPUT -p tcp -m iprange --src-range 192.168.15.7-192.168.15.66 -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
string模块:按照内容进行匹配
解释:按照内容进行匹配
参数:
--string pattern # 指定要匹配的字符串
--algo {bm|kmp} # 配的查询算法
案例1:要求访问的内容中包含HelloWorld的内容不允许访问,其他的可以。
iptables -t filter -A OUTPUT -p tcp -m string --string "hello" --algo kmp -j DROP
time模块(UTC):根据时间来控制访问(UTC)
解释:根据时间来控制访问(UTC)# 比正常时间少8小时
参数:
--timestart hh:mm[:ss] # 开始时间
--timestop hh:mm[:ss] # 结束时间
--monthdays day[,day...] # 指定一个月的某一天
--weekdays day[,day...] # 指定周 还是 周天
案例1:要求上午的 08:00 到 上午的 10:22 不允许访问,其他时间可以。
iptables -t filter -A INPUT -p tcp -m time --timestart 00:00 --timestop 02:22 -j DROP
icmp模块:控制icmp协议
解释:控制icmp协议
参数:
--icmp-type {type[/code]|typename}
echo-request (8) 请求(我可以ping别人,别人休想ping我)
echo-reply (0) 回应(别人可以ping我,我休想ping别人)
案例1:禁止别人ping我,但我可以ping别人
iptables -t filter -I INPUT -p icmp --icmp-type "echo-request" -j DROP
connlimit模块:控制并发数
# 控制并发数
参数:
--connlimit-upto n # 如果现有连接数小于或等于 n 则 匹配
--connlimit-above n # 如果现有连接数大于n 则匹配
ACCEPT 将数据包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链。
REJECT 拦阻该数据包,并传送数据包通知对方。
DROP 丢弃包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
REDIRECT 将包重新导向到另一个端口,进行完此处理动作后,将会继续比对其它规则。
案例1:要求登录192.168.15.5的窗口最多有两个
iptables -t filter -A INPUT -p ALL --dport 22 -m connlimit --connlimit-above 2 -j REJECT
limit模块:限制速率
# 针对 报文速率 进行限制。 秒、分钟、小时、天。
--limit rate[/second|/minute|/hour|/day] # 报文数量
--limit-burst number # 报文数量(默认:5)
网速 * 1000 / 1500 = 数据包数量
2.允许10个数据报文快速通过,超过的数据报文 1/m
iptables -t filter -A INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT
iptables -t filter -A INPUT -p icmp -j DROP
3.限速:限制传输的带宽不可以超过500k(500 * 1000 / 1500 = 333 包)
案例1:要求每秒只能够传输500k大小数据
iptables -t filter -A INPUT -p tcp -m limit --limit 333/s -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
防火墙的案例
4.对所有的地址开放本机的tcp(80、22、8080-9090)端口的访问
iptables -t filter -A INPUT -p tcp -m multiport --dports 80,22,8080:9090 -j ACCEPT
5.允许对所有的地址开放本机的基于ICMP协议的数据包访问
iptables -t filter -A INPUT -p icmp - j ACCEPT
6.其他未被允许的端口禁止访问
iptables -t filter -A INPUT -p tcp -j DROP