codecamp

8.3.1 终端管理工具

第2章在讲解Linux命令时曾经听到,命令行终端是一种极富效率的工作方式,firewall-cmd是firewalld防火墙配置管理工具的CLI(命令行界面)版本。它的参数一般都是以“长格式”来提供的,大家不要一听到长格式就头大,因为RHEL 7系统支持部分命令的参数补齐,其中就包含这条命令(很酷吧)。也就是说,现在除了能用Tab键自动补齐命令或文件名等内容之外,还可以用Tab键来补齐表8-3中所示的长格式参数了(这太棒了)。

表8-3 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 关闭应急状况模式

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

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

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

    [root@linuxprobe ~]# firewall-cmd --get-default-zone
    public

查询eno16777728网卡在firewalld服务中的区域:

    [root@linuxprobe ~]# firewall-cmd --get-zone-of-interface=eno16777728
    public

把firewalld服务中eno16777728网卡的默认区域修改为external,并在系统重启后生效。分别查看当前与永久模式下的区域名称:

    [root@linuxprobe ~]# firewall-cmd --permanent --zone=external --change-interface=eno16777728
    success
    [root@linuxprobe ~]# firewall-cmd --get-zone-of-interface=eno16777728
    public
    [root@linuxprobe ~]# firewall-cmd --permanent --get-zone-of-interface=eno16777728
    external

把firewalld服务的当前默认区域设置为public:

    [root@linuxprobe ~]# firewall-cmd --set-default-zone=public
    success
    [root@linuxprobe ~]# firewall-cmd --get-default-zone 
    public

启动/关闭firewalld防火墙服务的应急状况模式,阻断一切网络连接(当远程控制服务器时请慎用):

    [root@linuxprobe ~]# firewall-cmd --panic-on
    success
    [root@linuxprobe ~]# firewall-cmd --panic-off
    success

查询public区域是否允许请求SSH和HTTPS协议的流量:

    [root@linuxprobe ~]# firewall-cmd --zone=public --query-service=ssh
    yes
    [root@linuxprobe ~]# firewall-cmd --zone=public --query-service=https
    no

把firewalld服务中请求HTTPS协议的流量设置为永久允许,并立即生效:

    [root@linuxprobe ~]# firewall-cmd --zone=public --add-service=https
    success
    [root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-service=https
    success
    [root@linuxprobe ~]# firewall-cmd --reload
    success

把firewalld服务中请求HTTP协议的流量设置为永久拒绝,并立即生效:

    [root@linuxprobe ~]# firewall-cmd --permanent --zone=public --remove-service=http 
    success
    [root@linuxprobe ~]# firewall-cmd --reload 
    success

把在firewalld服务中访问8080和8081端口的流量策略设置为允许,但仅限当前生效:

    [root@linuxprobe ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
    success
    [root@linuxprobe ~]# firewall-cmd --zone=public --list-ports 
    8080-8081/tcp

把原本访问本机888端口的流量转发到22端口,要且求当前和长期均有效:

    流量转发命令格式为firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>


    [root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.10.10
    success
    [root@linuxprobe ~]# firewall-cmd --reload
    success

在客户端使用ssh命令尝试访问192.168.10.10主机的888端口:

    [root@client A ~]# ssh -p 888 192.168.10.10
    The authenticity of host '[192.168.10.10]:888 ([192.168.10.10]:888)' can't be established.
    ECDSA key fingerprint is b8:25:88:89:5c:05:b6:dd:ef:76:63:ff:1a:54:02:1a.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '[192.168.10.10]:888' (ECDSA) to the list of known hosts.
    root@192.168.10.10's password:此处输入远程root管理员的密码
    Last login: Sun Jul 19 21:43:48 2017 from 192.168.10.10

firewalld中的富规则表示更细致、更详细的防火墙策略配置,它可以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置。它的优先级在所有的防火墙策略中也是最高的。比如,我们可以在firewalld服务中配置一条富规则,使其拒绝192.168.10.0/24网段的所有用户访问本机的ssh服务(22端口):

    [root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"
    success
    [root@linuxprobe ~]# firewall-cmd --reload
    success

在客户端使用ssh命令尝试访问192.168.10.10主机的ssh服务(22端口):

    [root@client A ~]# ssh 192.168.10.10
    Connecting to 192.168.10.10:22...
    Could not connect to '192.168.10.10' (port 22): Connection failed.
8.3 Firewalld
8.3.2 图形管理工具
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }