CentOS 7 防火墙配置

1、防火墙的简述

防火墙对服务器起到一定的保护作用,所以了解一些相关的操作是很有必要的。

在CentOS 7.x中,有了一种新的防火墙策略叫FireWall , 在6.x中用的是iptables。

Centos 7 中防火墙是一个非常的强大的功能了, Firewalld 提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态 防火墙管理工具。它支持 IPv4, IPv6 防火墙设置以及以太网桥接,并且拥有运行时配 置和永久配置选项。它也支持允许服务或者应用程序直接添加防火墙规则的接口。

防火墙守护 firewalld 服务引入了一个信任级别的概念来管理与之相关联的连接与接口。它支持 ipv4 与 ipv6,并支持网桥,采用 firewall-cmd (command) 或 firewall-config (gui) 来动态的管理 kernel netfilter 的临时或永久的接口规则,并实时生效而无需重启服务。

Firewall 能将不同的网络连接归类到不同的信任级别,Zone 提供了以下几个级别

drop: 丢弃所有进入的包,而不给出任何响应
block: 拒绝所有外部发起的连接,允许内部发起的连接
public: 允许指定的进入连接
external: 同上,对伪装的进入连接,一般用于路由转发
dmz: 允许受限制的进入连接
work: 允许受信任的计算机被限制的进入连接,类似 workgroup
home: 同上,类似 homegroup
internal: 同上,范围针对所有互联网用户
trusted: 信任所有连接

2、 图形化和命令行

你可以通过图形界面工具 firewall-config 或者命令行客户端 firewall-cmd
启用或者关 闭防火墙特性。

  • 在CentOS 7.x中,防火墙的基本命令是 firewall-cmd
  • 命令行方式

使用命令行工具 firewall-cmd 支持全部防火墙特性。 使用它,只需要如下yum安装firewalld(实际我们不需要安装,默认已经装好了)

[root@localhost ~]# yum
install firewalld -y
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[root@localhost ~]# rpm -ql  firewalld | grep '/usr/bin/firewall-cmd'
/usr/bin/firewall-cmd
[root@localhost ~]# firewall-cmd --state
running

  • 图形化界面方式

如果需要图形界面的话,要安装firewalld还需要再安装firewall-config的rpm包,

[root@localhost ~]# yum
install firewalld firewall-config -y

3、 查看帮助文档

先通过man
firewall-cmd 来简单看看它的帮助文档。

[root@localhost ~]# man
firewall-cmd
[root@localhost ~]# firewall-cmd --help          # 或 firewall-cmd -h
[root@localhost ~]# firewall-cmd --version    查看防火墙版本

4、 状态|启动|停止|重启

4.1 查看防火墙状态

  • 查看方式1:

[root@localhost ~]#
firewall-cmd --state

# remark:如果终端输出running就表示防火墙已经开启了,反之就没有。

  • 查看方式2:

[root@localhost ~]# systemctl
status firewalld

# remark:如果终端输出有Active: active (running)就表示防火墙已经开启了,反之就没有。

4.2 添加开机启动

[root@localhost ~]# systemctl
enable firewalld # 开机启动
[root@localhost ~]# systemctl disable firewalld
# 取消开机启动

[root@localhost ~]# systemctl
is-enabled firewalld      #查看服务是否开机启动
[root@localhost ~]# systemctl list-unit-files|grep
enabled  #查看已启动的服务列表
[root@localhost ~]# systemctl --failed                 
#查看启动失败的服务列表

4.3 启动防火墙

[root@localhost ~]# systemctl
start firewalld

4.4 停止防火墙

[root@localhost ~]# systemctl
stop firewalld

4.5 重启防火墙

  • 方式1,建议用此方法,会重新加载配置

[root@localhost ~]#
firewall-cmd --reload     # 更新规则,不重启服务,用此条命令即可
[root@localhost ~]#  firewall-cmd --complete-reload # 更新规则,重启服务,一般不用此条命令

  • 方式2

[root@localhost ~]# systemctl
restart firewalld

5、查已有配置和端口

5.1 命令查看配置

[root@localhost ~]#
firewall-cmd --list-all
#如果要查看指定级别则用firewall-cmd --zone=public --list-all
public
  target:
default
 
icmp-block-inversion: no
 
interfaces:
 
sources:
 
services: ssh dhcpv6-client
  ports:
80/tcp
 
protocols:
 
masquerade: no
 
forward-ports:
 
source-ports:
 
icmp-blocks:
  rich
rules:
    rule
family="ipv4" source address="122.144.131.91" port
port="111" protocol="tcp" accept
    rule
family="ipv4" source address="180.168.69.242" port
port="2200" protocol="tcp" accept
    rule
family="ipv4" source address="27.115.59.166" port
port="2200" protocol="tcp" accept
    rule
family="ipv4" source address="122.144.131.90" port
port="2200" protocol="tcp" accept
    rule
family="ipv4" source address="122.144.208.19" port
port="10050" protocol="tcp" accept

5.2 配置文件查看

[root@localhost ~]# cat
/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"/>
 
<port protocol="tcp" port="80"/>
 
<rule family="ipv4">
   
<source address="122.144.131.91"/>
   
<port protocol="tcp" port="111"/>
   
<accept/>
 
</rule>
 
<rule family="ipv4">
   
<source address="180.168.69.242"/>
   
<port protocol="tcp" port="2200"/>
   
<accept/>
 
</rule>
 
<rule family="ipv4">
   
<source address="27.115.59.166"/>
   
<port protocol="tcp" port="2200"/>
   
<accept/>
 
</rule>
 
<rule family="ipv4">
   
<source address="122.144.131.90"/>
   
<port protocol="tcp" port="2200"/>
   
<accept/>
 
</rule>
 
<rule family="ipv4">
   
<source address="122.144.208.19"/>
   
<port protocol="tcp" port="10050"/>
   
<accept/>
 
</rule>
</zone>

5.3 查看已开放的端口

  • 方式1:查看所有已经开放端口,注意这里不会把开放的特定IP+特定端口的列出来,要想全部列出来则用上面的firewall-cmd --list-all,

[root@localhost ~]#
firewall-cmd --list-ports
80/tcp

  • 方式2:查看特定已经开放的端口

执行下面的命令后,如果指定的端口已经开放就会输出yes,反之就输出no

[root@localhost ~]#
firewall-cmd --zone=public --query-port=81/tcp

6、添加和删除端口

这一步的操作就好比在Windows上的防火墙中新建一个入站规则。

6.1 添加单独端口add

只添加一个单独的端口(示例为81) ,注:如果是udp则把tcp改为udp即可,注意:这里有--permanent

[root@localhost ~]#
firewall-cmd --zone=public --add-port=81/tcp --permanent
[root@localhost ~]# firewall-cmd --reload #此步不能少,必须重新加载配置才能生效
[root@localhost ~]# firewall-cmd --list-all   #查看是否已生效
[root@localhost ~]# firewall-cmd --list-ports #查看是否已生效

6.2 添加连续端口add

添加一组连续的端口(示例为82到85) ,注:如果是udp则把tcp改为udp即可,注意:这里有--permanent

[root@localhost ~]#
firewall-cmd --zone=public --add-port=82-85/tcp --permanent
[root@localhost ~]# firewall-cmd --reload #此步不能少,必须重新加载配置才能生效
[root@localhost ~]# firewall-cmd --list-all   #查看是否已生效
[root@localhost ~]# firewall-cmd --list-ports #查看是否已生效

6.3 删除端口remove

只是把添加端口命令中add改为remove即可删除,其它的都不用动,注:如果是udp则把tcp改为udp即可,

注意:这里有--permanent

[root@localhost ~]# firewall-cmd
--list-all   #先查看一下开放的规则和端口
[root@localhost ~]# firewall-cmd --zone=public
--remove-port=81/tcp --permanent
[root@localhost ~]# firewall-cmd --zone=public
--remove-port=82-85/tcp --permanent
[root@localhost ~]# firewall-cmd --reload #此步不能少,必须重新加载配置才能生效
[root@localhost ~]# firewall-cmd --list-all   #查看是否已生效
[root@localhost ~]# firewall-cmd --list-ports #查看是否已生效

7、添加特定IP+特定端口

7.1 添加特定IP+单个端口add

注:如果是udp则把tcp改为udp即可,注意:这里有--permanent

[root@localhost ~]#
firewall-cmd --permanent --add-rich-rule="rule family="ipv4"
source address="122.144.131.91/24" port protocol="tcp"
port="111" accept"

7.2 添加特定IP+多个端口add

注意:这里有--permanent

[root@localhost ~]#
firewall-cmd --permanent --add-rich-rule="rule family="ipv4"
source address="122.144.131.91/24" port protocol="tcp" port="4001-4004"
accept"
[root@localhost ~]# firewall-cmd --permanent
--add-rich-rule="rule family="ipv4" source
address="192.168.142.166" port protocol="tcp"
port="10-51000" accept"

7.3 删除IP+端口规则remove

只需要把其中的add改为remove即可,其它的都不用动,注:如果是udp则把tcp改为udp即可,注意:这里有--permanent

[root@localhost ~]#
firewall-cmd --list-all   #先查看一下开放的规则和端口
[root@localhost ~]# firewall-cmd --permanent
--remove-rich-rule="rule family="ipv4" source
address="122.144.131.91/24" port protocol="tcp"
port="111" accept"
[root@localhost ~]# firewall-cmd --permanent
--remove-rich-rule="rule family="ipv4" source
address="122.144.131.91/24" port protocol="tcp"
port="4001-4004" accept"
[root@localhost ~]# firewall-cmd --reload #此步不能少,必须重新加载配置才能生效
[root@localhost ~]# firewall-cmd --list-all   #查看是否已生效
[root@localhost ~]# firewall-cmd --list-ports #查看是否已生效

8、查看Zone区域信息

8.1 查看已被激活的Zone

[root@localhost ~]#
firewall-cmd --get-default-zone  #查看默认区域
public
[root@localhost ~]# firewall-cmd
--get-active-zones  #查看已被激活的Zone
public
 
interfaces: em1

8.2 查看指定接口的Zone

[root@localhost ~]#
firewall-cmd --get-zone-of-interface=em1
public

8.3 查看指定级别的接口

[root@localhost ~]#
firewall-cmd --zone=public --list-interfaces
em1

8.4
查看指定级别的所有信息

[root@localhost ~]#
firewall-cmd --zone=public --list-all #查看所有级别firewall-cmd --list-all

8.5 查看所有级别被允许的信息

[root@localhost ~]#
firewall-cmd --get-service
[root@localhost ~]# firewall-cmd --get-service
--permanent  #查重启后所有Zones级别中被允许的服务

8.6
更改所属区域

显示所有公共区域(public)

[root@localhost ~]#
firewall-cmd --zone=public --list-all

临时修改网络接口(enp0s3)为内部区域(internal),注意:这里有--permanent

[root@localhost ~]#
firewall-cmd --zone=internal --change-interface=enp03s
[root@localhost ~]# firewall-cmd --reload #此步不能少,必须重新加载配置才能生效
[root@localhost ~]# firewall-cmd --list-all   #查看是否已生效
[root@localhost ~]# firewall-cmd --list-ports #查看是否已生效

永久修改网络接口enp03s为内部区域(internal),注意:这里有--permanent

[root@localhost ~]#
firewall-cmd --permanent --zone=internal --change-interface=enp03s
[root@localhost ~]# firewall-cmd --reload #此步不能少,必须重新加载配置才能生效
[root@localhost ~]# firewall-cmd --list-all   #查看是否已生效
[root@localhost ~]# firewall-cmd --list-ports #查看是否已生效

9、端口转发

9.1
配置 ip 地址伪装

注意:这里有--permanent

#查看伪装
[root@localhost ~]# firewall-cmd
--zone=external --query-masquerade

#打开伪装
[root@localhost ~]# firewall-cmd --permanent
--zone=external --add-masquerade
[root@localhost ~]# firewall-cmd --reload #此步不能少,必须重新加载配置才能生效
[root@localhost ~]# firewall-cmd --list-all   #查看是否已生效
[root@localhost ~]# firewall-cmd --list-ports #查看是否已生效

#关闭伪装
[root@localhost ~]# firewall-cmd --permanent
--zone=external --remove-masquerade
[root@localhost ~]# firewall-cmd --reload #此步不能少,必须重新加载配置才能生效
[root@localhost ~]# firewall-cmd --list-all   #查看是否已生效
[root@localhost ~]# firewall-cmd --list-ports #查看是否已生效

9.2
端口转发

第一步:要进行端口转发,则首先需要开启伪装,注意:如果不开启伪装IP,端口转发会失败,如果要删除则把add改为remove即可,注意:这里有--permanent

[root@localhost ~]#
firewall-cmd --permanent --zone=external --add-masquerade
[root@localhost ~]# firewall-cmd --reload #此步不能少,必须重新加载配置才能生效
[root@localhost ~]# firewall-cmd --list-all   #查看是否已生效
[root@localhost ~]# firewall-cmd --list-ports #查看是否已生效

然后,转发 tcp 22 端口至 3753,如果要删除则把add改为remove即可,注意:这里有--permanent

[root@localhost ~]#
firewall-cmd --permanent --zone=external
--add-forward-port=port=22:proto=tcp:toport=3753
[root@localhost ~]# firewall-cmd --reload #此步不能少,必须重新加载配置才能生效
[root@localhost ~]# firewall-cmd --list-all   #查看是否已生效
[root@localhost ~]# firewall-cmd --list-ports #查看是否已生效

转发 22 端口数据至另一个 ip 的相同端口上,如果要删除则把add改为remove即可,注意:这里有--permanent

[root@localhost ~]#
firewall-cmd --permanent --zone=external --add-forward-port=port=22:proto=tcp:toaddr=192.168.1.100
[root@localhost ~]# firewall-cmd --reload #此步不能少,必须重新加载配置才能生效
[root@localhost ~]# firewall-cmd --list-all   #查看是否已生效
[root@localhost ~]# firewall-cmd --list-ports #查看是否已生效

转发 22 端口数据至另一 ip 的 2055 端口上,如果要删除则把add改为remove即可,注意:这里有--permanent

[root@localhost ~]#
firewall-cmd --permanent --zone=external
--add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.100
[root@localhost ~]# firewall-cmd --reload #此步不能少,必须重新加载配置才能生效
[root@localhost ~]# firewall-cmd --list-all   #查看是否已生效
[root@localhost ~]# firewall-cmd --list-ports #查看是否已生效

10、服务管理

一些服务,对应多个端口,在防火墙允许某项服务则可能意味着允许该服务对应的多个端口,

10.1 查看所有服务

[root@localhost ~]#
firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client
bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc
ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns
docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps
freeipa-replication freeipa-trust ftp ganglia-client ganglia-master
high-availability http https imap imaps ipp ipp-client ipsec iscsi-target
kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls
managesieve mdns mosh mountd ms-wbt mssql mysql nfs nfs3 nrpe ntp openvpn
ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi
pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster
quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp
smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog
syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm
vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server

10.2
查看当前允许的服务

! 特别注意:比如下面的ssh服务已经被允许开放,那么sshd对应的端口比如有两个端口22号端口和2200端口则就会被外部允许访问,即使防火墙这两个端口没有开放,也是可以访问的!!

[root@localhost ~]#
firewall-cmd --list-services --zone=public  #查看所有被允许开放的服务
ssh dhcpv6-client
[root@localhost ~]# firewall-cmd
--query-service=http --zone=public    #查看特定的服务是否开放

10.3 给区域添加服务add

注意:这里有--permanent

[root@localhost ~]#
firewall-cmd --add-service=ftp --zone=public 
--permanent
[root@localhost ~]# firewall-cmd --reload #此步不能少,必须重新加载配置才能生效
[root@localhost ~]# firewall-cmd --list-all   #查看是否已生效
[root@localhost ~]# firewall-cmd --list-ports #查看是否已生效

10.4 删除区域服务remove

将add改为remove即可,注意:这里有--permanent

[root@localhost ~]#
firewall-cmd --remove-service=ftp --zone=public 
--permanent
[root@localhost ~]# firewall-cmd --reload #此步不能少,必须重新加载配置才能生效
[root@localhost ~]# firewall-cmd --list-all   #查看是否已生效
[root@localhost ~]# firewall-cmd --list-ports #查看是否已生效

11、应急模式

11.1
应急模式阻断所有网络

启动应急模式阻断所有网络连接,以防出现紧急状况,注意:此情况会断开所有的网络连接,远程连接勿使用

[root@localhost ~]#
firewalld-cmd --panic-on

11.2 禁用应急模式

[root@localhost ~]#
firewalld-cmd --panic-off

11.3 查询应急模式

[root@localhost ~]#
firewalld-cmd --query-panic

CentOS7 防火墙配置-详解的更多相关文章

  1. fedora/centos7防火墙FirewallD详解

    1 使用 FirewallD 构建动态防火墙 1.1 “守护进程” 1.2 静态防火墙(system-config-firewall/lokkit) 1.3 使用 iptables 和 ip6tabl ...

  2. OpenVPN CentOS7 安装部署配置详解

    一 .概念相关 1.vpn 介绍 vpn 虚拟专用网络,是依靠isp和其他的nsp,在公共网络中建立专用的数据通信网络的技术.在vpn中任意两点之间的链接并没有传统的专网所需的端到端的物理链路,而是利 ...

  3. Centos7上部署openstack ocata配置详解

    之前写过一篇<openstack mitaka 配置详解>然而最近使用发现阿里不再提供m版本的源,所以最近又开始学习ocata版本,并进行总结,写下如下文档 OpenStack ocata ...

  4. (转)Centos7上部署openstack ocata配置详解

    原文:http://www.cnblogs.com/yaohong/p/7601470.html 随笔-124  文章-2  评论-82  Centos7上部署openstack ocata配置详解 ...

  5. linux下IPTABLES配置详解 (防火墙命令)

    linux下IPTABLES配置详解 -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 24000 -j ACCEPT ...

  6. Nginx + Tomcat 负载均衡配置详解

    Nginx常用操作指南一.Nginx 与 Tomcat 安装.配置及优化1. 检查和安装依赖项 yum -y install gcc pcre pcre-devel zlib zlib-devel o ...

  7. 日志分析工具ELK配置详解

    日志分析工具ELK配置详解 一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分 ...

  8. tomcat的配置详解:[1]tomcat绑定域名

    转自:http://jingyan.baidu.com/article/7e440953dc096e2fc0e2ef1a.html tomcat的配置详解:[1]tomcat绑定域名分步阅读 在jav ...

  9. CentOS6.5下VNC Server远程桌面配置详解

    参考文献: (总结)CentOS Linux下VNC Server远程桌面配置详解 远程桌面连接工具VNC——license Key 我的下载地址为 太平洋下载 VNC连接黑屏的问题 centos 6 ...

随机推荐

  1. 高可用Mysql架构_Haproxy+keepalived+mycat集群的配置

    接上一篇文章http://www.cnblogs.com/wt645631686/p/8310891.html,虽然已经在原有两台mycat基础上增加了Haproxy作为mycat的中间服务器,不足的 ...

  2. ESXi上的固态硬盘识别为非SSD

    启动ESXi的SSH服务 通过SSH远程连接ESXi主机 输入如下命令 # esxcli storage nmp device list        #列出储存清单(SSD设备的“device na ...

  3. luogu P1605 迷宫

    https://www.luogu.org/problem/show?pid=1605 就很实在的深搜  我就是模拟的地图搜索  没想到竟然1A了   给了我很大的信心 #include<bit ...

  4. SQL Server2012创建约束图解

            SQLServer中有五种约束:Primary Key约束.Foreign Key约束.Unique约束.Default约束和Check约束  1 . Primary Key 约束 在 ...

  5. 类的成员变量修饰 const 和static

    类型 初始化方式 类内(声明) 类外(类实现文件) 构造函数中 构造函数的初始化列表 非静态非常量数据成员 N N Y Y 非静态常量数据成员 N N N Y (must) 静态非常量数据成员 N Y ...

  6. npm 安装私有 git 包

    npm 安装私有 git 包 npm 对于前端开发来说是一种必备的工具,对于开源项目来说,完全没有任何问题,安装包的依赖直接依赖于 Npm 即可. 对于公司内网的一些项目就不是太方便了,因为我们通常会 ...

  7. 递推-练习1--noi1760 菲波那契数列(2)

    递推-练习1--noi1760 菲波那契数列(2) 一.心得 二.题目 1760:菲波那契数列(2) 总时间限制:  1000ms 内存限制:  65536kB 描述 菲波那契数列是指这样的数列: 数 ...

  8. 为什么需要消息队列MQ?

    主要原因:是在高并发情况下,由于来不及同步处理,请求往往会发生堵塞,比如诸多的insert.update之类的请求同时到达mysql,直接导致无数的行锁表锁,甚至最后请求会堆积很多,从而触发大量的to ...

  9. Rails 5 Test Prescriptions(everday Rspectest作者推荐) 目录 1-3章

    总文档连接: RSpec.info/documentation/ 如何使用TDD 和 自动化测试来建立一个Rails app. TDD让你用测试来探索代码的设计.你将学习可利用的工具,并学习用什么工具 ...

  10. svn版本管理与上线

    1.1 SVN介绍 1.1.1 什么是SVN(Subversion)? Svn(subversion)是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统 ...