Linux防火墙

一、安全技术和防火墙
1.1 安全技术
入侵检测系统:特点是不阻断网络访问,主要是提供报警和时候报警,不主动介入。

入侵防御系统:透明模式工作,对数据包、网络监控、服务攻击、木马蠕虫、系统漏洞等等进行准确的分析和判断。在判定为攻击行为后会立即阻断,主动防御。所有数据在进入本机之前,必须要通过的设备或软件。

防火墙:核心功能:隔离,工作在网络或者主机的边缘,一般在Internet和内网之间。对网络或者主机的数据包基于一定的规则进行检查,根据匹配到的规则放行或拒绝(丢弃数据包)。

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

防水墙:是一种防止内部信息泄露的产品。对外有防火墙的功能,对内是透明模式工作,类似于监控。

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

firewalld :CentOS7以后默认的防火墙。功能和iptables大体一致。

ufw :是ubantu自带的防火墙,ubantu也有iptables,功能也一致

iptables ufw 和 firewalld都是包过滤防火墙,对数据包进行控制。在网络层对数据包进行选择,选择的依据是防火墙设置的策略。

策略:IP地址,端口,协议。

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

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

应用层防火墙:在应用层对数据进行检查,比较安全。
​ 优点:相对更安全,可以精准定位问题。

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

iptables防火墙
iptables防火墙工作在网络层,针对数据包实施过滤和限制,属于包过滤防火墙。

1.3 内核态和用户态
内核态

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

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

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

用户态

应用层软件层面,多是人为控制的一系列操作,使用功能等。

运维人员一般只考虑用户态。

数据只通过用户态处理,速度相对较慢。

二、iptables防火墙
iptables的配置和策略

2.1 四表五链
iptables的四表:

Raw表 :用于控制数据包的状态,可以跟踪数据包的状态

Mangle表 :用于修改数据包的头部信息

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

Filter表 :也是iptables的默认表,不做声明时,默认就是filter表,过滤数据包的进出,以及接收和拒绝数据包

iptables的五链:

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

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

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

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

POSTROUTING链 :处理数据包离开本机之后的规则(路由后)(Nat表)

通俗的说法:表里面有链,链里面有规则。

四表的优先级:

Raw > Mangle > Nat > Filter,匹配规则由高到低。

2.2 数据流向
例:数据转发的过程
按优先级高低查四表里的链,并匹配链里的规则

查PREROUTING链和POSTROUTING链查看地址变换规则,

查FORWARD链是否允许转发,以及转发的具体规则。

例:请求响应的过程(http https服务等)
按优先级高低查四表里的链,并匹配链里的规则

请求:查INPUT链的规则:是否允许该地址或者端口访问web服务。若拒绝,数据包将直接丢弃

响应:查OUTPUT链的规则:是否允许响应,一般不做约束。如拒绝,响应的数据包也被丢弃

2.3 iptables命令
管理选项 :在表的链中插入、增加、删除、查看规则。

匹配的条件 :数据包的IP地址、端口、协议。

控制类型 :允许,拒绝,丢弃,地址转换。

注意事项:

不指定表名的话,默认指的是filter表
不指定链名的话,默认指的是所有链(此乃禁止行为!)
除非设置了链的默认策略,否则必须指定匹配条件(一般都要指定匹配条件)
大部分选项、所有的链名和控制类型都是大写
2.3.1 控制类型
ACCEPT :允许数据包通过

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

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

SNAT :修改数据包的源地址(source)

DNAT :修改数据包的目的地址(destination)

2.3.2 常用管理选项
-A :在链中添加一条规则,在链尾添加。

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

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

-D :删除规则

-R :修改规则(慎用)

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

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

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

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

2.3.3 常用匹配条件
-p :指定协议类型

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

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

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

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

--sport :指定源端口

--dprot :指定目的端口

-m :使用扩展模块,扩展模块的使用方法在2.4内容中有介绍

2.3.4 iptables的命令格式

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

注意事项:

[-t 表名]不指定时默认指定filter表
[-j 控制类型],所有控制都要在前面 -j
需要先安装iptables和iptables-services,安装完成后启动并enable服务iptables
命令立即生效,不需要重启服务,重启服务会恢复默认策略
2.3.5 iptables匹配原则
每个链中的规则都是从上到下的顺序依次匹配,匹配到之后就不再向下匹配。
如果链中没有规则,则执行链的默认策略进行处理。
2.4 iptables实例
例:插入规则

拒绝所有主机来ping本机

iptables -A INPUT -p icmp -j REJECT
#此时ping该主机屏不通

在上一行后再添加一行

iptables -A INPUT -p icmp -j ACCEPT
#发现依然不能ping通,因为匹配规则从上到下,执行到REJECT就停止了

在第一行插入规则

iptables -I INPUT 1 -p icmp -j ACCEPT
#发现此时可以ping通,因为第一行规则是ACCEPT

指定源IP地址20.0.0.20进行控制

iptables -F
iptables -A INPUT -s 20.0.0.20 -p icmp -j REJECT

对多个源IP地址时,用逗号隔开

iptables -A INPUT -s 20.0.0.20,20.0.0.30 -p icmp -j DROP
#控制类型为DROP时,被限制的主机ping该主机不会收到任何响应信息

指定端口,端口要写在协议后面

iptables -A INPUT -p tcp --dport 22 -j REJECT
#拒绝所有ssh服务接入(目的端口是本机的22端口)

例:拒绝指定IP20.0.0.20通过ssh服务远程登录主机,

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

拒绝指定IP20.0.0.20获取本机的web服务

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

例:删除规则

删除规则比较简单,可以指定序号进行删除

iptables -L --line-numbers
#查看带行号的匹配规则
iptables -D INPUT 1
#删除INPUT链内的第一条规则

例:修改规则(很少用,不如直接增、删)

#修改的格式
iptables -R [链 序号] 修改后的规则
iptables -R INPUT 2 -s 20.0.0.30 -p tcp --dport 443 -j ACCEPT
#即把filter表 INPUT链 的第二条规则改成后面的内容

例:修改链的默认策略

修改filter表INPUT链的默认策略为DROP

iptables -P INPUT DROP

例:指定网络设备

拒绝客户机通过网卡ens33访问主机web服务

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

拒绝整个网段访问web服务

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

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

端口号以冒号:隔开,端口号小的在前,大的在后,一次最多操作两个端口

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

例:使用扩展模块

-m :使用扩展模块,可以一次性对多端口进行操作,还可以匹配IP范围,还可以指定MAC地址

匹配多端口:-m multiport ,端口号以逗号,隔开

iptables -A INPUT -p tcp -m multiport --dport 80,22,21 -j REJECT
#拒绝端口80/22/21的tcp协议服务

匹配IP范围:-m iprange,

匹配源IP :--src-range
匹配目的IP :--dst-range

iptables -A INPUT -p tcp -m iprange --src-range 20.0.0.20-20.0.0.30 --dport -j REJECT
#拒绝源ip地址范围内的IP访问主机

匹配MAC地址:-m mac

匹配源MAC :--mac-source

2.5 iptables的备份和保存
​ iptables 的配置文件保存在 /etc/sysconfig/iptables,每次重启服务都会重新读取配置文件里的规则

也可以通过iptables-save把当前防火墙配置保存在文件中,每次需要读取这个配置时通过iptables-restore命令获取配置,这个获取配置也是临时生效。可以配合脚本在系统启动时自动加载配置。

iptables-save > /opt/iptables.bak
#先把当前的防火墙配置存放到文件中
iptables-restore < /opt/iptables.bak
#从保存了配置的文件中加载防火墙配置

2.6 iptables自定义链
创建自定义链

iptables -N 自定义链名

修改自定义链名

iptables -E 旧名 新名

删除自定义链

iptables -X 链名
#注:删除链之前需要先清空链内的规则

2.7 地址转换
2.7.1 snat和dnat
snat :源地址转换

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

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

dnat :目的地址转换

外部用户,可以通过一个公网地址访问服务器内部的私网服务。

私网的IP和公网的IP做一个映射。

2.7.2 实验
test1 :20.0.0.10 ,nginx服务

test2 :两个网卡设备:

ens33:20.0.0.254(私网的网关)
ens36:12.0.0.254(用来模拟test3的地址是公网地址)
模拟test1的公网IP :10.0.0.10(test1的地址转换成10.0.0.10和test3进行通信)
test3 :12.0.0.10 ,nginx服务

要求:在test2上配置防火墙,使test1作为私网地址,test3作为公网地址,观察双方获取对方web服务时,/var/log/nginx/access.log中记录的访问主机地址,理解NAT的工作方式。

对test1,test2,test3的IP地址分别设置。其中test2两个网卡的IP地址分别作为test1和test3的网关地址。

对test2:

Linux 内核参数的配置文件/etc/sysctl.conf

vim /etc/sysctl.conf
#在配置文件中添加行
net.ipv4.ip_forward=1
#开启ipv4的转发功能
#保存退出
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 :添加规则到链
-s 20.0.0.0/24 :指定网段
-o :指定输出设备
-j SNAT :指定控制参数SNAT
--to 10.0.0.10 :20.0.0.0/24网段的源地址转换为10.0.0.10这个公网IP地址
目的地址转换:

iptables -t nat -A PREROUTING -d 10.0.0.10 -i ens36 -p tcp --dport 80 -j DNAT --to 20.0.0.10:80

-d 10.0.0.10 :指定作为目的地址转换的IP地址
-i :从指定设备进入本机
-p :指定协议
--dport :指定端口
-j DNAT :使用目的地址转换
--to 20.0.0.10:80 :外网想要访问内网的20.0.0.10:80(端口号80也可以不加)的web服务,只需要访问公网的10.0.0.10这个IP地址。
2.7.3 tcpdump抓包工具
tcpdump是Linux系统自带的抓包工具。

固定抓包:

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

tcp :指定抓包的协议,这个位置是第一个参数,也可以不指定
-i :只抓经过指定设备的包
-t :不显示时间戳(可以不加)
-s0 :抓取完整的数据包
-c 10 :抓几个数据包(10就是抓10个包)
dst port :指定抓包的目的端口
src net :指定抓包的IP网段,如果要指定主机把net改成host
-w :保存结果到指定文件
动态抓包:

tcpdump -i ens33 

一般把抓包的记录保存在.cap文件,导出到Windows系统用wireshark之类的抓包软件分析。需要注意的是,使用wireshark分析,需要tcpdump指定选项-s0获取抓包的完整格式。

三、firewalld防火墙
firewalld是CentOS7自带的防火墙,也是默认的防火墙。7以前默认是iptables。

ufw是ubantu自带的防火墙,ubantu也有iptables,功能也一致

#ubantu开启和关闭防火墙
ufw disable
ufw enable

firewalld是根据区域进行划分的,也是包过滤防火墙(ip/端口/协议)

firewall-config
#打开图形化界面

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

trust :信任区域,允许所有数据包放空。

block :限制区域,拒绝所有。

drop :丢弃区域,丢弃所有数据包,没有回应。

其他区域都是默认放空ssh和dhcpv6。

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

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

internal :内部区域,和home很像。

external :外部区域,默认只允许ssh通过。

work :工作区域,默认放空ssh。

3.2 命令行工具:firewall-cmd
#查看当前系统的默认区域

firewall-cmd --get-default-zone

#查看当前区域设置的规则

firewall-cmd --list-all

#切换当前系统的默认区域

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

#查看区域内允许访问的服务

firewall-cmd --list-service
firewall-cmd --list-services
#两个都行,效果一样

#修改区域默认使用的网络设备

firewall-cmd --zone=public --change-interface=ens36
firewall-cmd --zone=home --remove-interface=ens36

#添加服务到默认域中

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

#多个服务,永久添加

firewall-cmd --add-service={ftp,nfs,http} --zone=public --permanent
#--permanent 永久添加

#删除服务

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

#重新加载

firewall-cmd --reload

#添加端口到默认域中

firewall-cmd --zone=public --add-port=80/tcp

#添加端口并指定协议,端口在前协议在后,用 / 分割

firewall-cmd --zone=public --add-port={80,21,3306,22}/tcp

#删除端口

firewall-cmd --zone=public --remove-port=80/tcp

#添加源IP

firewall-cmd --zone=block --add-source=192.168.233.20
firewall-cmd --get-active-zone

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值