防火墙:隔离功能
位置:部署在网络边缘或主机边缘,在工作中,防火墙的主要作用是决定哪些数据可以被外网访问以及哪些数据可以进入内网访问,主要在网络层工作
其他类型的安全技术:1、入侵检测系统 2、入侵防御系统 (了解即可)
防火墙有软件防火墙:360,iptables,firewalld
还有硬件防火墙:路由器,交换机,三层交换机
保护范围:1、主机防火墙,服务范围就是当前的主机
2、网络防火墙:服务范围为防火墙一侧的局域网,必经之路
实现方式:1、硬件防火墙,既有专业的硬件来实现防火墙功能,又有软件来进行配合
2、软件防火墙:代码实现判断
网络协议划分:
网络层:包过滤防火墙
应用层(代理服务器):设置数据的进出
linux防火墙:firewalld centos7自带的防火墙
iptables:包过滤防火墙 selinux自带的安全工具
集成在一个内核中:netfilter组件
总结:iptables工作在网络层,针对ip数据包进行过滤和限制,属于用户态
属于典型的包过滤防火墙,体现在对包内的IP地址、端口等信息的处理
面试题:
通信五元素:1,源端口 2,目的端口 3,源IP 4,目的 IP 5, 协议:tcp/udp
SCTP:在网络连接两端之间同时传输多个数据流的协议。SCTP提供的服务与UDP和TCP类似
通信四元素:源/目的 端口 源/目的 IP
iptables的构成和工作机制:根据规则进行匹配,能进就进,不能进则丢弃,对出不做限制
iptables的组成部分:四表五链组成(面试会问)
四表:
raw:连接跟踪机制,可以加快封包穿过防火墙的速度,数据包跟踪
mangle:数据标记
nat:地址转换表
filter:过滤规则表,根据规则来定义或者过滤符合条件的数据包,默认表
#security也算一个表
优先级:security(不再讨论范围之内)→raw→mangle→nat→filter
五链:
INPUT:处理数据包进入本机的规则
OUTPUT:处理数据包发出的规则,一般不作处理,因为基本都在INPUT处理了
prerouting:处理数据包进入本机之前的规则
postrouting:处理数据包离开本机之后的规则 (prerouting postrouting要结合地址转换)
FORWARD:处理数据包转发到其他主机的规则
总结:iptables的规则:表里有链,链里面有规则,规则就是我们自定义的对于数据包的控制命令
四表五链
规则表的作用:容纳各种规则链
规则链的作用:容纳各种防火墙规则
总结:表里有链,链里有规则
管理选项:表示iptables规则的操作方式,如插入、增加、删除、查看等; 增删改查
匹配条件:用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理; IP地址,端口。协议
控制类型指的是数据包的处理方式,如允许、拒绝、丢弃等。 ACCEP REJECT DROP
注意事项:
不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链,一般不这么操作
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写
匹配数据:
1、根据表的优先级匹配,在表中从上到下进行检查,找到匹配规则后立即停止,不再表中向下继续查找,如果匹配不到规则,按照链的规则进行处理
2、报文流向(数据走向):
流入本机:prerouting(看需不需要把外网地址转换成内部可以访问的地址,必须要直接到input链)→input链(让不让数据包进入本机,让它进就直接访问用户进程httpd服务)→用户进程(httpd服务)......请求访问......响应(响应就是输入要返回)→数据要返回用户
流出本机:httpd(服务先发出响应)→响应报文(往用户发)→output(直接出,一般不会对出进行限制)→postrouting(看要不要做地址转换,不需要则直接带用户)→用户
转发:数据包进来,肯定不是同一网段,路由转发→forward→数据出去,不允许转发,数据包丢弃
iptables的命令格式:iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
[-t 表名] 也可以不写,不写就是指定filter表
管理选项:(除了v,n都是大写)
-A 在指定链末尾追加一条 例:iptables -A INPUT
-I 在指定链中插入一条新的,未指定序号默认作为第一条 例:iptables -I INPUT
-P 指定默认策略 例:iptables -P OUTPUT ACCEPT
-D 删除(慎用) 例:iptables -t nat -D INPUT 2
-R 修改、替换某一条规则 例:iptables -t nat -R INPUT
-F 清除链中所有规则 例:iptables -F
-L 查看链中的规则 例:iptables -t nat -L
-n 所有字段以数字形式显示
-v 查看时显示更详细信息,常跟-L一起使用 (v,n,L经常结合在一起使用例:vnL)
--line-numbers 规则带编号 例 iptables -t nat -L -n --line-number iptables -t nat -L --line-number
(不常用的)
-X 清空自定义链的规则,不影响其他链 iptables -X
-Z 清空链的计数器(匹配到的数据包的大小和总和)iptables -Z
-S 看链的所有规则或者某个链的规则/某个具体规则后面跟编号
链名:
PREROUTING链:处理数据包进入本机之前的规则。
INPUT链:处理数据包进入本机的规则。
FORWARD链:处理数据包转发到其他主机的规则。
OUTPUT链:处理本机发出的数据包的规则,一般不做处理。
POSTROUTING链:处理数据包离开本机之后的规则。
匹配的条件(都是小写)
-p 指定要匹配的数据包的协议类型
-s 指定要匹配的数据包的源IP地址
-d 指定要匹配的数据包的目的IP地址
-i 指定数据包进入本机的网络接口
-o 指定数据包离开本机做使用的网络接口
--sport 指定源端口号
--dport 指定目的端口号
控制类型:(全部大写)
ACCEPT:允许数据包通过
DROP: 拒绝,直接丢弃数据包,不给出任何回应信息
REJECT:拒绝数据包通过,会给一个响应信息
SNAT: 修改数据包的源ip地址
DNAT: 修改数据包的目的地址
iptables的命令格式:iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
[-t 表名] 也可以不写,不写就是指定filter表
iptables的前置操作:
rpm -q iptables-services 检查是否安装iptables
yum -y install iptables-services 安装iptables
systemctl stop firewalld.service 关闭防火墙
例:查看规则
不用-t指定表名,默认是浏览filter表
-vnL:以数字化详细的显示链中的规则
表中有三个链INPUT(数据包进入),FORWARD(数据包转发),OUTPUT(发出数据包)
且都是允许ACCEPT
例:指定查看nat表规则
也都是允许ACCEPT
例:清空表中所有规则,慎用且用的较少
iptables -F
例:禁止所有主机来ping10地址
-f filter:指定filter表(不指定表名默认指向filter表)
-A INPUT:在INPUT链插入
-p icmp:指定协议,icmp网际控制报文协议
-j REJECT:指定控制类型为拒绝且会给回应
查看一下
新增规则,让所有主机允许来ping10地址:用-I来进行插入,通过指定序号来往INPUT链插,让所有主机允许来ping10地址
查看一下,第一条的控制类型变为ACCEPT
插入的特点:即配即生效,从上到下匹配,匹配到了就不匹配了,此处第一条控制类型为ACCEPT匹配到了第一条就不往下继续匹配了
补充:在查看 -vnL后加 --line-number 可以为规则前面加上编号,查看更直观
例:指定ip地址,让20地址不能ping通10地址
是有顺序的,ip地址要写在协议的前面
-A INPUT:在INPUT链添加
-s 192.168.88.20:因为是在20地址ping10地址,20地址是作为源ip地址,所以用-s
当要拒绝多个ip地址进行访问时
指定多个ip地址要用逗号隔开
例:指定端口拒绝访问
指定端口也有顺序要求,端口要写在协议的后面
因为要在别的段楼访问22端口,所以22端口是作为目的端口,所以要用--dport
指定只有20地址才能访问80网段
例:把不想要的规则删除,根据编号来删除
例:修改规则(一般不用,要么直接添加,要么直接删除)
先设置所以主机都可以和10地址ping通(这条命令本身没有任何意义,因为本身就是允许的)
-R INPUT:修改规则 1:通过序号进行修改
重点:修改链的默认规则 在生产中,iptables所有的链的默认规则都是DROP
在生产中都是按照白名单的形式来进行设置,默认的策略都是拒绝
例:拒绝所有主机来访问10地址
-P:修改链的规则 不用加控制状态-j,直接加控制类型DROP
这时发现虚拟机卡死了,因为所有都被拒绝访问了,只能进虚拟机进行操作
因为本身就是拒绝所以REJECT没有意义 iptables -D INPUT 1 把它删除
iptables -A INPUT -p tcp --dport 22 -j ACCEPT 把22端口打开
端口要写在协议后面此处sport dport都可以
通用匹配:网络协议、端口、ip地址
整个192.168.88网段禁止访问80端口的服务
隐藏扩展模块:即拒绝80端口又拒绝20端口,根据端口来进行匹配
22:80 小的要写在前面,大的在后面,一定要这样写,否则会报错
隐藏模块:-p指定协议时(tcp或udp),指明了是什么协议,就不需要再使用-m来指明扩展模块。
指定多端口可以用冒号的形式,也可以用-m隐藏模块来实现。
-m的作用:可以用明确的形式指出类型:多端口、mac地址、ip地址数据包的状态
用-m的形式指定多端口(用的最多的)
例:
-m multiport:指定多端口,多个端口之间用逗号隔开
ip范围:-m iprange --src-range 源ip地址范围
-m iprange --dst-range 目的ip地址范围
例:
iptables -A INPUT -p icmp -m iprange --src-range 192.168.88.20-192.168.88.30 -j REJECT
拒绝从20地址到30地址来访问10地址(本机地址)
总结:iptables要会1、四表五列,2、会增会删即可,3、指定多端口,范围