CentOS7 防火墙配置-详解

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

 

posted @ 2018-07-06 18:55  LWJ303  阅读(895)  评论(0编辑  收藏  举报
levels of contents