Linux——防火墙(二)

Firewalld防火墙的配置

1、图形化管理工具 firewall-config

2、命令管理工具 iptables(操作复杂) firewall-cmd(常用)

一、Firewalld防火墙的配置方法

运行时配置

  • 实时生效,并持续至Firewalld重新启动或重新加载配置

  • 不中断现有连接 (优点)

  • 不能修改服务配置

永久配置

  • 不立即生效,除非Firewalld重新启动或重新加载配置

  • 中断现有连接 (优点)

  • 可以修改服务配置

中断现有连接 缺点

业务繁忙时不要操作永久配置,可以操作运行配置

可以在夜里12点以后操作计划性任务进行永久配置

Firewalld-config图形工具 使用较少

Firewalld-cmd命令行工具 使用较多

/etc/firewalld/中的配置文件

  • Firewalld会优先使用/etc/firewalld/中的配置,如果不存在配置文件,则使用/etc/firewalld/中的配置
    • /etc/firewalld/:用户自定义配置文件,需要时可通过从/usr/lib/firewalld/中拷贝
    • /usr/lib/firewalld/:默认配置文件,不建议修改,若恢复至默认配置,可直接删除/etc/firewalld/中的配置

二、Firewall-config图形工具配置

  • 运行时配置/永久配置

在这里插入图片描述

  • 重新加载防火墙

    • 更改永久配置并生效

在这里插入图片描述

  • 关联网卡到指定区域

在这里插入图片描述

  • 修改默认区域

在这里插入图片描述

在这里插入图片描述

  • 连接状态

在这里插入图片描述

  • “区域”选项卡

    • “服务”子选项卡

    • “端口”子选项卡

    • “协议”子选项卡

    • “源端口”子选项卡

    • “伪装”子选项卡 ——>NAT转换

    • “端口转发”子选项卡

    • “ICMP过滤器”子选项卡

  • “服务”选项卡

    • “模块”子选项卡
    • “目标地址”子选项卡

案例

环境 :

客户端:192.168.17.129

linux服务器(SSH/Apache)192.168.17.128

需求:

  • 禁止主机ping服务器

  • 只允许192.168.17.129访问SSH服务

  • 允许所有主机访问Apache服务

步骤:

  • 网络参数配置
  • 开启Firewalld防火墙
  • 配置work区域
  • 配置public区域
  • 验证

1、安装httpd并启用服务

在这里插入图片描述

2、开启防火墙,配置阻塞

在这里插入图片描述

在这里插入图片描述

3、配置public 开启httpd 添加80端口 允许所有主机访问Apache服务

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4、关闭public中的ssh,打开work区域中的ssh,添加192.168.17.129来源,仅允许其访问ssh

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、Firewall-cmd字符界面配置

1、Firewalld防火墙维护命令

  • 防火墙进程操作——systemctl 选项 firewalld

    • 选项:start stop restart status

    查询firewalld状态:

    方法一:systemctl  status  firewalld
    
    方法二:firewall-cmd--state
    
  • 防火墙管理操作——firewall-cmd命令

    • 支持全部防火墙特性
    • 对于状态和查询模式,命令只返回状态,没有其他输出
    • –permanent参数:携带该参数表示永久配置,否则表示运行时配置
    • [–zone=< zone >]选项:不携带此选项表示针对默认区域操作,否则针对所指定区域操作

2、Firewalld防火墙重载配置的命令

重新加载Firewalld的配置
  • firewall-cmd --reload
    • 加载,服务不会中断
  • firewall-cmd --complete-reload
    • 状态信息将会丢失,多用于处理防火墙出现问题时
  • systemctl restart firewalld
    • 重启,服务将会中断

3、查询预定义信息命令

获取预定义信息
  • 查看预定义的区域——firewall-cmd --get-zones

    [root@localhost ~]# firewall-cmd --get-zones
    block dmz drop external home internal public trusted work
    
  • 查看预定义的服务——firewall-cmd --get-services

    [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 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
    
  • 查看预定义的ICMP类型——firewall-cmd --get-icmptypes

    [root@localhost ~]# firewall-cmd --get-icmptypes
    address-unreachable bad-header communication-prohibited destination-unreachable echo-reply echo-request fragmentation-needed host-precedence-violation host-prohibited host-redirect host-unknown host-unreachable ip-header-bad neighbour-advertisement neighbour-solicitation network-prohibited network-redirect network-unknown network-unreachable no-route packet-too-big parameter-problem port-unreachable precedence-cutoff protocol-unreachable redirect required-option-missing router-advertisement router-solicitation source-quench source-route-failed time-exceeded timestamp-reply timestamp-request tos-host-redirect tos-host-unreachable tos-network-redirect tos-network-unreachable ttl-zero-during-reassembly ttl-zero-during-transit unknown-header-type unknown-option
    

4、Firewalld区域操作命令

  • 显示网络连接或接口的默认区域——firewall-cmd --get-default-zone
[root@localhost ~]# firewall-cmd --get-default-zone 
public
  • 设置网络连接或接口的默认区域为internal ——firewall-cmd --set-default-zone=internal
[root@localhost ~]# firewall-cmd --set-default-zone=internal
success
  • 显示已激活的所有区域——firewall-cmd --get-active-zones

    • 激活的条件:区域至少关联一个接口或一个源地址/网段
    [root@localhost ~]# firewall-cmd --get-active-zones 
    internal
      interfaces: ens33
    
  • 显示ens33接口绑定的区域——firewall-cmd --get-zone-of-interface=ens33

[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
internal
  • 为ens33接口绑定work区域——firewall-cmd --zone=work --add-interface=ens33
[root@localhost ~]# firewall-cmd --zone=work --add-interface=ens33
The interface is under control of NetworkManager, setting zone to 'work'.
success
  • 为work区域更改绑定的网络接口ens33——firewall-cmd --zone=work --change-interface=ens33
[root@localhost ~]# firewall-cmd --zone=work --change-interface=ens33
The interface is under control of NetworkManager, setting zone to 'work'.
success
  • 为work区域删除绑定的网络接口ens33——firewall-cmd --zone=work --remove-interface=ens33
[root@localhost ~]# firewall-cmd --zone=work --remove-interface=ens33
The interface is under control of NetworkManager, setting zone to default.
success
  • 查询work区域中是否包含接口ens33——firewall-cmd --zone=work --query-interface=ens33
[root@localhost ~]# firewall-cmd --zone=work --query-interface=ens33
yes
[root@localhost ~]# firewall-cmd --zone=internal --query-interface=ens33
no
  • 显示区域及其规则

    • 显示所有区域及其规则——firewall-cmd --list-all-zones
    [root@localhost ~]# firewall-cmd --list-all-zones
    block
      target: %%REJECT%%
      icmp-block-inversion: no
      ……省略
      
    dmz
      target: default
      icmp-block-inversion: no
     ……省略
            
    drop
      target: DROP
      icmp-block-inversion: no
    ……省略
            
    external
      target: default
      icmp-block-inversion: no
    …………………………省略………………
    
    • 显示internal区域的所有规则——firewall-cmd --zone=internal --list-all
    [root@localhost ~]# firewall-cmd --zone=internal --list-all
    internal
      target: default
      icmp-block-inversion: no
      interfaces: 
      sources: 
      services: ssh mdns samba-client dhcpv6-client
    …………省略
    
    • 显示默认区域的所有规则——firewall-cmd --list-all
    [root@localhost ~]# firewall-cmd --list-all
    You're performing an operation over default zone ('internal'),
    but your connections/interfaces are in zone 'work' (see --get-active-zones)
    You most likely need to use --zone=work option.
    
    internal
      target: default
      icmp-block-inversion: no
      interfaces: 
      sources: 
      services: ssh mdns samba-client dhcpv6-client
    …………省略
    
小结
选项 说明
–get-default-zone 显示网络连接或接口的默认区域
–set-default-zone=< zone > 设置网络连接或接口的默认区域
–get-active-zones 显示已激活的所有区域
–get-zone-of-interface=< interface > 显示指定接口绑定的区域
–zone=< zone > --add-interface=< interface > 为指定接口绑定区域
–zone=< zone > --change-interface=< interface > 为指定的区域更改绑定的网络接口
–zone=< zone > --remove-interface=< interface > 为指定的区域删除绑定的网络接口
–query-interface=< interface > 查询区域中是否包含某接口
–list-all-zones 显示所有区域及其规则
[–zone=< zone >]–list-all 显示所有指定区域的所有规则

5、Firewalld服务操作命令

  • 显示internal区域内允许访问的所有服务——firewall-cmd --zone=internal --list-services
[root@localhost ~]# firewall-cmd --zone=internal --list-services 
ssh mdns samba-client dhcpv6-client
  • 为public区域设置允许访问SMTP服务——firewall-cmd --zone=public --add-service=smtp
[root@localhost ~]# firewall-cmd --zone=public --add-service=smtp
success
  • 删除internal区域中的SSH服务——firewall-cmd --zone=internal --remove-service=ssh
[root@localhost ~]# firewall-cmd --zone=internal --remove-service=ssh
success
  • 查询internal区域中是否启用了SSH服务——firewall-cmd --zone=internal --query-service=ssh
[root@localhost ~]# firewall-cmd --zone=internal --query-service=ssh
no
小结:
选项 说明
[–zone=< zone >] --list-services 显示指定区域内允许访问的所有服务
[–zone=< zone >] --add-service=< service > 为指定区域设置允许访问的某项服务
[–zone=< zone >] --remove-service=< service > 删除指定区域已设置的允许访问的某项服务
[–zone=< zone >] --query-service=< service > 查询指定区域中是否启用了某项服务

6、Firewalld端口操作命令

  • 显示internal区域内允许访问的所有端口号——firewall-cmd --zone=internal --list-ports

    [root@localhost ~]# firewall-cmd --zone=internal --list-ports 
    80/tcp
    
  • 启用internal区域22端口的TCP协议组合——firewall-cmd --zone=internal --add-port=22/tcp

    • –timeout=5m:表示5分钟后删除该端口,多用于测试目的
    [root@localhost ~]# firewall-cmd --zone=internal --add-port=22/tcp --timeout=5m
    success
    
  • 禁用internal区域22端口的TCP协议组合——firewall-cmd --zone=internal --remove-port=22/tcp

    [root@localhost ~]# firewall-cmd --zone=internal --remove-port=22/tcp
    success
    
  • 查询internal区域中是否启用了22端口和TCP协议组合——firewall-cmd --zone=internal --query-port=22/tcp

    [root@localhost ~]# firewall-cmd --zone=internal --query-port=22/tcp
    no
    [root@localhost ~]# firewall-cmd --zone=internal --query-port=80/tcp
    yes
    
小结:
选项 说明
[–zone=< zone>]–list-ports 显示指定区域内允许访问的所有端口号
[–zone=< zone >] --add-port=< port >[- < port >] / < protocol >[–timeout=< seconds >] 启用区域端口和协议组合,可选配置超时时间
[–zone=< zone >] --remove-port=< port >[- < port >]/< protocol > 禁用区域端口和协议组合
[–zone=< zone >] --query-port=< port >[- < port >]/< protocol > 查询区域中是否启用了端口和协议组合

7、Firewalld阻塞ICMP操作命令

阻塞=阻止通过

  • 显示work区域内阻塞的所有ICMP类型——firewall-cmd --zone=work --list-icmp-blocks

    [root@localhost ~]# firewall-cmd --zone=work --list-icmp-blocks 
    echo-reply
    
  • 为work区域设置阻塞echo-reply类型的ICMP——firewall-cmd --zone=work --add-icmp-block=echo-reply

    [root@localhost ~]# firewall-cmd --zone=work --add-icmp-block=echo-reply
    success
    
  • 删除work区域已阻塞的echo-reply类型的ICMP——firewall-cmd --zone=work --remove-icmp-block=echo-reply

    [root@localhost ~]# firewall-cmd --zone=work --remove-icmp-block=echo-reply 
    success
    
  • 查询work区域的echo-request类型的ICMP是否阻塞——firewall-cmd --zone=work --query-icmp-block=echo-request

    [root@localhost ~]# firewall-cmd --zone=work --query-icmp-block=echo-request 
    no
    
小结:
选项 说明
[–zone=< zone >] --list-icmp-blocks 显示指定区域内阻塞的所有ICMP类型
[–zone=< zone >] --add-icmp-block=< icmptype > 为指定区域设置阻塞的某项ICMP类型
[–zone=< zone >] --remove-icmp-block=< icmptype > 删除指定区域已阻塞的某项ICMP类型
[–zone=< zone >] --query-icmp-block=< icmptype > 查询指定区域的ICMP阻塞功能
案例:

环境:

客户端:192.168.17.129

linux服务器(SSH/Apache)192.168.17.128

需求:

  • 禁止主机ping服务器
  • 只允许192.168.17.129主机访问Apache服务
  • 只允许192.168.17.135主机访问TCP/22端口

步骤:

  • 绑定区域
################绑定区域###############
[root@localhost ~]# firewall-cmd --get-active-zones 
public                           //默认情况下,只有public属于激活状态
  interfaces: ens33
[root@localhost ~]# firewall-cmd --zone=work --add-source=192.168.17.129
success                              //将192.168.17.129关联work区域 
[root@localhost ~]# firewall-cmd --zone=internal --add-source=192.168.17.135
success                             //将192.168.17.135关联internal区域
[root@localhost ~]# firewall-cmd --get-active-zones 
work
  sources: 192.168.17.129
internal
  sources: 192.168.17.135
public
  interfaces: ens33
  
#############internal区域配置,删除原有服务及端口,添加22/tcp#######
[root@localhost ~]# firewall-cmd --zone=internal --remove-port=80/tcp
success
[root@localhost ~]# firewall-cmd --zone=internal --list-ports 
[root@localhost ~]# firewall-cmd --zone=internal --list-services 
mdns samba-client dhcpv6-client
[root@localhost ~]# firewall-cmd --zone=internal --remove-service=mdns 
success
[root@localhost ~]# firewall-cmd --zone=internal --remove-service=samba-client 
success
[root@localhost ~]# firewall-cmd --zone=internal --remove-service=dhcpv6-client 
success
[root@localhost ~]# firewall-cmd --zone=internal --list-services 
[root@localhost ~]# firewall-cmd --zone=internal --add-port=22/tcp
success
[root@localhost ~]# firewall-cmd --zone=internal --query-port=22/tcp
yes

##################work区域配置添加http服务#######
[root@localhost ~]# firewall-cmd --zone=work --list-services 
dhcpv6-client
[root@localhost ~]# firewall-cmd --zone=work --add-service=http
success
[root@localhost ~]# firewall-cmd --zone=work --list-services 
dhcpv6-client http
[root@localhost ~]# 

#################配置ICMP阻塞#######
[root@localhost ~]# firewall-cmd --zone=work --list-icmp-blocks 
[root@localhost ~]# firewall-cmd --zone=work --add-icmp-block=echo-request 
success

###############客户端尝试ping服务器#######
[root@129 ~]# ping 192.168.17.128
PING 192.168.17.128 (192.168.17.128) 56(84) bytes of data.
From 192.168.17.128 icmp_seq=1 Dest##ination Host Prohibited 8
From 192.168.17.128 icmp_seq=2 Destination Host Prohibited
From 192.168.17.128 icmp_seq=3 Destination Host Prohibited
^C
--- 192.168.17.128 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2000ms

############客户端192.168.17.129尝试SSH连接服务器#####
[root@localhost ~]# ssh [email protected]
ssh: connect to host 192.168.17.128 port 22: No route to host

总结

  • Firewalld防火墙拥有运行时和永久配置两种状态。拥有区域的概念,支持直接添加服务或者端口
  • Firewalld防火墙既可以通过字符管理工具firewall-cmd管理,又可以通过图形管理工具firewall-config进行管理
  • Firewalld防火墙区域绑定命令
  • Firewalld防火墙服务配置命令
  • Firewalld防火墙端口配置命令
发布了72 篇原创文章 · 获赞 44 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ML908/article/details/103463384