安全技术和防火墙
文章目录
- 安全技术和防火墙
- 安全技术
- 防火墙
- 通信的五大要素和四大要素
- 四表五链*
- 控制类型
- 管理选项:
- 匹配条件
- 实验步骤
- 关闭防火墙
- 添加规则
- 指定IP地址
- 指定多个ip
- 指定端口
- 拒绝访问nginx
- 删除规则
- 修改策略
- 修改链
- 拒绝整个网段
- 禁止多个端口
- 匹配mac地址
- iptables
- 备份和还原
- 自定义链
- 添加端口
安全技术
入侵检测系统:特点是不阻断网络访问,主要是提供报警和事后监督,不主动介入,默默的看着你(监控)
入侵防御机制:透明模式工作,数据包,网络监控,服务攻击,木马,蠕虫,系统漏洞等等进行准确的分析和判断。
在判定攻击行为后立即阻断。主动的防御(所有数据在进入本机之前,必须通过的设备或者软件)
防火墙:隔离,工作在网络或者主机的边缘(处于内网和外网之间)
对网络或者主机的数据包基于一定的规则进行检查。匹配到的规则
放行 拒绝(数据包将会被丢弃)
只开放允许访问的策略。(白名单机制,拒绝所有,允许个别)
防水墙:是一种防止内部信息泄露的产品,对外有防火墙的功能,对内是透明工作模式,类似监控
事前,事中,事后都知道。
防火墙
iptables :这是linux自带的防火墙,一般用于内部配置,对外一般不使用(对外都是用专业的,)
firwalld:linux自带的防火墙,centos7以后默认的防火墙
包过滤防火墙(是对数据包进行控制)
网络层对数据包进行选择,选择的依据是防火墙设置的策略
策略:IP地址,端口,协议。
优点,处理速度快,易于维护
缺点,无法检查应用层数据,病毒无法进行处理
应用层防火墙:在应用层对数据进行检查,比较安全
优点:更安全,问题可以精确定位
缺点:所有数据都会检查,增加防火墙的负载
iptables 工作在网络层,对数据包实施过滤和限制,包过滤防火墙
通信的五大要素和四大要素
五大要素:源ip目标ip 源端口 目的端口 协议
四要素:源ip 目的 ip 源端口 目的端口
内核态和用户态:
内核态:设计到软件的底层代码或者是系统的基层逻辑,以及一些硬件的编码。
开发人员更关注内核态
数据如果是内核态处理,速度相对比较快。
iptables的过滤规则就是有内核进行控制的。
用户态:
应用层软件层面,人为控制的一系列操作,使用功能,
数据只通过用户态处理,速度是比较慢的
iptables的配置和策略*
四表五链*
四表
raw表:用于控制数据包的状态,跟踪数据包的状态
mangle表:修改数据包的头部信息
NAT表:网络地址转换,可以改变数据包的源地址和目的地址
filter表:也是iptables的默认表,不做声明,默认就是filter表,过滤数据包的进出,以及接收和拒绝数据包
五链
PREHOUTING链:处理数据包进入本机之前的规则(NAT表)
INPUT链:处理数据包进入本机的规则(fillter表,是否允许数据包进入)
OUTPUT 链:处理本机发出的数据包规则,或者是数据包离开的本机规则(fillter表,一般不做设置)
FORWARD链:处理数据包转发到其他主机的规则,或者是允许本机进行数据转发
postrouting链:处理数据包离开本机的规则(NAT表)
表里有链,链里有表
第二种情况,请求和响应的过程 http或https
管理选项:在表的链中插入,增加,删除,查看规则。
匹配条件:数据包的IP地址,端口,协议
控制类型,允许,拒绝,丢弃。
注意事项:
1、不指定表名,默认就是fillter表
2、不指定链名,默认就是所有链 (禁止行为。)
3、除非设置了链的默认策略,否则必须执行匹配条件(一般都是指定的匹配条件)
4、选项,链名和控制类型都是大写,其余都是小写
控制类型
(所有控制类前面都是-j)
ACCEPT:允许数据包通过
DROP:直接丢弃数据包,没有任何回应信息
REJECT:拒绝数据包通过,数据包也会被丢弃,但是会有一个响应的信息。
SNAT:修改数据包的源地址
DNAT:修改数据包的目的地址。
管理选项:
-A 在链中添加一条规则,在链尾添加。
-l 指定位置插入一条规则。
-P 指定了默认规则一般都是设置成拒绝(默认是允许。)
-D 删除规则
-R 修改规则(慎用)
-vnL:v是显示详细信息,n数字形式展示内容,L查看
–line numbers:显示规则的编号,和查看一起使用
-F :清空链中的所有规则(慎用)
-X:清除自定义链中的规则
匹配条件
-P:指定协议类型
-s:指定匹配的目的IP地址
-d:指定匹配的目的ip地址
-i:指定数据包进入本机的网络设备
-o:指定数据包离开本机的网络设备
–sport:指定源端口
–dport:制定目的的端口
实验步骤
关闭防火墙
yum -y install iptables iptables-services安装软件
enble开机自启
iptables命令格式
iptables[-t表明]管理选项 链名 (大写)匹配条件[-j 控制类型]
所有控制类前面都是-j
iptables -L 查看规则
iptables -vnL --line-number
vnL详细展示 以数字形式
添加规则
iptables -F 清空
iptables -L
格式
iptables -A INPUT -P icmp -j REJECT 拒绝所有主机ping本机
iptables -A INPUT -p icmp -j ACCEPT 还是不通
匹配规则:
每个链中的规则都是从上到下的顺序匹配,匹配到之后不再向下匹配
如果链中没有规则,则执行链的默认策略进行执行
iptables -vnL --line-number
iptables -I INPUT 1 -p icmp -j ACCEPT
指定IP地址
iptables -A INPUT -s 目标地址 -p icmp -j REJECT
iptables -A INPUT -s 20.0.0.20 -p icmp -j REJECT
[root@test1 opt]# iptables -vnL --line-number
Chain INPUT (policy ACCEPT 68 packets, 5366 bytes)
num pkts bytes target prot opt in out source destination
1 4 336 REJECT icmp -- * * 20.0.0.20 0.0.0.0/0 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 35 packets, 2788 bytes)
num pkts bytes target prot opt in out source destination
[root@test2 opt]# ping 20.0.0.10
PING 20.0.0.10 (20.0.0.10) 56(84) bytes of data.
From 20.0.0.10 icmp_seq=1 Destination Port Unreachable
From 20.0.0.10 icmp_seq=2 Destination Port Unreachable
From 20.0.0.10 icmp_seq=3 Destination Port Unreachable
From 20.0.0.10 icmp_seq=4 Destination Port Unreachable
指定多个ip
iptables -A INPUT -s 目标地址,目标地址 -p icmp -j DROP
(中间需要用“,”隔开)
iptables -A INPUT -s 20.0.0.20,20.0.0.30 -p icmp -j REJECT
[root@test1 opt]# iptables -vnL --line-number
Chain INPUT (policy ACCEPT 62 packets, 3856 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT icmp -- * * 20.0.0.20 0.0.0.0/0 reject-with icmp-port-unreachable
2 0 0 REJECT icmp -- * * 20.0.0.30 0.0.0.0/0 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 29 packets, 2216 bytes)
num pkts bytes target prot opt in out source destination
主机二
[root@test2 opt]# ping 20.0.0.10
PING 20.0.0.10 (20.0.0.10) 56(84) bytes of data.
From 20.0.0.10 icmp_seq=1 Destination Port Unreachable
From 20.0.0.10 icmp_seq=2 Destination Port Unreachable
From 20.0.0.10 icmp_seq=3 Destination Port Unreachable
主机三
ping 20.0.0.10
PING 20.0.0.10 (20.0.0.10) 56(84) bytes of data.
From 20.0.0.10 icmp_seq=1 Destination Port Unreachable
From 20.0.0.10 icmp_seq=2 Destination Port Unreachable
From 20.0.0.10 icmp_seq=3 Destination Port Unreachable
指定端口
iptables -A INPUT -p tcp --dport 22 -j REJECT 断开22端口所有连接:xshell会直接断开然后进去虚拟机重启一下这个服务
iptables -A INPUT -s目的IP地址 -p tcp --dport 22 -j REJECT限制用户登录
ssh root@20.0.0.20
The authenticity of host '20.0.0.20 (20.0.0.20)' can't be established.
ECDSA key fingerprint is SHA256:+XQL+rFHCzoLCvoOqlfd5P9iMHBTXdUgtdg2qjiAgfk.
ECDSA key fingerprint is MD5:30:61:c4:d3:f7:a1:c4:b8:19:49:20:4f:9b:0a:5b:b1.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '20.0.0.20' (ECDSA) to the list of known hosts.
root@20.0.0.20's password:
Last login: Wed Jun 26 08:51:11 2024 from 20.0.0.1
[root@test2 ~]# exit
登出
Connection to 20.0.0.20 closed.
[root@test3 opt]# ssh root@20.0.0.20
ssh: connect to host 20.0.0.20 port 22: Connection refused
拒绝访问nginx
systemctl restart nginx.service
[root@test2 opt]# iptables -F
[root@test2 opt]# iptables -A INPUT -s 20.0.0.30 -p tcp --dport 80 -j REJECT
另一台主机
curl 20.0.0.20
curl: (7) Failed connect to 20.0.0.20:80; 拒绝连接
删除规则
# iptables -A INPUT -s 20.0.0.20 -p tcp --dport 80 -j ACCEPT
[root@test1 opt]# iptables -A INPUT -s 20.0.0.20 -p tcp --dport 80 -j DROP
iptables -vnL --line-number
Chain INPUT (policy ACCEPT 80 packets, 5488 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT tcp -- * * 20.0.0.20 0.0.0.0/0 tcp dpt:80
2 0 0 DROP tcp -- * * 20.0.0.20 0.0.0.0/0 tcp dpt:80
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 47 packets, 3844 bytes)
num pkts bytes target prot opt in out source
删除规则
iptables -D INPUT 2
[root@test1 opt]# iptables -vnL --line-number
Chain INPUT (policy ACCEPT 88 packets, 5430 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT tcp -- * * 20.0.0.20 0.0.0.0/0 tcp dpt:80
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 50 packets, 3808 bytes)
num pkts bytes target prot opt in out source destination
修改策略
iptables -vnL --line-numbers 查看当前的规则
Chain INPUT (policy ACCEPT 6 packets, 364 bytes)
num pkts bytes target prot opt in out source destination
1 6 393 ACCEPT tcp -- * * 20.0.0.30 0.0.0.0/0 tcp dpt:80
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 9 packets, 5741 bytes)
num pkts bytes target prot opt in out source destination
[root@test2 opt]# iptables -R INPUT 1 -s 20.0.0.30 -p tcp --dport 80 -j REJECT 这是替换
查看另一台虚拟机
curl 20.0.0.20
curl: (7) Failed connect to 20.0.0.20:80; 拒绝连接
修改链
修改链的默认策略基本 上不会用
拒绝整个网段
curl 20.0.0.20
curl: (7) Failed connect to 20.0.0.20:80; 拒绝连接
禁止多个端口
一次静止多个端口进行操作
-m 扩展模块,一次性禁止多端口 ip范围 指定mac地址
iptables -F
iptables -A IN -p
mariadb
需要用逗号隔开
IP地址范围 这中间的范围不能连接到该主机
匹配mac地址
iptables
备份和还原
对iptables规则进行备份和还原
cd /etc/sysconfig/iptables
iptables -F 清空规则
设置规则
iptables-save >/opt/iptables.bask 备份到文件中
iptables-restore </opt/iptables.bask 恢复原来状态
iptables -t filter -A INPUT -p icmp -j ACCEPT
[root@test2 opt]# iptables -t filter -A INPUT -p icmp -j REJECT
[root@test2 opt]# iptables -vnL --line-number
Chain INPUT (policy ACCEPT 56 packets, 3248 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
2 0 0 REJECT icmp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
备份
iptables-save >/opt/iptables.bask
[root@test2 opt]# iptables -vnL --line-number
Chain INPUT (policy ACCEPT 201 packets, 12269 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
2 0 0 REJECT icmp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 121 packets, 9888 bytes)
num pkts bytes target prot opt in out source destination
恢复
iptables-restore </opt/iptables.bask
[root@test2 opt]# iptables -vnL --line-number
Chain INPUT (policy ACCEPT 8 packets, 516 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
2 0 0 REJECT icmp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 6 packets, 640 bytes)
num pkts bytes target prot opt in out source destination
iptables -save > 先保存到文件里
在把规则导出
自定义链
-N是插入自定义链
-E 原链名 替换的链名 (替换)
插入自定义链的
使用iptables
snat 和 dnat
snat:源地址转换
内网----外网 内网ip转换成可以访问外网的ip.
内网的多个主机可以只有一个有效的公网ip地址访问外部网络
dnat:目的地址转发
外部用户,可以通过一个公10网地址访问服务的内部
三台关闭防火墙安全机制
主机一和主机三安装nginx然后重启 访问自己主机的nginx是否有wab服务
curl 本机地址
主机二安装iptables并添加网卡 并修改ip
20240627094114022.png&pos_id=img-7BIxkhcI-1719564581282)
主机二的另一个网关也要修改
ip修改成11
主机三的IP地址进行修改
主机一修改网关 20.0.0.254
主机二修改内核配置文件
1:是开启
0:是关
sysctl -p 可以使内核参数的配置立刻生效(命令行执行)
主机二
iptables -t nat -A POSTROUTING -s 20.0.0.0/24 -o ens36 -j SNAT --to 10.0.0.10
-t nat 指定表为nat
-A POSTROUTING A添加
-s 指定源
-o 指定输出网络设备
-j 控制类型
–to 指定整个网段 192.168.233.0/24
重启三台主机的网卡
进入虚拟机看1 3 的主机
tail -f /var/log/nginx/acc
DNAT
目的地址转换主机二
在linux当中如何抓包
tcpdump就是linux自带的抓包工具,(最小化安装不带的,需要额外安装)
tcp 指定的抓包协议 udp icmp 第一个参数,可以不指定协议
-i 只抓经过设备的包
-t 不显示时间戳
-s0 抓完整的数据包
-c10:抓几个数据包10
dst port :指定抓包的端口
src net 网段 /24 指定抓包的ip地址
下载到电脑查看 使用wireshark进行查看
如果要用wireshark对数据包进行分析 再抓包时需要用-s0抓取完整版 否则wireshark无法分析
firewalld是centos7自带的 也是默认的,7以前的事iptables。
ubtntu :ufw firewalld
ster先开启防火墙
firewalld按照区域来划分的
pulic:公共区域,默认配置了ssh以及DHCPv6预定服务是放通的, 其它全部都是拒绝的,默认区域
trusted:信任区域,允许所有的数据包放通
block:限制区域,拒绝所有,
drop:丢弃区域,丢弃所有的数据包
dmz:非军事区域,默认就只允许ssh通过
home:家庭区域,默认只允许ssh通过
internal:内部区域和home一模一样
external:外部区域,也是默认ssh通过,其他的全部拒绝
work:工作区域,默认放通ssh
firewalld-cmd 命令行工具
firewalld-cmd --get-default-zone查看当前系统默认区域
区域切换
查看区域内允许访问的服务
firewalld-cmd --list-service
获取ipv6的地址
firewalld-cmd --add-service=http --zone=public 添加
删除 直接重启防火墙
添加服务 永久生效
firewalld-cmd --add-service=
firewalld-cmd --reload
删除
添加端口
临时添加
irewalld-cmd --zone
添加多个端口