39、安全技术和防火墙
一、安全技术
入侵检测系统:特点是不阻断网络访问,主要是提供报警和事后监督。不主动介入,默默看着你(监控)。
入侵防御系统:透明模式工作,数据包,网络监控,服务攻击,木马,蠕虫,系统漏洞等等进行准确的分析和判断。
在判断攻击行为后会立即阻断。主动的防御(所有数据在进入本机之前,必须要通过的设备或者是软件)
二、防火墙
防火墙:隔离,工作在网络或者主机的边缘,内网和外网的中间。
对网络或者主机的数据包基于一定的规则进行检查。匹配到的规则。
放行,拒绝(数据包将会被丢弃)。
只开放允许访问的策略。(白名单机制,拒绝所有,允许个别)
防水墙:是一种防止内部信息泄露的产品。对外有防火墙的功能,对内是透明模式工作。类似监控。事前,事中,事后都知道。
2.1、防火墙类型及优缺点:
iptables这个linux自带的防火墙,一般用于内部配置。对外一般不使用(对外都使用专业的)。
firewalld linux自带的防火墙,centos7以后默认的防火墙。
包过滤防火墙(数据包进行控制)
网络层对数据包进行选择,选择的依据是防火墙设置的策略。
策略:ip地址,端口,协议。
优点:处理速度快,易于维护。
缺点:无法检查应用数据,病毒无法进行处理。
应用层防火墙:在应用层对数据进行检查,比较安全。
优点:更安全,问题可以精准定位。
缺点:所有数据都会检查,增加防火墙和负载。
2.2、iptables
iptables:工作在网络层,针对数据包实施过滤和限制。包过滤防火墙。
2.3、通信的要素:五大要素和四大要素
1、五大要素:源ip 目的ip 源端口 目的端口 协议(TCP/UDP)
2、四大要素:源ip 目的ip 源端口 目的端口
内核态和用户态:
内核态:设计到软件的底层代码或者是系统的基层逻辑,以及一些硬件的编码。
开发人员更关注内核态。
数据如果是内核态处理,速度相对较快。
iptables的过滤规则就是由内核态进行控制的。
用户态:
应用层软件层面,人为控制的一系列操作,使用功能。
运维人员只考虑用户态。
数据只通过用户态处理,速度比较慢的。
三、面试题—iptables的配置和策略:
3.1、四表五链:
3.1.1、iptables的四个表:
- **raw表:**用于控制数据包的状态,跟踪数据包的状态
- **mangle表:**修改数据包的头部信息
- **NAT表:**网络地址转换。可以改变数据包的源地址和目的地址。
- **filter表:**也是iptables的默认表,不做声明,默认就是filter表,过滤数据包,控制数据包的进出,以及接收和拒绝数据包。
3.1.2、五链(大写):
-
PREROUTING链:处理数据包进入本机之前的规则(NAT表)
-
INPUT链:数据包进入本机的规则(filter表,是否允许数据包进入)
-
OUTPUT链:处理本机发出的数据包的规则,或者是数据包离开的本机的规则(filter表,一般不做设置。)
-
FORWARD链:处理数据包转发到其他主机的规则,或者是否允许本机进行数据包转发。
-
POSTROUTING链:处理数据包离开本机之后的规则(NAT表)
表里面有链,链里面有规则。
管理选项:在表的链中插入,增加,删除,查看规则。
匹配的条件:数据包的ip地址,端口,协议。
控制类型:允许,拒绝,丢弃。
3.1.3、注意事项:
1、不指定表名,默认就是filter表。
2、不指定链名,默认就是所有链(禁止范围)。一定要指定链。
3、除非设置了链的默认策略,否则必须执行匹配条件的(一般都是指定匹配条件的)。
4、选项,链名和控制类型都是大写,其余都是小写。
3.2、控制类型:
-
ACCEPT:允许数据包通过。
-
DROP:直接丢弃数据包,没有任何回应信息。
-
REJECT:拒绝数据包通过,数据包也会丢弃,但是会有一个响应的信息。
-
SNAT:修改数据包的源地址
-
DNAT:修改数据包的目的地址
3.3、管理选项(大写):
-
-t 指定表名 [-t 表名]
-
-A 在链中添加一条规则,在链尾添加。
-
-I 指定位置插入一条规则。
-
-P 指定默认规则 链的规则一般都是设置成拒绝(默认是允许。)
-
-D 删除规则
-
-R 修改规则(慎用)
-
-vnL:v是显示详细信息,n是以数字形式展示内容,L是才是真正的查看。
-
–line-numbers:显示规则编号,和查看一起使用
-
-F:清空链中的所有规则(慎用)
-
-X:清除自定义链中的规则
3.4、匹配条件:
-
-p:指定协议类型–tcp—icmp
-
-s:指定匹配的源ip地址
-
-d:指定匹配的目的ip地址
-
-i:指定数据包进入本机的网络设备(ens33)
-
-o:指定数据包离开本机的网络设备
-
–sport:指定源端口
-
–dport:指定目的端口
3.5、iptables的命令格式:
yum -y install iptables iptables-services ##安装防火墙服务
iptables [-t 表名] 管理选项 链名(大写) 匹配条件 [-j 控制类型]
所有控制类型前面都是:-j
1、iptables -vnL
##查看防火墙情况
[root@test1 opt]# iptables -A INPUT -s 192.168.168.10 -p tcp --dport 80 -j REJECT
[root@test1 opt]# iptables -vnL
Chain INPUT (policy ACCEPT 6 packets, 364 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT tcp -- * * 192.168.168.10 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable
2、iptables --line-numbers -vnL
查看规则以及显示规则编号
[root@test1 opt]# iptables --line-numbers -vnL
Chain INPUT (policy ACCEPT 65 packets, 3996 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT tcp -- * * 192.168.168.10 0.0.0.0/0 tcp dpt:80 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 41 packets, 3836 bytes)
num pkts bytes target prot opt in out source destination
3、iptables -A
添加规则
1、80端口拒绝连接
iptables -A INPUT -s 192.168.168.20 -p tcp --dport 80 -j REJECT ##20主机拒绝连接本机80端口
[root@test2 ~]# curl 192.168.168.10
curl: (7) Failed connect to 192.168.168.10:80; 拒绝连接
curl 测试nginx是否连接
2、拒绝所有其他主机ping主机
[root@test1 opt]# iptables -A INPUT -p icmp -j REJECT
3、允许所有其他主机ping主机
[root@test1 opt]# iptables -A INPUT -p icmp -j ACCEPT
[root@test1 opt]# iptables -vnL
Chain INPUT (policy ACCEPT 26 packets, 1604 bytes)
pkts bytes target prot opt in out source destination
24 2352 REJECT icmp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
每个链中规则都是从上到下的顺序匹配,匹配到之后就不再向下匹配。
如果链中没有规则,则执行链的默认策略。
4、iptables -F
----清空规则
5、iptables -I INPUT #
把策略放到指定位置#
[root@test1 opt]# iptables -I INPUT 1 -p icmp -j ACCEPT
[root@test1 opt]# iptables -I INPUT 2 -i ens33 -s 192.168.168.20 -p tcp --dport 80 -j REJECT
[root@test1 opt]# iptables -I INPUT 1 -p icmp -j ACCEPT
[root@test1 opt]# iptables -vnL
Chain INPUT (policy ACCEPT 6 packets, 364 bytes)
pkts bytes target prot opt in out source destination
2 168 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
96 8064 REJECT icmp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 6 packets, 584 bytes)
pkts bytes target prot opt in out source destination
6、拒绝192.168.168.20主机–icmp到本机
[root@test1 opt]# iptables -A INPUT -s 192.168.168.20 -p icmp -j REJECT ##显示ping不通
From 192.168.168.10 icmp_seq=329 Destination Port Unreachable
7、控制类型为-j DROP
,丢弃192.168.168.20,192.168.168.30主机–icmp到本机的数据包
iptables -A INPUT -s 192.168.168.20,192.168.168.30 -p icmp -j DROP
64 bytes from 192.168.168.10: icmp_seq=367 ttl=64 time=0.524 ms
##直接无反应,停止
8、iptables -D
删除策略,接着上面的策略,删除20icmp控制类型为-j DROP
,丢弃192.168.168.20,主机–icmp到本机的数据包
[root@test1 opt]# iptables -D INPUT -s 192.168.168.20 -p icmp -j DROP
9、iptables -R INPUT #
修改第#条策略
[root@test1 opt]# iptables -R INPUT 1 -s 192.168.168.20 -p icmp -j REJECT
10、-p tcp --dport 22
增加规则–协议在前,端口在后
[root@test1 opt]# iptables -A INPUT -p tcp --dport 22 -j REJECT #协议在前,端口在后
到终端清空规则,xshell即可重新连接
iptables -F
或者重新启动systemctl reatart iptables/iptales.servers
临时规则重启之后会重置
[root@test1 opt]# iptables -A INPUT -s 192.168.168.20 -p tcp --dport 22 -j REJECT
##拒绝20通过22ssh端口访问10,但是10可以访问20
[root@test2 ~]# ssh root@192.168.168.10
ssh: connect to host 192.168.168.10 port 22: Connection refused
[root@test1 opt]# iptables -A INPUT -s 192.168.168.20 -p tcp --dport 22 -j REJECT
[root@test1 opt]# ssh root@192.168.168.20
root@192.168.168.20's password:
Last login: Wed Jun 26 11:26:06 2024 from 192.168.168.11
[root@test2 ~]#
[root@test1 opt]# iptables -A INPUT -s 192.168.168.30 -p tcp --dport 22 -j REJECT
[root@test3 ~]# ssh root@192.168.168.10
ssh: connect to host 192.168.168.10 port 22: Connection refused
[root@test1 opt]# iptables -A INPUT -s 192.168.168.30 -p tcp --dport 22 -j REJECT
[root@test1 opt]# ssh root@192.168.168.30
root@192.168.168.30's password:
Last failed login: Wed Jun 26 11:44:49 CST 2024 from 192.168.168.10 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Wed Jun 26 11:33:04 2024 from 192.168.168.11
[root@test3 ~]#
11、nginx端口为80
systemctl restart nginx
vim /usr/share/nginx/html/index.html ##编辑nginx的访问页面
12、限制30主机访问80端口
[root@test1 opt]# iptables -A INPUT -s 192.168.168.30 -p tcp --dport 80 -j REJECT
[root@test3 ~]# curl 192.168.168.10
curl: (7) Failed connect to 192.168.168.10:80; 拒绝连接
[root@test2 ~]# curl 192.168.168.10
curl是一个功能强大的命令
获取和发送数据
curl www.baidu.com
curl 192.168.168.10
获取网页内容并且输出
-O下载文件到本地
-o 将文件下载到指定的路径
-x 发送post请求
-i 可以获取web软件的版本(服务端没有隐藏版本号)
13、删除INPUT下的规则
iptables -D INPUT 序号
[root@test1 opt]# iptables --line-numbers -vnL
Chain INPUT (policy ACCEPT 163 packets, 13930 bytes)
num pkts bytes target prot opt in out source destination
1 1 60 REJECT tcp -- * * 192.168.168.20 0.0.0.0/0 tcp dpt:22 reject-with icmp-port-unreachable
2 1 60 REJECT tcp -- * * 192.168.168.30 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable
[root@test1 opt]# iptables -D INPUT 1
[root@test1 opt]# iptables --line-numbers -vnL
Chain INPUT (policy ACCEPT 22 packets, 1356 bytes)
num pkts bytes target prot opt in out source destination
1 1 60 REJECT tcp -- * * 192.168.168.30 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable
14、修改INPUT下的策略
iptables -R INPUT #序号
[root@test1 opt]# iptables -R INPUT 1 -s 192.168.168.30 -p tcp --dport 80 -j ACCEPT
[root@test1 opt]# iptables -vnL
Chain INPUT (policy ACCEPT 6 packets, 364 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 192.168.168.30 0.0.0.0/0 tcp dpt:80
@test1 opt]# iptables -vnL
Chain INPUT (policy ACCEPT 283 packets, 17564 bytes)
pkts bytes target prot opt in out source destination
1 60 REJECT tcp -- * * 192.168.168.30 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable
0 0 DROP tcp -- * * 192.168.168.30 0.0.0.0/0 tcp dpt:80
[root@test1 opt]# iptables -R INPUT 1 -s 192.168.168.30 -p tcp --dport 80 -j ACCEPT
[root@test1 opt]# iptables -vnL
Chain INPUT (policy ACCEPT 6 packets, 364 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 192.168.168.30 0.0.0.0/0 tcp dpt:80
0 0 DROP tcp -- * * 192.168.168.30 0.0.0.0/0 tcp dpt:80
15、修改INPUT链本身默认的规则
iptables -P INPUT DROP ##默认ACCEPT改为DROP
iptables -R INPUT 1 -p tcp --dport 22 -j ACCEPT
iptables -vnL
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
systemctl restart iptables.service ##重启服务
[root@test1 ~]# systemctl restart iptables.service
[root@test1 ~]# iptables --line-numbers -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 85 5220 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
16、iptables -A INPUT -i设置设备
iptables -A INPUT -i ens33 -s 192.168.168.10 -p tcp -dport 80 -j REJECT
网络设备:
首先手动添加网卡设备(网络适配器)
[root@test1 opt]# cd /etc/sysconfig/network-scripts/
[root@test1 network-scripts]# cp ifcfg-ens33 ifcfg-ens36
[root@test1 network-scripts]# vim ifcfg-ens36 ##改ip地址
[root@test1 network-scripts]# ifup ens36
[root@test1 network-scripts]# ifconfig
17、拒绝整个网段连接到本主机
[root@test1 opt]# iptables -A INPUT -s 192.168.168.0/24 -p tcp --dport 80 -j REJECT
18、一次性对多个端口进行操作
yum -y install mariadb-server #安装数据库
iptables -A INPUT -p tcp --dport 80:3306 -j REJECT #端口从小到大写
iptables -A INPUT -p tcp --dport 22:80:3306 -j REJECT ##最多写两个
iptables v1.4.21: invalid port/service `80:3306' specified
Try `iptables -h' or 'iptables --help' for more information.
19、-m 扩展模块,可以一次性禁止多端口,ip范围,指定mac地址。
iptables -A INPUT -p tcp -m multiport --dport 80,22,3306 -j REJECT
iptables -A INPUT -p tcp -m iprange --src-range 192.168.60.30-192.168.60.40 --dport 80 -j REJECT
--src-range 源地址池
--dst-range 目的地址池
-m multiport --sport 源端口池
-m multiport --dport 目的端口池
-m iprange --src-range 源地址池
-m iprange --dst-range 目的地址池
20、mac地址
[root@test1 opt]# iptables -A INPUT -p tcp -m mac --mac-source MAC地址 -j DROP
ip + 协议 + 端口