linux学习笔记(26)firewalld防火墙

【1】firewalld 的安装与基本概念

FirewallD 是 CentOS 7 服务器上默认可用的防火墙管理工具。

基本上,它是 iptables 的封装,有图形配置工具 firewall-config 和命令行工具 firewall-cmd

使用 iptables 服务,每次改动都要求刷新旧规则,并且从 /etc/sysconfig/iptables 读取新规则,然而 firewalld 只应用改动了的不同部分。

(1.0)安装并查看状态

yum install firewalld
启动服务,并在系统引导时启动该服务:

systemctl start firewalld
systemctl enable firewalld
停止并禁用:

systemctl stop firewalld
systemctl disable firewalld
检查防火墙状态。输出应该是 running 或者 not running

# firewall-cmd --state
running
默认情况下,firewalld 处于运行状态,并拒绝所有传入流量,但有几个例外,如 SSH。

查看 FirewallD 守护进程的状态:

systemctl status firewalld

 

(1.1)Zone的概念

Zone :名称 Zone 描述block :所有进入的网络连接都会被拒绝。对于 IPV4,回复 icmp-host-prohibited 消息。对于 IPV6,回复 icmp6-adm-prohibited 消息。只有由内部发起的网络连接可以通行。

dmz  :对于在非军事区域的服务器,外部网络可以在受限制的情况下进入内网,只有特定的网络连接请求被接受。

drop  :所有的进入的网络包都会被丢掉,并且没有任何的回应。只有向发起的连接请求可以被放行。

external :用于开始伪装的外部网络,特别是作为路由器。任务外部的网络会损坏你的计算机,只有特定的网络连接请求被接受。

internal :在内部网络使用,信任当前网络下其他的计算机。只有特定的网络连接请求被接受。

work    :在工作网络中使用,信任网络上的其他计算机。只有特定的网络连接请求被接受

home    :允许访问 cockpit、dhcpv6-client、mdns、samba-clent、ssh,拒绝其他所有。

public   :允许访问 cockpit、dhcpv6-client、、ssh,拒绝其他所有。

trusted :允许所有。

block    :默认决绝所有

(1.2)策略制定的规则

  我们可以根据服务的类型,端口号,协议号,源端口,接口,来源等等来设定防火墙的规则;

 

(1.3)策略的有效期(如何永久生效)

运行时:本次运行有效,防火墙重启后失效;

永久:永久有效; (-permanent)

 

使用 firewalld 配置的防火墙策略默认为运行时(Runtime)模式,随着系统的重启会失效。

如果想让配置一直存在,就需要使用永久(Permanent)模式,方法就是在用 firewall-cmd 命令时添加 –permanent 参数,设置之后需要执行 firewall-cmd –reload 命令重启,如下

用命令怎么实现呢?我们假设现在要添加smtp服务到public区域中:

firewall-cmd -zone=public -add-service=smtp                //运行时有效,重启失效
firewall-cmd -permanent -zone=public -add-service=stmp     //永久有效,重启后开始生效
firewall-cmd -runtime-to-permanent //将运行时配置转为永久配置
#永久开放6379端口
firewall-cmd --add-port=6379/tcp --permanent --zone=public

#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

 

 

【2】firewalld 常用命令

(2.1)基本命令

firewalld-cmd --version        //查看firewalld版本
firewalld-cmd --help           //查看firewalld用法
man firewalld-cmd              //查看firewalld用法
 
systemctl status firewalld     //查看firewalld状态
firewalld-cmd --reload         //重载firewalld,当前已经生效的连接不中断
firewalld-cmd --compulete-reload    //重载firewalld,当前连接中断
 
firewalld-cmd --get-services   //列出所有预设服务,如上图的“3”
firewalld-cmd --list-services  //列出当前正在生效的服务
firewalld-cmd --permanent --zone=public --add-service=smtp      //在public区域中的永久配置中启用smtp服务
firewalld-cmd --permanent --zone=public --remove-service-smtp   //在public区域中的永久配置中移除smtp服务
 
firewalld-cmd --zone=public --list-ports    //列出public区域中已经启用的端口号
firewalld-cmd --permanent --zone=public --add-port=8080/tcp     //在public区域中的永久配置中启用8080端口
firewalld-cmd --permanent --zone=public --remove-port=8080/tcp  //在public区域中的永久配置中移除8080端口
 
firewalld-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=90    //将本机的80端口流量转发到90端口,区域为public
 
//将本机80端口的流量转发到192.168.1.1这台主机的8080端口上
firewall-cmd --zone=public --add-masquerade       //不同服务器端口转发,要先开启 masquerade
firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.1
 
firewall-cmd --get-zones                          //查看所有可用区域
firewall-cmd --get-active-zones                   //查看当前活动的区域
firewall-cmd --list-all-zones                     //列出所有区域的所有配置
firewall-cmd --zone=work --list-all               //列出指定区域(如:work区域)的所有配置
firewall-cmd --get-default-zone                   //查看默认区域
firewall-cmd --set-default-zone=public            //设定默认区域
//设定某一网段为内网段(然后可以创建策略为只允许内网访问呀) firewall-cmd --permanent --zone=internal --add-source=192.168.122.0/24 firewall-cmd --permanent --zone=internal --remove-source=192.168.122.0/24 //移除

(2.2)富规则 rich-rule 

firewall-cmd –list-rich-rules //列出所有富规则

复杂规则配置案例:

//允许来自主机 192.168.0.14 的所有 IPv4 流量
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept'

//拒绝来自主机 192.168.1.10 到 22 端口的 IPv4 的 TCP 流量
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject'

//允许来自主机 10.1.0.3 到 80 端口的 IPv4 的 TCP 流量,并将流量转发到 6532 端口上
firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.1.0.3 forward-port port=80 protocol=tcp to-port=6532'

//将主机 172.31.4.2 上 80 端口的 IPv4 流量转发到 8080 端口(需要在区域上激活 masquerade)
firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=172.31.4.2'

//允许192.168.122.0/24主机所有连接
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.122.0" accept'

//每分钟允许2个新连接访问ftp服务
firewall-cmd --add-rich-rule='rule service name=ftp limit value=2/m accept'

//同意新的IPv4和IPv6连接FTP ,并使用审核每分钟登录一次
firewall-cmd --add-rich-rule='rule service name=ftp log limit value="1/m" audit accept'

//允许来自1192.168.122.0/24地址的新IPv4连接连接TFTP服务,并且每分钟记录一次
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.122.0/24" service name=ssh log prefix="ssh" level="notice" limit value="3/m" accept'

//丢弃所有icmp包
firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'

//当使用source和destination指定地址时,必须有family参数指定ipv4或ipv6。如果指定超时,规则将在指定的秒数内被激活,并在之后被自动移除
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.122.0/24 reject' --timeout=10

//拒绝所有来自2001:db8::/64子网的主机访问dns服务,并且每小时只审核记录1次日志
firewall-cmd --add-rich-rule='rule family=ipv6 source address="2001:db8::/64" service name="dns" audit limit value="1/h" reject' --timeout=300

//允许192.168.122.0/24网段中的主机访问ftp服务
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.122.0/24 service name=ftp accept'

//转发来自ipv6地址1:2:3:4:6::TCP端口4011,到1:2:3:4:7的TCP端口4012
firewall-cmd --add-rich-rule='rule family="ipv6" source address="1:2:3:4:6::" forward-portto-addr="1::2:3:4:7" to-port="4012" protocol="tcp" port="4011"'

 

【3】最佳实践

(3.1)构建自定义区域来 指定IP 访问 指定端口

首先创建一个适当的区域名称(在我们的例子中,我们使用了mariadb access来允许访问MySQL数据库服务器)。

# firewall-cmd --new-zone=mariadb-access --permanent

接下来,重新加载firewalld设置以应用新更改。如果跳过此步骤,则在尝试使用新区域名称时可能会出错。这一次,新区域应该出现在区域列表中,如下面的屏幕截图所示。

# firewall-cmd --reload
# firewall-cmd --get-zones

接下来,添加要在本地服务器上打开的源IP地址(10.24.96.5/20)和端口(3306),如图所示。然后重新加载防火墙设置以应用新更改。

# firewall-cmd --zone=mariadb-access --add-source=10.24.96.5/20 --permanent
# firewall-cmd --zone=mariadb-access --add-port=3306/tcp --permanent
# firewall-cmd --reload

或者,您可以允许从整个网络(10.24.96.0/20)到服务或端口的流量。

# firewall-cmd --zone=mariadb-access --add-source=10.24.96.0/20 --permanent
# firewall-cmd --zone=mariadb-access --add-port=3306/tcp --permanent
# firewall-cmd --reload

要确认新分区具有上面添加的所需设置,请使用以下命令检查其详细信息。

# firewall-cmd --zone=mariadb-access --list-all

(3.2)富规则 实现 指定IP 访问指定端口

firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="1.2.3.4/32" port protocol="tcp" port="4567" accept'
firewall-cmd --reload

(3.3)多个端口

# 多个端口
firewall-cmd --zone=mariadb-access --add-port=3306-3309/tcp --permanent

 

【4】如何配置日志

实验效果

记录所有被防火墙拦截的数据包,并且保存以用于后续分析服务器是否被"端口扫描"

配置步骤

(4.1)启用防火墙日志记录功能

可以使用 firewall-cmd 命令修改

[root@localhost ~]# firewall-cmd --set-log-denied=unicast --permanent
[root@localhost ~]# firewall-cmd --reload

 

(4.2)配置日志文件单独保存

默认情况下,防火墙的拒绝日志会被保存在/var/log/messages 文件中。

但随着时间流逝,大量的拒绝日志可能会充斥该文件,并且默认系统会对 messages 文件进行日志旋转,不利于后续的准确分析。

可以通过 rsyslog 来捕获日志,并将其重定向到其他指定的文件中。

在 /etc/rsyslog.d/ 目录下创建一个 firewalld.conf 的文件,内容如下:

:msg,contains,"_DROP" /var/log/firewalld.log
& stop
:msg,contains,"_REJECT" /var/log/firewalld.log
& stop

然后重启 rsyslog 服务

[root@localhost ~]# systemctl restart rsyslog

 

(4.3)审计日志

直接查看该文件( /var/log/firewalld.log )很难统计出所有的信息,因为日志条目太长了,并且数量也多。

需要借助 grep 命令 awk 等命令帮助列出有用的信息。

最终我们想要看到的日志条目格式如下:

源IP地址-->协议/TCP:目的端口

源IP地址-->协议/UDP:目的端口

创建一个自定义命令 analyze-firewall 写入以下内容:

#!/bin/bash
cat /var/log/firewalld.log | awk '{print $10"="$17":"$19}' | grep -vE "SRC=0000*|SRC=fe80*" | grep DPT >deny_analyze
cat /var/log/firewalld.log | awk '{print $10"="$18":"$20}' | grep -vE "SRC=0000*|SRC=fe80*" | grep DPT >>deny_analyze
cat deny_analyze | awk -F= '{gsub("PROTO","协议",$3);gsub("DPT","",$4);print $2"->"$3"/"$4$5}' | sort -nr | uniq -c | sort -nr | head -5

(4.4)运行效果

[root@localhost ~]# analyze-firewall
202 172.25.250.11->协议/TCP:8888
75 172.25.250.11->协议/TCP:23
52 172.25.250.11->协议/TCP:943
40 172.25.250.12->协议/TCP:80
32 172.25.250.11->协议/TCP:53

 

(4.5)参考文档

该部分转自:https://www.bilibili.com/read/cv20486259/ 出处:bilibili

相关参考:https://baijiahao.baidu.com/s?id=1685684533566281761&wfr=spider&for=pc

 

posted @ 2022-07-19 16:00  郭大侠1  阅读(369)  评论(0编辑  收藏  举报