安全技术和防火墙

发布于:2024-07-03 ⋅ 阅读:(15) ⋅ 点赞:(0)

1、安全技术

1.1入侵检测系统

特点是不阻断网络访问,主要提供报警和事后监督。不主动介入,默默的看着你(类似于监控)

1.2入侵防御系统

透明模式工作, 数据包,网络监控,服务攻击,木马,蠕虫,系统漏洞等进行准确的分析和判断。

在判定为攻击行为后会立即阻断,主动的防御(所有的数据在进入本机之前必须要通过的设备或者软件)

2、防水墙

是一种防止内部信息泄露的产品。对外有防火墙的功能,对内是透明模式,类似于监控。事前事中事后都知道。

3、防火墙

3.1概念

核心:隔离

工作在网络或者主机的边缘

对网络或者主机的数据包基于一定的规则进行检查。匹配到的规则放行或者拒绝(数据包将会被丢弃。

只开放允许访问的策略(白名单机制,拒绝所有,允许个别)

iptables:linux自带的防火墙,一般用于内部配置,对外一般不适用(对外都使用专业的)

firewalld:linux自带的防火墙,centos7默认的防火墙。

都是包过滤防火墙(对数据包进行控制)

iptables:linux自带的防火墙,一般用于内部配置,对外一般不适用(对外都使用专业的)。工作在网络层,针对数据包实施过滤和限制,包过滤防火墙

firewalld:linux自带的防火墙,centos7默认的防火墙。

3.2包过滤防火墙

特点:在网络层对数据包进行选择,选择的依据是防火墙设置的策略。策略包括:ip地址,端口,协议。

优点:处理速度快,易于维护

缺点:无法检查应用层数据,病毒无法进行处理

3.3应用层防火墙

在应用层对数据进行检查,比较安全

优点:更安全,问题可以精准定位

缺点:所有数据都会检查,增加防火墙的负载

4、通信的要素

4.1五大要素

源ip、目的ip、源端口、目的端口、协议(TCP/UDP)

4.2四大要素

源ip、目的ip、源端口、目的端口

5、内核态和用户态

5.1内核态

涉及到软件的底层代码或者是系统的基层逻辑,以及一些硬件的编码。开发人员更关注内核态

数据如果是内核态处理,速度相对较快

iptables的过滤规则就是由内核来进行控制

5.2用户态

应用层软件层面,人为控制的一系列操作,使用功能。运维人员只考虑用户态

数据只通过用户态处理速度比较慢

6、iptables的配置和策略

四表五链

6.1四表

raw表:用于控制数据包的状态,跟踪数据包的状态

mangle表:修改数据包的头部信息

nat表:网络地址转换,可以改变数据包的源地址和目的地址

filter表:也是iptables的默认表,不做声明默认就是filter表。用来过滤数据包,控制数据包的进出以及接受和拒绝数据包

6.2五链

PREROUTING链:处理数据包进入本机之前的规则(NAT表)

INPUT链:处理数据包进入本机的规则(filter表,是否允许数据包进入)

OUTPUT链:处理本机发出的数据包的规则,或者是数据包离开本机的规则(filter表,,一般不做设置)

FORWARD链:处理数据包转发到其他主机的规则,或者是否允许本机进行数据包转发

POSTROUTING:处理数据包离开本机之后的规则(NAT表)

表里面有链,链里面有规则

6.3优先级

7、iptables的设置

7.1管理选项

在表的链中插入、增加、删除、查看规则

-t:指定表名

-A:在链中添加一条规则,在链尾添加

-I:指定位置插入一条规则

-P:指定链的默认规则,一般都是设置成拒绝(默认是允许)

-D:删除规则

-R:修改规则(慎用)

-vnL:v显示详细信息,n以数字形式展示内容,L查看

--line-numbers:显示规则的编号,和vnL一起使用

-F:清空链中的所有规则(慎用)

-X:清除自定义链中的规则

7.2匹配的条件

根据数据包的ip地址、端口、协议

-p:指定协议类型

-s:指定匹配的源ip地址

-d:指定匹配的目的ip地址

-i:指定数据包进入本机的网络设备(ens33)

-o:指定数据包离开本机的网络设备

--sport:指定源端口

--dport:指定目的端口

7.3控制类型

允许、拒绝、丢弃

ACCEPT:允许数据包通过

DROP:直接丢弃数据包,没有任何回应信息

REJECT:拒绝数据包通过,数据包也会被丢弃。但是会有一个响应的信息

SNAT:修改数据包的源地址

DNAT:修改数据包的目的地址

7.4注意事项

(1)不指定表名,默认的就是filter表

(2)不指定链名,默认的就是所有链(禁止行为)

(3)除非设置了链的默认策略,否则必须指定匹配条件(一般都是匹配条件)

(4)选项、链名和控制类型都是大写,其余的是小写

8、iptables的命令格式

iptables[-t 表名] 管理选项 链名(大写) 匹配条件 [-j控制类型]

 所有的控制类型前面都是-j

匹配原则:每个链中的规则都是从上到下的顺序匹配,匹配到之后就不再向下匹配
如果链中没有规则,则执行链的默认策略(ACCEPT)进行处理

查看规则:

iptables -L

查看指定表:

iptables -t 表名 -L

数字化形式查看规则:

iptables -vnL

 查看行号:

iptables -vnL --line-number(s)

iptables --line-number(s) -vnL

添加规则:

#拒绝所有其他主机ping本机

iptables -A INPUT -p icmp -j REJECT

插入规则:

#在INPUT的第一条插入ACCEPT

iptables -I INPUT 1 -p icmp -j ACCEPT

指定一个ip地址:

#禁止20ping主机

iptables -A INPUT -s 192.168.230.20 -p icmp -j REJECT

指定多个ip地址:

iptables -A INPUT -s 192.168.230.20,192.168.230.30 -p icmp -j DROP

指定端口:

#拒绝22端口

iptables -A INPUT -p tcp --dport 22 -j REJECT

拒绝ip和端口访问:

#拒绝20访问22端口

iptables -A INPUT -s 192.168.230.20 -p tcp --dport 22 -j REJECT

 #20无法访问
[root@test2 ~]# ssh root@192.168.230.10
ssh: connect to host 192.168.230.10 port 22: Connection refused

 #10可以访问
[root@test1 ~]# ssh root@192.168.230.10
root@192.168.230.10's password: 
Last login: Wed Jun 26 16:40:33 2024 from test1

拒绝20访问nginx:

iptables -A INPUT -s 192.168.230.20 -p tcp --dport 80 -j REJECT

 [root@test2 ~]# curl 192.168.230.10
curl: (7) Failed connect to 192.168.230.10:80; 拒绝连接

删除规则:

iptables -D INPUT 序号

修改策略:

#将INPUT序号1的策略改为REJECT,源ip改为20

-R INPUT 1 -s 192.168.230.20 -p tcp --dport 80 -j REJECT

修改链的默认策略:

#将INPUT的默认策略改为DROP

iptables -P INPUT DROP

指定网络设备:

#拒绝20通过ens33网卡访问80服务

iptables -A INPUT -i ens33 -s 192.168.230.20 -p tcp --dport 80 -j REJECT

 [root@test2 ~]# curl 192.168.230.10

curl: (7) Failed connect to 192.168.230.10:80; 拒绝连接

拒绝整个网段:

iptables -A INPUT -s 192.168.230.0/24 -p tcp --dport 80 -j REJECT

 [root@test1 ~]# curl 192.168.230.10

curl: (7) Failed connect to 192.168.230.10:80; 拒绝连接

一次性对多个端口进行操作:

#禁止所有主机访问22和80端口(端口从小到大,只能禁止两个端口)

iptables -A INPUT -p tcp --dport 22:80 -j REJECT

 [root@test2 ~]# ssh root@192.168.230.10

ssh: connect to host 192.168.230.10 port 22: Connection refused

[root@test2 ~]# curl 192.168.230.10

curl: (7) Failed connect to 192.168.230.10:80; 拒绝连接

-m 扩展模块,一次性禁止多端口,ip范围,指定mac地址:

iptables -A INPUT -p tcp -m multiport --dport 22,80,3306 -j REJECT

指定ip范围:

#拒绝20-30的ip地址访问本机的80端口

iptables -A INPUT -p tcp -m iprange --src-range 192.168.230.20-192.168.230.30 --dport 80 -j REJECT

 [root@test2 ~]# curl 192.168.230.10

curl: (7) Failed connect to 192.168.230.10:80; 拒绝连接

一次性指定多个端口:

-m multiport --sport 源端口池 ​

-m multiport --dport 目的端口池 ​

-m iprange --src-range 源地址池 ​

-m iprange --dst-range 目的地址池

9、备份和还原

格式:

iptables-save > /opt/iptables.bak ​

 一键导入,设置为当前防火墙设置:

iptables-restore </opt/iptables.bak 

 修改iptables的默认设置:

cat /etc/sysconfig/iptables

 直接把配置导入配置文件:

cat /opt/iptables.bak >/etc/sysconfig/iptables
#立即生效了,实验环境下,了解就可以了。不要尝试

systemctl restart iptables

#重启之后生效的就是配置文件中的内容,操作需谨慎

10、自定义链

添加自定义链: 

iptables -N 链名

 自定义链改名:

iptables -E 原链名 自定义链名

 在自定义链中添加规则:

iptables -I aaa -p tcp -j REJECT

 删除自定义链:

#先删除iptables INPUT链中的对应关系,然后删除自定义链中的规则

iptables -D INPUT 1

iptables -D ky27 1
然后再用iptables -X ky27 删除这个链

11、snat和dnat

11.1snat

源地址转换

内网——外网 内网ip转换成可以访问的外网ip

内网的多个主机可以使用一个有效的公网ip地址访问外部网络

11.2dnat

目的地址转换

外部用户可以通过一个公网地址访问服务内部的私网服务。私网的ip和公网的ip做一个映射

12、实验

关闭防火墙

test1、3安装nginx,重启

test2安装iptables,添加一个新网卡

配置test2网卡ens33ip地址

把ens33复制给ens36,并且配置地址

cp ifcfg-ens33 ifcfg-ens36

配置test3的网关和ip地址


配置test1的网关

test2 进入linux内核参数的配置文件

vim /etc/sysctl.conf

打开路由器数据包的转发功能

使内核参数的配置立刻生效

[root@test2 opt]# sysctl -p ​

net.ipv4.ip_forward = 1#表明已生效

源地址转换

iptables -t nat -A POSTROUTING -s 192.168.230.0/24 -o ens36 -j SNAT --to 10.0.0.10

-t nat:指定表为nat表
-A POSTROUTING:添加链
-s:指定源ip
-o:指定输出网络设备
-j:控制类型
--to:指定整个网段192.168.230.0/24,从ens36出去时,做源地址转换,转换成10.0.0.10

重启test1、2、3的网卡

systemctl restart network

进入test1、3的虚拟机

打开test3的终端,打开nginx的access日志

tail -f /var/log/nginx/access.log

在test1访问test3的地址12.0.0.100,访问成功

此时test3的access日志ip地址变为12.0.0.100,实现了源地址转换


目的地址转换DNAT

iptables -t nat -A PREROUTING -d 11.0.0.11 -i ens36 -p tcp --dport 80 -j DNAT --to 192.168.230.10

-d 11.0.0.11:指定作为目的地址转换的ip地址
-i:从指定的设备进入本机
-dport:指定端口
-j DNAT:使用目的地址转换
--to 192.168.230.10:外网想要访问内网的192.168.230.10这个web服务,只需要访问11.0.0.11就可以访问内网的web服务

test3访问11.0.0.11成功

13、在linux当中如何抓包

tcpdump是linux自带的抓包工具(最小化安装是不带的,需要额外安装)

静态抓包:

tcpdump tcp -i ens33 -t -s0 -c 10 and dst port 80 and src net 192.168.230.0/24 -w /opt/target.cap

tcp:指定抓包的协议udp icmp第一个参数,可以不指定协议
-i:只抓经过指定设备的包
-t:不显示时间戳
-s0:抓完整的数据包
-c 10:抓10个包
dst port:指定抓包的目的端口
src net 192.168.230.0/24:指定抓包的IP地址
net:网段
host:主机(ip地址)
src host 192.168.230.10
-w:保存指定路径

动态抓包:

tcpdump -i ens33 -s0 -w ./ens33.cap

如果要用wireshark对数据包进行分析,tcpdump在抓包时,要使用-s0,抓取完整格式,否则wireshark无法分析

14、firewalld

14.1定义

firewalld是centos7自带的,也是默认的,7以前默认是iptables

和iptables一样,也是包过滤防火墙

ip 端口 协议

14.2firewalld按照区域来划分

public:公共区域,默认配置了ssh以及DHCPv6预定服务是放通的,其他的全部都是拒绝。是默认区域

trusted:信任区域,允许所有的数据包放通

block:限制区域,拒绝所有

drop:丢弃区域,丢弃所有数据包

dmz:非军事区域,默认只允许ssh通过

home:家庭区域,默认只允许ssh通过

internal:内部区域,和home一模一样

external:外部区域,默认允许ssh通过,其他的全部拒绝

work:工作区域,默认放通ssh

14.3firewall-cmd 命令行工具

14.3.1区域管理

显示当前系统的默认区域:

firewall-cmd --get-default-zone

显示默认区域的所有规则:

firewall-cmd --list-all

 显示当前正在使用的区域及其对应的网卡接口:

firewall-cmd --get-active-zones

设置默认区域:

firewall-cmd --set-default-zone=block

firewall-cmd --get-default-zone #查看当前的默认区域。

14.3.2服务管理

查看默认区域内允许访问的所有服务:

firewall-cmd --list-service

#dhcpv6 -client 获取ipv6的地址

该区域默认使用的网卡设备

 添加httpd服务到public 区域:

firewall-cmd --add-service=http --zone=public

 查看public区域已配置规则:

firewall-cmd --list-all --zone=public

 删除public区域的httpd 服务:

firewall-cmd --remove-service=http --zone=public

 添加多个服务:

firewall-cmd --add-service=http --add-service=ftp --zone=public #方法一


firewall-cmd  --add-service={ftp,http} #方法二

同时添加httpd、ftp服务到默认区域,设置成永久生效:

firewall-cmd --add-service=http --add-service=ftp --permanent
firewall-cmd  --add-service={ftp,http} --zone=public --permanent  #两种方式
firewall-cmd --reload    
firewall-cmd --list-all  

添加使用 --permanent选项表示设置成永久生效,需要重新启动firewalld服务或执行firewall-cmd --reload命令 
重新加载防火墙规则时才会生效。若不带有此选项,表示用于设置运行时规则,
但是这些规则在系统或firewalld服务重启、停止时配置将失效。     

14.3.1端口管理

允许TCP的443端口到internal区域:

firewall-cmd --zone=internal --add-port=443/tcp
firewall-cmd --list-all --zone=internal

 从internal 区域将TCP的443端口移除:

firewall-cmd --zone=internal --remove-port=443/tcp

 允许UDP的2048~2050端口到默认区域:

[root@localhost ~]# firewall-cmd --add-port={21,80,23,24}/tcp
success
[root@localhost ~]# firewall-cmd --add-port=30-35/tcp
success
firewall-cmd --add-port=2048-2050/udp
firewall-cmd --list-all

添加源地址进行操作:

[root@localhost ~]# firewall-cmd --add-source=192.168.233.20 --zone=block
 
[root@localhost ~]# firewall-cmd --get-active-zone
 
[root@localhost ~]# firewall-cmd --remove-source=192.168.233.20 --zone=block
 
[root@localhost ~]# firewall-cmd --get-active-zone