Centos7 firewalld防火墙基础

来自linux中国网wiki
跳到导航 跳到搜索

常用命令

#如果你的系统上没有安装使用命令安装
yum install firewalld 

#开启服务 
systemctl start firewalld.service

#关闭防火墙
 systemctl stop firewalld.service

#开机自动启动
systemctl enable firewalld.service

#关闭开机制动启动
systemctl disable firewalld.service

#查看状态
systemctl status firewalld
firewall-cmd --state

#检查是否生效
firewall-cmd --zone=public --query-port=80/tcp

#列出所有的开放端口
firewall-cmd --list-all


#设置特定ip访问特定服务
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.4/24" service name="http" accept'
删除命令为 : --remove-rich-rule

端口转发路由 :

复制代码
# 将80端口的流量转发至8080
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080   

# 将80端口的流量转发至192.168.0.1
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1 

# 将80端口的流量转发至192.168.0.1的8080端口
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080 




#删除端口 这个好像 无效呢
firewall-cmd --zone=public --remove-port=80/tcp
firewall-cmd --zone=public --remove-service=http

例子说明

举例 添加 80 443  3306 对外公开

firewall-cmd --permanent --zone=public --add-port=80/tcp   #//永久
firewall-cmd --permanent --zone=public --add-port=443/tcp 
firewall-cmd --permanent --zone=public --add-port=3306/tcp 

firewall-cmd --zone=public --add-port=2222/tcp --permanent  # 用户SSH登录端口

#reload 使刚才的命令生效 
firewall-cmd --reload



my eg on lx 
firewall-cmd --add-port=80/tcp --add-port=443/tcp --permanent 

firewall-cmd --add-port=3306/tcp --add-port=6379/tcp    --add-port=5672/tcp  --add-port=15672/tcp  --permanent 

firewall-cmd --reload

 firewall-cmd  --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0 eth1
  sources:
  services: ssh dhcpv6-client
  ports: 80/tcp 443/tcp 3306/tcp 6379/tcp 5672/tcp 15672/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:


多个端口 
firewall-cmd --add-port=8000-8999/tcp  --permanent 

  firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="18.69.11.55" port protocol="tcp" port="9100-9256" accept" 

firewall-cmd --add-service=http --add-service=https --permanent 
firewall-cmd  --reload




端口允许被某固定 IP 访问

$ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="允许访问的IP" port protocol="tcp" port="端口" accept"
$ firewall-cmd --reload  # 重载规则, 才能生效
$ firewall-cmd --list-all  # 查看使用中的规则


添加多个端口要先删除 
    firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="148.6.11.59" port protocol="tcp" port="9256" accept" 

  firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="18.69.11.55" port protocol="tcp" port="9100-9256" accept" 


# 举例
# 允许 192.168.100.166 访问 6379 端口
$ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.100.166" port protocol="tcp" port="6379" accept"


配置文件
/etc/firewalld/zones/public.xml  




Firewalld 使用说明

知识点

firewalld跟iptables比起来至少有两大好处:

1、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;

2、firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。

firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter。

一个重要的概念:区域管理

注:FirewallD的默认区域是public。
firewalld默认提供了九个zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,他们都保存在“/usr/lib /firewalld/zones/”目录下。


配置方法

firewalld的配置方法主要有三种:firewall-config、firewall-cmd和直接编辑xml文件,其中 firewall-config是图形化工具,firewall-cmd是命令行工具,而对于linux来说大家应该更习惯使用命令行方式的操作

firewalld 基础知识

RHEL 7系统中集成了多款防火墙管理工具,其中firewalld(Dynamic Firewall Manager of Linux systems,Linux系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥有基于CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式。

相较于传统的防火墙管理配置工具,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。例如,我们有一台笔记本电脑,每天都要在办公室、咖啡厅和家里使用。按常理来讲,这三者的安全性按照由高到低的顺序来排列,应该是家庭、公司办公室、咖啡厅。当前,我们希望为这台笔记本电脑指定如下防火墙策略规则:在家中允许访问所有服务;在办公室内仅允许访问文件共享服务;在咖啡厅仅允许上网浏览。在以往,我们需要频繁地手动设置防火墙策略规则,而现在只需要预设好区域集合,然后只需轻点鼠标就可以自动切换了,从而极大地提升了防火墙策略的应用效率。firewalld中常见的区域名称(默认为public)以及相应的策略规则如表8-2所示。

   firewalld中常用的区域名称及策略规则

区域	默认规则策略
trusted	允许所有的数据包
home	拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量
internal	等同于home区域
work	拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关,则允许流量
public	拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许流量
external	拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
dmz	拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
block	拒绝流入的流量,除非与流出的流量相关
drop	拒绝流入的流量,除非与流出的流量相关


      firewall-cmd命令中使用的参数以及作用

参数	作用
--get-default-zone	查询默认的区域名称
--set-default-zone=<区域名称>	设置默认的区域,使其永久生效
--get-zones	显示可用的区域
--get-services	显示预先定义的服务
--get-active-zones	显示当前正在使用的区域与网卡名称
--add-source=	将源自此IP或子网的流量导向指定的区域
--remove-source=	不再将源自此IP或子网的流量导向某个指定区域
--add-interface=<网卡名称>	将源自该网卡的所有流量都导向某个指定区域
--change-interface=<网卡名称>	将某个网卡与区域进行关联
--list-all	显示当前区域的网卡配置参数、资源、端口以及服务等信息
--list-all-zones	显示所有区域的网卡配置参数、资源、端口以及服务等信息
--add-service=<服务名>	设置默认区域允许该服务的流量
--add-port=<端口号/协议>	设置默认区域允许该端口的流量
--remove-service=<服务名>	设置默认区域不再允许该服务的流量
--remove-port=<端口号/协议>	设置默认区域不再允许该端口的流量
--reload	让“永久生效”的配置规则立即生效,并覆盖当前的配置规则
--panic-on	开启应急状况模式
--panic-off	关闭应急状况模式
--permanent(永久配置

与Linux系统中其他的防火墙策略配置工具一样,使用firewalld配置的防火墙策略默认为运行时(Runtime)模式,又称为当前生效模式,而且随着系统的重启会失效。如果想让配置策略一直存在,就需要使用永久(Permanent)模式了,方法就是在用firewall-cmd命令正常设置防火墙策略时添加--permanent参数,这样配置的防火墙策略就可以永久生效了。但是,永久生效模式有一个“不近人情”的特点,就是使用它设置的策略只有在系统重启之后才能自动生效。如果想让配置的策略立即生效,需要手动执行firewall-cmd --reload命令。

接下来的实验都很简单,但是提醒大家一定要仔细查看刘遄老师使用的是Runtime模式还是Permanent模式。如果不关注这个细节,就算是正确配置了防火墙策略,也可能无法达到预期的效果。

查看firewalld服务当前所使用的区域:

[[email protected] ~]# firewall-cmd --get-default-zone
public

参考

good 最简单的firewalld防火墙操作流程

Firewalld常用防火墙规则设置

CentOS 7.0 关闭firewalld防火墙指令 及更换Iptables防火墙

centos7 firewall 防火墙 命令

细说firewalld和iptables How to Disable SELinux on CentOS 7

CHAPTER 5. USING FIREWALLS

Enable or Disable SELinux

centos 7 firewalld基本配置

How to Configure ‘FirewallD’ in RHEL/CentOS 7

centos7搭建集群必知:centos7已经无iptables,只有firewall

CentOS7使用firewalld打开关闭防火墙与端口

FirewallD入门手册

Iptables与Firewalld防火墙

centos7之firewalld规则详解(二)


CentOS7安装firewall防火墙