安全技术和防火墙
安全技术
入侵检测系统:特点是不阻断网络访问,主要提供报警和事后监督,不主动介入,默默看着你(监控)
入侵防御系统:透明模式工作,数据包,网络监控,服务攻击,木马,蠕虫,系统漏洞等等进行准确的分析和判断。
在判定为攻击行为后会立即阻断。主动的防御(所有的数据在进入本机之前,必须要通过的设备或者软件)
防火墙:隔离,工作在网络或者主机边缘。
对网络或者主机的数据包基于一定的规则进行检查。匹配到的规则
放行,拒绝(数据包将会被丢弃)
只开放允许访问的策略。(白名单机制,拒绝所有,允许个别)
防水墙:是一种防止内部信息泄露的产品。对外有防火墙的功能,对内是透明模式工作,类似监控
事前,事中,事后都知道。
防火墙:
iptables 这个Linux自带的防火墙,一般用于内部配置。对外一般不适用(对外都使用专业的)
firewalld Linux自带的防火墙,centos7之后的防火墙。
功能:包过滤防火墙(对数据包进行控制)
特点:工作在网络层对数据包进行选择,选择的依据就是你设置的防火墙的策略。
策略:ip地址,端口,协议
优点:处理速度快,易于维护
缺点:无法检查应用层数据,病毒无法进行处理。
应用层防火墙:在应用层对数据进行检查,比较安全
优点:更安全,精准定位问题
缺点:所有数据都会检查,增加防火墙的负载。
iptables:工作在网络层,针对数据包实施过滤和限制。包过滤防火墙
面试:通信的要素?
五大要素:源ip、目的ip、源端口、目的端口、协议(TCP/UDP)
四大要素:源ip、目的ip、源端口、目的端口
内核态和用户态:
**内核态:**设计到软件的底层代码或者是系统的基础逻辑,以及一些硬件的编码。(一般开发人员关注内核态)
如果数据是内核态处理,速度相对较快。
iptables的过滤规则就是内核来进行控制的
**用户态:**应用层软件层面,人为控制的一系列操作,使用功能。(运维人员只考虑用户态)
数据只通过用户态处理,速度比较慢。
面试:
iptables的配置和策略:
四表五链:
iptables的四个表:
raw表:控制数据包的状态,可以跟踪数据包的状态。
mangle表:可以用来修改数据包的头部信息,
NAT表:网络地址转换,可以改变数据包的源地址和目的地址
filter表:也是iptables表的默认表,不做声明,默认就是filter表,过滤数据包,控制数据包的进出,以及接受和拒绝数据包。
五链:
PREROUTING链:处理数据包进入本机之前的规则(NAT表)
INPUT链:处理数据包进入本机的规则(filter表,是否允许数据包进入)
output链:处理本机发出的数据包的规则,或者是数据包离开本机的规则(filter表,一般不设置)
forward链:处理数据包转发到其他主机的规则,或者是否允许本机进行数据包转发。
postrouting链:处理数据包离开本机之后的规则。(NAT表)
表里面有链,链里面有规则。
iptables的设置及其命令:
管理选项:在表的链中,插入、增加、删除、查看规则
匹配条件:数据包的ip地址,端口,协议。
控制类型:允许,拒绝,丢弃。
注意事项:
1、不指定表名,默认就是filter表
2、不指定链名,默认就是所有链(禁止行为)
3、除非设置了链的默认策略,否则必须执行匹配条件(一般都是指定匹配条件)
4、选项,链名和控制类型都是大写,其余的全是小写
控制类型:
ACCEPT:允许数据包通过
DROP:直接丢弃数据包,没有任何回应信息
REJECT:拒绝数据包通过,数据包也会被丢弃,但是会有一个响应的信息。
SNAT:修改数据包的源地址
DNAT:修改数据包的目的地址
管理选项:
-t 指定表名
-A 在链中添加一条规则,在链尾添加。
-I 指定位置插入一条规则。
-P 指定链的默认规则 链的规则一般都是设置成拒绝(默认允许)
-D 删除规则
-R 修改规则(慎用)
-vnL v显示详细信息 n 以数字形式展示内容 L 查看
–line-numbers 显示规则的编号,和查看一起使用
-F 清空链中的所有规则(慎用)
-x 清除自定义链中的规则
匹配条件
-p 指定协议类型
-s 指定匹配的源IP地址
-d 指定匹配的目的IP地址
-i 指定数据包进入本机的网络设备(ens33 网卡)
-o 指定数据包离开本机的网络设备
–sport 指定源端口
–dport 指定目的端口
iptables命令格式:
iptables [-t 表名] 管理选项 链名(大写) 匹配条件 [-j 控制类型]
所有的控制类型前面都是-j
匹配规则:
每个链中规则都是从上到下的顺序匹配,匹配到之后就不再向下匹配
如果链中没有规则,则执行链的默认策略进行处理
[root@test2 626]# iptables -L
[root@test2 626]# #添加规则
[root@test2 626]# iptables -A INPUT -p icmp -j REJECT #拒绝其他所有主机ping本机
[root@test2 626]# iptables -A INPUT -s 192.168.11.138 -p icmp -j REJECT #有去无回
[root@test2 626]# iptables -A INPUT -s 192.168.11.138,192.168.11.136 -p icmp -j DROP #直接丢弃
[root@test2 626]# #指定端口
[root@test2 626]# #iptables -A INPUT -p tcp --dport 22 -j REJECT
[root@test2 626]# iptables -A INPUT -s 192.168.11.138 -p tcp --dport 22 -j REJECT #拒绝192.168.11.138以22端口访问我
[root@test2 626]# iptables -A INPUT -s 192.168.11.138 -p tcp --dport 80 -j REJECT #关闭nginx服务禁止192.168.11.138访问[root@test2 626]# #删除规则
[root@test2 626]# iptables -vnL --line-numbers #查看规则条目
[root@test2 626]# iptables -D INPUT 3 #删除第三条规则,删除按照序号[root@test2 626]# #修改策略
[root@test2 626]# iptables -R INPUT 1 -s 192.168.11.138 -p tcp --dport 80 -j REJECT
#确定需要修改的是第 1 条策略标注之后,直接修改成需要的内容,此过程是覆盖[root@test2 626]# #修改链的默认策略
[root@test2 626]# #iptables -P INPUT DROP #生产环境不要操作!!!![root@test2 626]# #网络设备:
[root@test2 ~]# iptables -A INPUT -i ens33 -s 192.168.11.138 -p tcp --dport 80 -j REJECT[root@test2 626]# #禁止网段
[root@test2 626]# iptables -A INPUT -s 192.168.11.0/24 -p tcp --dport 80 -j REJECT[root@test2 626]# #插入规则
[root@test2 626]# iptables -I INPUT 1 -s 192.168.11.110 -p tcp --dport 80 -j REJECT[root@test2 626]# #一次性禁止多个端口
[root@test2 626]# #一次性多个端口进行操作
[root@test2 626]# iptables -A INPUT -p tcp --dport 80:3306 -j REJECT
#拒绝所有访问 一次只能禁用两个端口[root@test2 626]# #-m 扩展模块 一次性禁止多个端口,可以匹配ip范围,指定Mac地址
#禁止多端口
[root@test2 626]# iptables -A INPUT -p tcp -m multiport --dport 80,21,22,53,3306 -j REJECT
#禁止地址池 协议在前 ip在后
[root@test2 626]# iptables -A INPUT -p tcp -m iprange --src-range 192.168.11.138-192.168.11.140 --dport 80 -j REJECT
[root@test2 626]# #--src-range #源地址池
[root@test2 626]# #--dst-range #目的地址池
[root@test2 626]# #-m multport --sport #源端口池
[root@test2 626]# #-m multport --dport #目的端口池
[root@test2 626]# #-m iprange --src-range #源端口池
[root@test2 626]# #-m iprange --dst-range #目的地端口池
#源端口池
[root@test2 626]# #-m multport --dport #目的端口池
[root@test2 626]# #-m iprange --src-range #源端口池
[root@test2 626]# #-m iprange --dst-range #目的地端口池