目录
1.介绍
2.防火墙的划分方式:
保护范围:
实现方式:
网络协议划分:
3.iptables的构成和工作机制(四表五链)
4.iptables的命令格式:
防火墙:起到隔离功能,一般部署在网络边缘或者主机边缘,工作在网络层。
防水墙:waterwall,主要是防止信息泄露。
在工作中,防火墙的主要作用决定哪些数据可以被外网访问以及哪些数据可以进入内网访问。
安全技术:
1.入侵检测系统:检测出威胁、病毒、木马,不会阻断网络访问,事后提供报警和监督。类似于监控,看着你,但是不干预,出了事以后再来找你。
2.入侵防御系统:一旦检测出威胁,会立即予以阻断,以主动的方式保护网络安全。以透明模式工作的。一般都是在线部署的方式。(所有数据进出的必经之路)
现在市面上大部分的防火墙都是上述二者的结合体。
防火墙种类:
1.软件防火墙:360 卡巴斯基 金山毒霸 iptables firewalld
2.硬件防火墙:路由器 交换机 三层交换机
1.主机防火墙:服务范围就是当前自己的主机
2.网络防火墙:必经之路
1.硬件防火墙:既有专业的硬件来实现防火墙功能,又有软件来进行配合
2.软件防火墙:代码实现,判断
1.网络层:包过滤防火墙
2.应用层(代理服务器):设置数据的进出
linux防火墙:firewalld centos7 专门自带的
iptables 包过滤防火墙
selinux 自带的安全工具
集成在一个内核中:netfilter组件
iptables 包过滤防火墙,工作在网络层
针对数据包进行过滤和限制
iptables属于用户态
netfilter属于内核态
过滤数据包:ip地址 端口 协议,这三个都可以在iptables中进行配置,可以限制,也可以放行
协议:tcp、udp
iptables的组成部分:
四表五链组成(selinux,也是一个表,不再我们讨论范围之内)
四表五链
表的作用就是容纳各种链
链的作用就是容纳各种规则
规则是从上到下匹配,一旦匹配立刻终止,不再向下匹配
-vnL --line-number 查看规则的序号
四表:
raw:连接跟踪机制,加快封包穿过防火墙的速度。数据包跟踪
mangle:数据标记
nat:地址转换表
filter:过滤规则表,根据规则来定义或者过滤符合条件的数据包,是iptables的默认表
四表的优先级:
security------>raw---------->mangle------>nat-------->filter
五链:
INPUT:处理数据包进入本机的规则
OUTPUT:处理数据包发出的规则,一般不做处理
prerouting:处理数据包进入的规则
postrouting:数据数据包离开本机之后的规则 prerouting以及postrouting都是结合地址转换使用
FORWARD:处理数据转发的规则
iptables的规则
表里面有链,链里面有规则,规则就是我们自定义的对于数据包的控制命令
匹配顺序:
1.根据表的优先级匹配,在表中从上到下进行检查,找到匹配规则之后立即停止,不会在表中继续向下查找,如果匹配不到规则,会按照链的默认规则进行处理
2.报文流向:
流入本机:prerouting (看看要不要做地址转换)-------->input-------->用户进程(httpd服务)------>请求-------->响应-------->数据要返回用户
流出本机:httpd------>响应------->output-------->postrouting(要不要做地址转换)-------->用户
转发:数据包进来,肯定部署同一网段,路由转发----->forward------>数据包出去,如果不允许转发,数据包直接丢弃
iptables [-t 表名 ] (不指定表名,默认就是filter表)管理选项 [链名] [匹配条件] [-j 控制类型]
管理选项:
-A :在链的末尾追加一条,添加
-I :在链中插入一条新的规则,可以指定序号。-I 后面跟上数字,表示序号
-P :修改链的默认策略
-D :删除
-R :修改,替换规则
-L :查看链中的规则
vnL
v :显示详细信息
n :把规则以数字形式进行展示
-F :清空链中的所有规则,慎用
匹配条件:
-p :指定匹配的数据包协议类型
-s :指定匹配的数据包源ip地址
-d :指定匹配数据包的目的ip地址
-i :指定数据包进入本机的网络接口
-o :指定数据包离开本机使用的网络接口
--sport :指定源端口号
--dport :指定目的端口号
控制类型:
ACCEPT :允许数据包通过
DROP :拒绝,直接丢弃数据包,不给出任何信息回应
REJECT :拒绝,会给一个响应信息
SNAT :修改数据包的源ip地址
DNAT :修改数据包的目的地址
rpm -q iptables
yum -y install iptables iptables-services
systemctl stop firewalld
iptables -vnL
//指定查看 iptables -t nat -vnL
//默认清空filter,可以-t指定 iptables -F
// 拒绝ping命令,即配即生效 iptables -t filter -A INPUT -p icmp -j REJECT
//允许可以ping命令,由上到下的 iptables -I INPUT 1 -P icmp -j ACCEPT
iptables -F //清空原有策略
iptables -vnL --line-number
//限制单个源ip ping不通,指定ip地址时,ip地址要在前
iptables -A INPUT -s 192.168.233.20 -p icmp -j REJECT
//指定多个ip地址用逗号隔开
iptables -A INPUT -s 192.168.233.20,192.168.233.30 -p icmp -j REJECT
curl 192.168.233.10
//限制端口拒绝访问,端口要在协议后 iptables -A INPUT -p tcp --dport 80 -j REJECT
删除:通过--line-number的编号进行删除
iptables -D INPUT 4(REJECT tcp的那一行的编号)
修改规则(一般不用):
iptables -A INPUT -p icmp -j ACCEPT
iptabels -vnL
iptables -R INPUT
iptables -vnL --line-number
iptables -R INPUT 1 -p icmp -j REJECT
在生产中,iptables所有的链的默认规则都是DROP
需要进虚拟机操作:否则22端口会挂掉,shell链接中断
ip tables -vnL --line-number
iptables -D INPUT 1
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
//所有服务全部断掉,慎用! iptables -P INPUT DROP
//重启服务可以恢复 systemctl restart iptables.service
通用匹配:
包括网络协议、端口、IP地址
//禁止整个网段访问80端口的服务
iptables -A INPUT -s 192.168.233.0/24 -p tcp --dport 80 -j REJECT
隐藏扩展模块
iptables -F
iptables -A INPUT -p tcp --dport 22:80(小的要写在前面,大的要写在后面,否则会报错) -j REJECT
隐藏模块:
-p指定协议时,tcp udp指明了是什么协议,就不需要再用-m来指明扩展模块
指定多端口,可以用冒号的形式,也可也用-m隐藏模块来实现
-m 可以用明确的形式指出类型:包括多端口、mac地址、ip地址、数据包的状态
//拒绝多端口
iptables -A INPUT -p tcp -m multiport --dport 20,443,80 -j REJECT
-m multiport 指定多端口,多个端口号用逗号分开
-m multiport --dport
-m multiport --sport
ip范围:指定ip范围要写在协议后面
-m iprange --src-range 源ip地址的范围
-m iprange --dst-range 目的ip地址范围
iptabels -A INPUT -p icmp -m iprange --src-range 192.168.233.20-192.168.233.30 -j REJECT
mac地址
-m mac --mac-source
iptables -A INPUT -p icmp -m mac --mac-source 00:0c:29:92:44(mac地址) -j DROP
1.写在命令行当中的都是临时配置
2.把我们的规则配置在服务的文件当中,形成永久生效
yum -y install iptables iptables-services
systemctl stop firewalld
setenforce 0
iptables -vnL --line-number
iptables -A INPUT -p tcp -dport 80 -j ACCEPT
iptables -A INPUT -p tcp -dport 443 -j ACCEPT
iptables -A INPUT -p tcp -dport 3306 -j ACCEPT
iptables-save > /opt/ky30.bak //把当前iptables里的所有策略的配置都保存到ky30.bak当中,相当于备份
cat /etc/sysconfig/iptables //默认配置文件
cat /opt/ky30.bak > /etc/sysconfig/iptables //覆盖原有策略
iptables -vnL --line-number
systemctl restart iptables //重启服务后发现还在
iptabels -F //清空Filter后发现还在
iptables-restore < /opt/ky30.bak //导入,但是没有写到永久配置文件里
导出配置:
iptables-save > /opt/ky30.bak
导入配置:
iptables-restore < /opt/ky30.bak
导入配置也是临时设置,永久生效:
/etc/sysconfig/iptables 写入配置文件当中才会永久生效
自定义链:
1.创建自定义链
iptables -N custom
iptables -vnL
没有指定表,默认就是在filter表中添加一个自定义链
2.怎么给自定义链改名字
iptables -E custom ky30 //前一个custom是原链名,后一个ky30是新链名
iptables -I ky30 -p icmp -j ACCEPT //给链添加规则,但不能生效,需要添加到默认链中
iptables -I INPUT -p icmp -j ky30 //需要把自定义链添加到默认链中才能使添加的规则生效,与上一步结合起来看,-j 后面要跟上自定义链的名称
3.删除自定义链
iptables -vnL --line-number
第一步,自定义链的规则被默认链使用,要现在默认链当中删除,再把自定义链当中的规则删除,最后才能把自定义链删除
iptables -D INPUT 1 //默认链当中删除
iptables -D ky30 1 //再把自定义链当中的规则删除
iptables -X ky30 //最后才能把自定义链删除
SNAT和DNAT
SNAT:源地址转换 //内网到外网 源
DNAT:目标地址转换 //外网到内网 目的
192.168.233.10
web服务器 网关服务器 网关服务器 客户端
地址转换
10 目的地址 10.11 180 12.0.0.10 12.0.0.10 源 192.168.23
web服务器--------网关服务器-----------12.0.0.10-------网关服务器-----客户端发起请求
web服务器响应请求------网关服务器----------网关服务器------------------------客户端
180 12.0.0.10 目标 192.168.233.21
10.10 10.11 180 源
test1:192.168.233.10 内网服务器
test2:192.168.233.20 网关服务器
ens33 test1的网关:192.168.233.254
ens36 test2的网关:12.0.0.254
test3:192.168.233.30 web服务器
面试题,也是必要的技能之一
抓包
linux系统如何抓包:
tcpdump来实现linux抓包,自带的工具
rpm -q tcpdump
tcpdump tcp -i ens33 -t -s0 -c 10 and dst port 80 and src net 192.168.233.0/24 -w /opt/target.cap
指定抓包的协议tcp
-i ens33 只抓经过ens33的数据包
-t 不显示时间戳
-s0 抓取完整的数据包
and 目的端口是80,and 192.168.233.0/24数据包的源地址
-w 把抓包的文件保存
sz target.cap
打开方式设置为wireshark
打开即可
动态抓包:
shell中操作 tcpdump tcp -i ens33 -s0 -w ./ens33.cap
虚拟机1中刷新页面多次
使用ctrl + c 退出即可