centos7防火墙firewalld

1、firewalld简介

在RHEL7/CentOS7.x 版本上,firewalld已经替代iptables成为默认的防火墙软件,firewalld是centos7的一大特性,最大的好处有两个:

第一个:支持动态更新,不用重启服务,随时添加规则,随时生效,这个过程不需要重新装载netfilter内核模块,但是要求所有的规则都通过firewalld守护进程来实现,以确保守护进程内的防火墙状态和内核中的防火墙状态一致;守护进程firewalld,应用程序、守护进程和用户可以通过D-BUS请求一个防火墙特性,特性可以是预定义的防火墙功能,例如:服务、端口和协议的组合、端口/数据报转发、伪装、ICMP拦截或自定义的规则。原有的静态防火墙规则还可以继续使用,但是不能和firewalld同时存在,需要使用这两者中的任何一个时,停止另外一个的使用。

第二个就是加入了区域(zone)的概念

区域定义了网络连接的可信等级,这是一个一对多的关系,意味着一次连接可以仅仅是一个区域的一部分,一个区域可以用于很多连接。

区域的功能包括如下几个方面:

预定义的服务:服务是端口和/或协议入口的组合,备选内容包括netfilter助手模块以及IPv4、IPv6地址。

端口和协议:定义了tcp或udp端口,可以是一个端口或者一个端口范围;

ICMP阻塞:可以选择Internet控制报文协议的报文,这些报文可以是信息请求,也可以是对信息请求或错误条件创建的响应。

伪装(masqerading):私有网络地址可以被映射到公共的IP地址,这是一个正规的IP地址转换。

端口转发:端口可以映射到另外一个端口或者另外一台主机上的端口。

firewalld引入这一概念系统默认存在以下区域:

drop:默认丢弃所有包,不作出任何相应,只允许流出的网络连接

block:拒绝所有外部连接,并返回 IPv4 的 icmp-host-prohibited 报文或者 IPv6 的 icmp6-adm-prohibited 报文。只允许由该系统初始化的网络连接

public:用以可以公开的部分。你认为网络中其他的计算机不可信并且可能伤害你的计算机。只允许选中的连接接入

external: 用在路由器等启用伪装的外部网络。你认为网络中其他的计算机不可信并且可能伤害你的计算机,只允许选中的服务通过。

dmz:用以允许隔离区(dmz)中的电脑有限地被外界网络访问,只允许选中的服务通过。

work:用在工作网络,你新人网络中的大多数计算机不会影响你的计算机,只接受被选中的连接。

home:你信任网络中的大多数计算机不会影响你的计算机,只允许选中的服务通过

internal:用在内部网络。你信任网络中的大多数计算机不会影响你的计算机,只允许选中的服务通过。

trusted:允许所有网络连接,即使没有开放任何服务,那么使用此zone的流量照样通过(一路绿灯)。

2、安装firewalld

firewalld有图形界面和工具界面,本文以字符界面做介绍

firewalld的字符界面管理工具是 firewall-cmd

firewalld默认配置文件有两个:/usr/lib/firewalld/ (系统配置,尽量不要修改)和 /etc/firewalld/ (用户配置地址)

/usr/lib/firewalld/zones/用于配置默认和备用区域,/etc/firewalld/zones用于用户创建和自定义配置区域

root执行

yum install firewalld

3、配置firewalld

(1)为网络连接设置或者修改区域

在ifcfg-eth文件中修改,添加

zone=public(或者其他区域)

来为网卡指定区域,没有指定该参数的话就使用默认的区域

(2)使用firewalld

firewall-cmd

通用选项

查看版本

$ firewall-cmd -V | --version 

查看帮助

$ firewall-cmd -h | --help 

不显示状态信息

$ firewall-cmd -q | --quiet

状态选项

显示状态

$ firewall-cmd --state
running

重新加载防火墙规则并保留原有的状态信息,如果不使用永久生效选项,则重启后规则消失

$ firewall-cmd --reload

重新完全加载防火墙,包括netfilter kernel模块。会因为丢失连接的状态信息而断开已经激活的连接,仅适用于严重的防火墙故障,例如在正确的防火墙规则下但是不能建立有效的连接。

$ firewall-cmd --complete-reload

永久选项

用来设置参数永久生效,这个选项配置的时候不会立即生效,而需要重启服务或者重启系统。没有使用这个参数的话,设置的规则重启防火墙或者重启系统后丢失。

$ firewall-cmd --permanent

区域选项(zone options)

获取默认区域

$ firewall-cmd --get-default-zone
public

本机的默认区域是public

设置默认区域,流入默认区域的接口的新请求将由新的默认区域接收,当前已连接的不受影响。

$ firewall-cmd --set-default-zone=zone

显示出当前激活的zone以及zone绑定的端口和zone中使用的资源。输出格式如下

$ firewall-cmd --get-active-zone
public
  interfaces: eno16777736

支持的服务(不一定已经启用),用空格分隔的列表

$ firewall-cmd --get-services
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec iscsi-target kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind rsyncd samba samba-client smtp ssh telnet tftp tftp-client transmission-client vdsm vnc-server wbem-https

获取所有支持的ICMP类型(不一定启用)

$ firewall-cmd --get-icmptypes
destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded

可以看到现在firewalld默认支持的服务已经非常多了

列出全部启用的区域的特性

$ firewall-cmd --list-all-zones

  

输出某个区域的全部特性

$ firewall-cmd --zone=zone --list-all

查看指定接口所属区域

$ firewall-cmd --get-zone-of-interface=eth0

  

将接口增加到区域,如果接口不属于区域,接口被增加到这个区域,如果区域被省略,则使用默认区域。接口在小红心加载后重新应用。此时如果接口已经绑定到相应的zone上面以后,这样更改会出错,需要先在对应的zone里面把接口信息删除,然后才能添加

$ firewall-cmd --zone=zone --add-interface=<interface>

  

修改接口所属的区域

$ firewall-cmd --zone=zone --change-interface=<interface>

从区域中删除一个接口

$ firewall-cmd --zone=zone --remove-interface=<interface>

查询某个区域中是否包含这个接口  

$ firewall-cmd --zone=zone --query-interface=<interface>      

列出区域中启用的服务

$ firewall-cmd --zone=zone --list-services

启动应急模式阻断所有网络连接,以防出现紧急状况;

$ firewall-cmd --panic-on  

禁用应急模式

$ firewall-cmd --panic-off

查看是否启用应急模式

$ firewall-cmd --query-panic 

处理运行时区域

运行时模式下对区域进行的修改不是永久有效的,重新加载或者重启系统后修改将失效

启用某个区域中的一种服务,timeout参数设定该服务启动时间,permanet参数设置该服务永久生效(需要重启firewalld守护进程),timeout和permanet不可同时使用。

$ firewall-cmd [--permanet] --zone=zone --add-service [--timeout=seconds]

例如:使区域中的http服务生效5min

$ firewall-cmd --zone=public --add-service --timeout=300

禁止区域中的某种服务

$ firewall-cmd --zone=zone --remove-service

查询区域中是否启用了特定的服务

$ firewall-cmd --zone=zone --query-service 

启用端口和协议的组合,端口可以是一个单独的端口或者一个端口范围,协议可以是tcp或udp

$ firewall-cmd --zone=zone --add-port=<port>/protocol [--timeout=seconds]

禁用端口和协议的组合

$ firewall-cmd --zone=zone --remove-port=<port>[-<port>]/<protocol> 

查询区域中是否启用了端口和协议的组合,如果启用有返回值,反之没有。

$ firewall-cmd --zone=zone --query-port=<port>[-<port>]/<protocol> 

启用区域中的IP伪装功能,私有网络地址被隐藏并映射到一个公有IP,常用于路由,由于内核的性质,仅可用于ipv4

$ firewall-cmd --zone=zone --add-masquerade 

禁用IP伪装功能

$ firewall-cmd --zone=zone --remove-masquerade

查询区域的伪装状态

$ firewall-cmd --zone=zone --query-masquerade

  

启用区域的ICMP阻塞功能

$ firewall-cmd --zone=zone --add-icmp-block=<icmptype>

禁用区域的ICMP阻塞功能

$ firewall-cmd --zone=zone --remove-icmp-block=<icmptype>

查询区域的ICMP阻塞状态

$ firewall-cmd --zone=zone --query-icmp-block=<icmptype>

例如:阻塞区域的响应应答报文

$ firewall-cmd --zone=public --add-icmp-block=echo-reply

在区域中启用端口转发或者映射

$ firewall-cmd --zone=zone --add-forward-port=port=<port>-[<port>]:proto=<protocol> {:toport=<port>-[<port>] | :toaddr=<address> | :toport=<port>-[<port>]:toaddr=<address>}

端口映射到另外一个端口,端口映射到另外一个地址上的相同端口,端口映射到另外一台主机上的不同端口,仅限于ipv4使用;

将本机的80端口转发到8080端口
$ firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080
将本机的80端口转发到后端192.168.1.249主机的80端口上
$ firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.1.249
success

在区域中禁用端口转发或者映射

$ firewall-cmd --zone=zone --remove-forward-port=port=<port>-[<port>]:proto=<protocol> {:toport=<port>-[<port>] | :toaddr=<address> | :toport=<port>-[<port>]:toaddr=<address>}
移除本机80到8080端口的转发
$ firewall-cmd --zone=public --remove-forward-port=port=80:proto=tcp:toport=8080
移除本机80端口到后端主机192.168.1.249的80端口的映射
$ firewall-cmd --zone=public --remove-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.1.249

  

在区域中查询端口转发或者映射

$ firewall-cmd --zone=zone --query-forward-port=port=<port>-[<port>]:proto=<protocol> {:toport=<port>-[<port>] | :toaddr=<address> | :toport=<port>-[<port>]:toaddr=<address>}

处理永久区域

永久选项不直接影响运行时的状态,这些选项尽在重载或者重启服务时可用。为了使用运行时和永久设置,需要分别设置两者,选项--permanent是永久设置的第一个参数,例如:

获取永久设置支持的服务

$ firewall-cmd --permanent --get-services 

获取永久设置支持的ICMP类型列表

$ firewall-cmd --permanent --get-icmptypes 

获取永久设置支持的区域

$ firewall-cmd --permanent --get-zones 

将--permanent设置为第一个参数,即可将临时性的服务设置为永久性生效的服务(需要重启/载服务或重启系统)

直接选项

直接选项给予一个更直接访问防火墙的能力,这个选项要求用户知道一些基本的iptables概念,例如tables(filter/mangle/nat/...),chain(INPUT/OUTPUT,FORWARD/...),command(-A/-D/-I/...),参数(-p/-s/-d/-j/...)和目标(ACCEPT/DROP/REJECT/...)。当防火墙不能使用例如--add-service=service 或者 --add-rich-rule=‘rule‘这样的规则的时候,直接选项只能被用于作为一个最后的手段。每一个选项的第一个参数必须是ipv4或者ipv6或者eb。使用ipv4将适用于IPv4(iptables(8)),ipv6参数适用于IPv6(ipv6tables(8)),eb参数适用于网桥(ebtables(8))。

将命令传递给防火墙。参数 <args> 可以是 iptables, ip6tables 以及 ebtables 命令行参数。

$ firewall-cmd --direct --passthrough { ipv4 | ipv6 | eb } <args>

为表 <table> 增加一个新链 <chain> 。

$ firewall-cmd --direct --add-chain { ipv4 | ipv6 | eb } <table> <chain>

从表 <table> 中删除链 <chain> 。

$ firewall-cmd --direct --remove-chain { ipv4 | ipv6 | eb } <table> <chain>

查询 <chain> 链是否存在与表 <table>. 如果是,返回0,否则返回1.

$ firewall-cmd --direct --query-chain { ipv4 | ipv6 | eb } <table> <chain>

如果启用,此命令将有返回值。此命令没有输出信息。

获取用空格分隔的表 <table> 中链的列表。

$ firewall-cmd --direct --get-chains { ipv4 | ipv6 | eb } <table>

为表 <table> 增加一条参数为 <args> 的链 <chain> ,优先级设定为 <priority>。

$ firewall-cmd --direct --add-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args>

从表 <table> 中删除带参数 <args> 的链 <chain>。

$ firewall-cmd --direct --remove-rule { ipv4 | ipv6 | eb } <table> <chain> <args>

查询 带参数 <args> 的链 <chain> 是否存在表 <table> 中. 如果是,返回0,否则返回1.

$ firewall-cmd --direct --query-rule { ipv4 | ipv6 | eb } <table> <chain> <args>

如果启用,此命令将有返回值。此命令没有输出信息。

获取表 <table> 中所有增加到链 <chain> 的规则,并用换行分隔。

$ firewall-cmd --direct --get-rules { ipv4 | ipv6 | eb } <table> <chain>

当前的firewalld特性

D-BUS接口:提供防火墙状态信息,使防火墙的启用、挺有或查询设置成为可能。

区域:

服务:可以是一系列本地端口、目的端口记忆附加信息,也可以是服务启动时自动增加的防火墙助手模块。预定义服务的使用使得对服务的启用和禁用更加简单。

ICMP类型:Internet控制报文协议(ICMP)备用阿里交换保本和互联网协议(ip)的错误报文,在firewalld中可以使用ICMP类型来限制报文交换

直接接口:用于服务或者应用程序增加特定的防火墙规则,重载或者重启时需要重新提交。

运行时配置:

永久配置:

托盘小程序firewall-applet为用户显示防火墙状态和存在的问题,也可以用来配置用户允许修改的设置。(图形界面可用)

图形化配置工具firewall-config,支持防火墙的所有特性(除了直接接口)。

命令行客户端firewall-cmd

对于ebtables的支持:要满足libvirt daemon的全部需求,在内核netfilter级上放置iptables和ebtables间访问问题,ebtables支持是需要的,这些命令是访问相同的结构,因而不能同时使用。

/usr/lib/firewalld/中的默认/备用配置

/etc/firewalld/中的系统配置设置

正在开发的特性

富语言:提供了一种不需要了解iptables语法的通过高级语言配置复杂IPv4和IPv6防火墙规则的机制

锁定:为firewalld增加了锁定本地应用或者服务配置的简单配置方式,是一种轻量级的应用程序策略。

用就直接规则:能够提供保存直接规则和直接链的功能个

从iptables和ebtables服务迁移:尽可能提供由iptables,ip6tables和ebtables服务配置转为永久直接规则的脚本。

参考文献:

https://fedoraproject.org/wiki/FirewallD/zh-cn

时间: 2024-11-05 11:48:50

centos7防火墙firewalld的相关文章

Centos7 防火墙 firewalld 笔记

Centos7使用firewalld代替了原来的iptables. 开启端口 firewall-cmd --zone=public --add-port=80/tcp --permanent 命令含义: --zone #作用域 --add-port=80/tcp  #添加端口,格式为:端口/通讯协议 --permanent   #永久生效,没有此参数重启后失效 重启防火墙 firewall-cmd --reload 相关文档 Redhat firewalld使用文档

fedora/centos7防火墙FirewallD详解

1 使用 FirewallD 构建动态防火墙 1.1 “守护进程” 1.2 静态防火墙(system-config-firewall/lokkit) 1.3 使用 iptables 和 ip6tables 的静态防火墙规则 1.4 什么是区域? 1.4.1 预定义的服务 1.4.2 端口和协议 1.4.3 ICMP 阻塞 1.4.4 伪装 1.4.5 端口转发 1.5 哪个区域可用? 1.5.1 丢弃 1.5.2 阻塞 1.5.3 公开 1.5.4 外部 1.5.5 隔离区(dmz) 1.5.6

5分钟理解Centos7防火墙firewalld

版权声明:本内容为原创内容,转载请声明出处. 原文地址:http://www.excelib.com/article/287/show firewalld简介 Centos7中默认将原来的防火墙iptables升级为了firewalld,firewalld跟iptables比起来至少有两大好处: 1.firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效: 2.firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条

CentOS7防火墙firewalld的配置

开机启动的开启与禁止 # 开机启动 systemctl enable firewalld # 不开机启动 systemctl disable firewalld 基本操作 # 查看状态 systemctl status firewalld systemctl start firewalld systemctl stop firewalld systemctl restart firewalld 服务.端口的添加与删除 # 添加服务,其实就是开启22端口 firewalld-cmd --perma

CentOS7防火墙(Firewalld),你关了吗?

阿里云官方教程: https://help.aliyun.com/knowledge_detail/41317.html 百度参考的牛人教程(推荐): http://www.111cn.net/sys/CentOS/113455.htm

Centos 7防火墙firewalld开放80端口(转)

1.运行.停止.禁用firewalld 启动:# systemctl start  firewalld 查看状态:# systemctl status firewalld 或者 firewall-cmd --state 停止:# systemctl disable firewalld 禁用:# systemctl stop firewalld 查看firewall是否运行,下面两个命令都可以 systemctl status firewalld.service firewall-cmd --st

centos7的防火墙firewalld

centos7的防火墙引入了新的防火墙firewalld,和以前的iptables完全不同,不过我觉得用起来还是新的好. 新安装的系统默认就启用了新防火墙,老的虽然还有,但是需要把新的停了,才能启动. 新系统安装完了,默认就开启了SSH协议,和ping(ICMP)协议. 据介绍,有图显示,其实只是对操作界面进行了更换,内核的操作还是用iptables去netfilter 引入了防火墙真正的概念,zone(区域),然后把网络接口归属于zone,这些都是真正防火墙的概念. firewall-conf

centos7防火墙

centos7防火墙配置CentOS7使用的是Linux Kernel 3.10.0的内核版本,新版的Kernel内核已经有了防火墙netfilter,并且firewalld的使用效能更高,稳定性更好.CentOS7配置防火墙的两种方法:一.使用xml配置文件的方式配置:方法一cp /usr/lib/firewalld/services/http.xml /etc/firewalld/services/firewall-cmd --reload二.使用命令的方式配置:方法二##Addfirewa

Centos7防火墙快速开放端口配置方法

▲这篇文章主要为大家详细介绍了Centos7防火墙开放端口的快速方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下! 例如安装Nagios后,要开放5666端口与服务器连接,命令如下 [[email protected] ~]# firewall-cmd --add-port=5666/tcp 即时打开,这里也可以是一个端口范围,如1000-2000/tcp success [[email protected] ~]# firewall-cmd --permanent --add-port=