firewall防火墙基础配置
Firewalld防火墙
Centos7 中集成了防火墙管理工具, Firewall系统动态防火墙管理器是作为默认的防火墙工具.
它支持规则动态更新,并加入zone区域概念.
Firewalld防火墙是在iptables基础上新型的防火墙服务,它调用的是iptables

firewalld防火墙默认规则
在Firewalld防火墙规则设置中,从外部访问服务器内部,如果没有添加规则,默认是拒绝的
而从服务器内部访问服务器外部则是默认放行的.
防火墙基本命令
#启动停止命令:
systemctl start firewalld
systemctl stop firewalld
systemctl status firewalld
systemctl enable firewalld
#禁用旧版防火墙
systemctl mask iptables.service
systemctl mask ip6tables.service
#zone区域命令
firewall-cmd --get-default-zone #查看默认区域
firewall-cmd --get-active-zones #查看活跃的区域
#活跃区域规则查看:
[root@master ~]# firewall-cmd --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@xuexi-001 ~]# firewall-cmd --list-all --zone=drop
drop
target: DROP #默认拒绝
icmp-block-inversion: no
interfaces: eth0 #网卡接口
sources: #源
services: #服务
ports: #端口
protocols: #端口转换
masquerade: no #IP伪装
forward-ports: #端口伪装
source-ports: #源端口
icmp-blocks: #源ip
rich rules: #规则
## 检查服务端口是否开放:
firewall-cmd --set-default-zone=public
[root@xuexi-001 ~]# firewall-cmd --zone=public --query-service=ssh
yes
firewall-cmd --add-masquerade #开启IP伪装
firewalld恢复默认规则:
恢复默认规则有两种方式:
1. 命令行操作
[root@xuexi-001 ~]# firewall-cmd --set-default-zone=public
Warning: ZONE_ALREADY_SET: public
success
[root@xuexi-001 ~]# firewall-cmd --reload
success
2. 配置文件操作
[root@xuexi-001 ~]# vim /etc/firewalld/firewalld.conf
[root@xuexi-001 ~]# firewall-cmd --reload
success
无论那种方法修改都需要对防火墙执行重启操作: firewall-cmd --reload
如果有规则存在,需要清空规则 如:
方法1:
[root@xuexi-001 ~]# firewall-cmd --remove-source=10.0.0.0/24 --zone=public --permanent
Warning: NOT_ENABLED: 10.0.0.0/24
success
方法2: 修改配置文件 vim /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/> #--- 对应规则
<service name="dhcpv6-client"/> #--- 对应规则
</zone>
删除对应规则然后 firewall-cmd --reload 即可
firewalld实验: 设置默认区域和白名单
使用默认区域 drop可以拒绝所有连接,在使用白名单配合后可以配置仅限于某个IP能够连接到服务器
清理默认区域
1. 设置默认区域drop:
firewall-cmd --set-default-zone=drop
firewall-cmd --permanent --change-interface=eth0 --zone=drop
2. 检查设置
[root@master ~]# firewall-cmd --get-default-zone
drop
3. 添加白名单:
[root@master ~]# firewall-cmd --add-source=10.0.0.0/24
success
[root@master ~]# firewall-cmd --add-source=192.168.0.0/24
success
#两个网段一个是本机网段一个是虚拟机网段.
[root@master ~]# firewall-cmd --add-source=192.168.0.0/24 --permanent --zone=trusted
success
4. 检查:
[root@master ~]# firewall-cmd --list-all
drop (active)
target: DROP
icmp-block-inversion: no
interfaces:
sources: 10.0.0.0/24 192.168.0.0/24
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@master ~]# firewall-cmd --list-all-zones
trusted (active)
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources: 192.168.0.0/24
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@master ~]# firewall-cmd --list-all --zone=trusted
trusted (active)
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources: 10.0.0.0/24 192.168.0.0/24
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
5. 重载生效:
[root@master ~]# firewall-cmd --reload
success
策略配置
1. 安装一个nginx,并启动
yum install -y nginx
2. 测试从外部访问nginx
发现无法访问
3. 防火墙策略配置:
[root@xuexi-001 firewalld]# firewall-cmd --add-port=80/tcp
success
如果需要移除可以使用命令: firewall-cmd --remove-port=80/tcp 即可
添加80端口访问后检查防火墙如下:
[root@xuexi-001 firewalld]# firewall-cmd --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh
ports: 80/tcp #------- 允许80
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
移除80端口后检查防火墙如下:
[root@xuexi-001 firewalld]# firewall-cmd --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh
ports: #--------- 没有允许80
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
## 多端口添加:
[root@xuexi-001 firewalld]# firewall-cmd --permanent --add-port=8080/tcp --add-port=8080/udp
success
注意: --permanent 参数为永久生效的意思
## 删除添加的端口[临时删除]:
[root@xuexi-001 firewalld]# firewall-cmd --remove-port=8080/udp
success
[root@xuexi-001 firewalld]# firewall-cmd --remove-port=8080/tcp
success
## 注意如果是永久有效的规则,还需要继续配置永久失效[永久删除]:
firewall-cmd --remove-port=8080/tcp --permanent
firewall-cmd --remove-port=8080/udp --permanent
#服务名方式添加和移除端口
案例: 添加nginx端口
[root@xuexi-001 firewalld]# firewall-cmd --add-service=http --add-service=https
success
检查:
[root@xuexi-001 firewalld]# firewall-cmd --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh http https
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
添加陌生服务端口
思考: 这些服务名我们知道哪些端口,但是是否也有一些陌生服务端口我们不知道的,这里面也没有的呢? 如何自定义添加陌生服务端口?如:zabbix nfs php-fpm
检查这些端口有没有:
[root@xuexi-001 firewalld]# firewall-cmd --add-service=php-fpm
Error: INVALID_SERVICE: php-fpm
这些端口都是没有被提供的,现在需要我们自定义添加端口.
所有服务端口其实都是定义了一个配置文件,它位于: /usr/lib/firewalld/services/ 目录中,我们可以照葫芦画瓢,拷贝一份用于新服务配置
#配置php-fpm端口
[root@xuexi-001 firewalld]# cd /usr/lib/firewalld/services/
[root@xuexi-001 services]# cp http.xml php-fpm.xml
[root@xuexi-001 services]# vim php-fpm.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>WWW (HTTP)</short>
<description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description>
<port protocol="tcp" port="80"/>
</service>
改为:
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>WWW (HTTP)</short>
<description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description>
<port protocol="tcp" port="8000"/>
</service>
修改完成后,添加服务允许试试:
[root@xuexi-001 services]# firewall-cmd --reload #添加完了服务配置文件需要重载firewall
success
[root@xuexi-001 services]# firewall-cmd --add-service=zabbix # 这样就可以自定义添加服务了.
success
#还是重启服务有用,直接firewall-cmd --reload 有时候不生效.
[root@xuexi-001 services]# systemctl restart firewalld.service
添加完成后,通过命令就可以看到我们服务名 zabbix 已经添加成功.
[root@xuexi-001 services]# firewall-cmd --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh zabbix
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
firewall端口转发案例:
#语法:
firewall-cmd --permanent --zone=[区域,默认:public] --add-forward-port=port=[源端口]:proto=[协议名,如:tcp]:toport=[目标端口]:toaddr=<目标IP地址>
--permanent是永久生效.
#将80端口转为8888端口
[root@xuexi-001 services]# firewall-cmd --add-forward-port=port=8888:proto=tcp:toport=80
success
#注意如果需要永久生效,记得尾部在添加 --permanent
[root@xuexi-001 services]# firewall-cmd --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh http zabbix
ports:
protocols:
masquerade: no
forward-ports: port=8888:proto=tcp:toport=80:toaddr= #这里是添加后的规则
source-ports:
icmp-blocks:
rich rules:
例子:
将本地端口10.0.0.63:888端口转发到后端10.0.0.64:22端口
命令:
[root@xuexi-001 ~]# firewall-cmd --add-forward-port=port=888:proto=tcp:toport=22:toaddr=10.0.0.64
success
[root@xuexi-001 ~]# firewall-cmd --add-masquerade #开启IP伪装
[root@xuexi-001 ~]# firewall-cmd --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports: port=888:proto=tcp:toport=22:toaddr=10.0.0.64
source-ports:
icmp-blocks:
rich rules:

可以看到我们连接的IP是10.0.0.63的888端口,而我们进入服务器得到的IP是真实服务器: 10.0.0.64
案例1: 允许10.0.0.0/24网段中的 10.0.0.10主机访问http服务,其他网段主机都不可以访问,当前和永久生效
firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1/32 server name=http accept'
案例2: 拒绝10.0.0.0/24网段中的10.0.0.10主机发起的SSH请求,但是允许访问http,当前和永久生效
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=10.0.0.10/32 service name=ssh drop'
案例3: 将远程10.0.0.10的主机请求 firewalld的5000端口转发到后端10.0.0.20的22端口?
firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.10/32 forward-port port="5551" protocol="top" to-port="22"'
firewalld共享上网
1. 开启内核转发
echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
2. 防火墙规则
firewall-cmd --add-masquerade --permanent
firewall-cmd --reload
firewall防火墙基础配置的更多相关文章
- 《Linux就该这么学》培训笔记_ch08_iptables与firewall防火墙
<Linux就该这么学>培训笔记_ch08_iptables与firewall防火墙 文章最后会post上书本的笔记照片. 文章主要内容: 防火墙管理工具 iptables firewal ...
- Linux学习之八--关闭firewall防火墙安装iptables并配置
CentOS 7之后默认使用的是firewall作为防火墙,这里改为iptables防火墙,并开启80端口.3306端口. 1.关闭firewall: systemctl stop firewalld ...
- CentOS7下Firewall防火墙配置用法详解
官方文档地址: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide ...
- CentOS 7中firewall防火墙详解和配置以及切换为iptables防火墙--转载
最近在linux(这里用到的是Centos7的64位版本)安装nginx时,在开放80端口时用iptables设置端口 和重启服务发现提示未找到文件,在网络上收集查找后发现在Centos7中iptab ...
- pfSense软件防火墙安装配置
一,说明 1.1 pfSense是什么 pfSense是基于FreeBSD的.开源中最为可靠(World's Most Trusted Open Source Firewall)的.可与商业级防火墙一 ...
- vyos 基础配置
vyos 基础配置 http://www.lowefamily.com.au/2015/11/29/using-a-vyos-router-with-hyper-v/1/http://thomasvo ...
- hadoop生态搭建(3节点)-01.基础配置
# 基础配置# ==================================================================node1 vi /etc/hostname nod ...
- freeRadius 基础配置及测试
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- Linux的安装(虚拟机环境)与基础配置
一.背景 本文介绍如何安装虚拟机VMware以及如果在虚拟机上安装Linux系统以及Linux安装完毕之后的基础配置 需要准备的东西有VMware以及Linux镜像文件 二.下载安装VMware 下载 ...
- firewall防火墙
firewall防火墙 1 防火墙简介 在基于RHEL7的服务器,提供了一个firewall的动态管理的防火墙,其支持IPv4和IPv6,还支持以太网桥,并有分离运行时间和永久性配置选择.它还具备一个 ...
随机推荐
- scala json解析到case类
有时候,需要将从json文件读取程序配置设置,并同步到定义好的一些case类中,这个时候可以使用 io.circe解析json文件,并同步文件字段到定义好的case类 case class Confi ...
- 树模型--ID3算法
基于信息增益(Information Gain)的ID3算法 ID3算法的核心是在数据集上应用信息增益准则来进行特征选择,以此递归的构建决策树,以信息熵和信息增益为衡量标准,从而实现对数据的归纳分类. ...
- mysql 必知必会整理—数据库的维护[十八]
前言 简单介绍一下数据库的维护. 正文 像所有数据一样,MySQL的数据也必须经常备份. 由于MySQL数据库是基于磁盘的文件,普通的备份系统和例程就能备份MySQL的数据. 但是,由于这些文件总是处 ...
- Kotlin泛型的高级特性
Kotlin中是可以将内联函数中的泛型进行实化的. 那么具体该怎么写才能将泛型实化呢?首先,该函数必须是内联函数才行,也就是要用inline 关键字来修饰该函数.其次,在声明泛型的地方必须加上reif ...
- 向量数据库Chroma学习记录
一 简介 Chroma是一款AI开源向量数据库,用于快速构建基于LLM的应用,支持Python和Javascript语言.具备轻量化.快速安装等特点,可与Langchain.LlamaIndex等知名 ...
- 【GDKOI 2024 TG Day2】不休陀螺(top) 题解
考虑一个卡牌区间怎样才不是"陀螺无限". 一个是费用在打到一半时费用就不够了.考虑构造一个卡牌序列使其尽量能够在打到一半时费用就不够,如何构造呢? 把 \(a_i > b_i ...
- 使用日志上下文聚合插件使能上下文查询及Livetail
简介: 日志上下文浏览是排查业务故障时常用的方式,但受限于Logtail插件系统的设计,在Logtail 1.2.1版本前,如果用户使用Logtail插件来处理日志或采集容器的标准输出,那么用户将无法 ...
- 阿里云数据库开源重磅发布:PolarDB HTAP的功能特性和关键技术
简介:在3月2日的阿里云开源 PolarDB 企业级架构发布会上,阿里云 PolarDB 内核技术专家严华带来了主题为<PolarDB HTAP详解>的精彩演讲.在PolarDB存储计算分 ...
- 长文解析:作为容器底层技术的半壁江山, cgroup如何突破并发创建瓶颈?
简介: io_uring 作为一种新型高性能异步编程框架,代表着 Linux 内核未来的方向,当前仍处于快速发展中.阿里云联合 InfoQ 发起<io_uring 介绍及应用实践>的技术 ...
- 学习 Avalonia 框架笔记 如何创建一个全屏置顶的 X11 应用窗口
本文记录我从 Avalonia 框架里面学到如何创建一个全屏置顶的 X11 应用窗口的方法 开始之前,先从 Avalonia 或 CPF 里面拷贝足够的代码,这部分代码可以从本文末尾找到下载方法 设置 ...