防火墙管理之firewalld

1.firewalld概念

        从centos7之后,iptables服务的启动脚本已经被忽略。使用firewalld来取代iptables服务。

        在RHEL7中,默认是firewalld来管理netfilter子系统,不过底层调用的命令任然是iptables。firewalld是iptables的前端控制器,用于实现持久的网络流量规则。它提供命令行和图形界面。相较于iptables而言,firewalld支持动态更新技术并加入了区域(zone)的概念。

        firewalld与iptables直接区别:

        1.firewalld使用区域和服务而不是链式规则;

        2.它动态管理规则集,允许更新规则而不破坏现有会话和连接。

2.firewalld使用区域管理

        区域就是firewalld预先准备了几套防火墙策略集合,用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。

        1.需要注意的是firewalld中的区域与接口

        一个网卡仅能绑定一个区域,eth0-->A区域

        当时一个区域可以绑定多个网卡:A区域-->eth0 eth1 eth2

        1.区域

        区域是针对给定位或场景可能具有的各种信任级别的预构建 规则集。不同的区域允许不同的网络服务和入站流量类型,而拒绝其他任何流量。首次启用firewalld,默认区域是public。

        区域也可以用于不同的网络接口。例如,要分离内部网络和互联网的接口,你可以在Internet区域上允许DHCP,但在external区域仅允许HTTP和SSH。  

区域选项默认规则策略
home拒绝流入流量;如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量
internal等同于home
trusted允许所有数据包流入流出
work拒绝流入的流量,除非与流出的流量相关;如果流量与ssh、ipp-client、dhcpv6-client服务相关,则允许流量
public拒绝流入的流量,除非与流出的流量相关;如果流量与ssh、dhcpv6-client服务相关,则允许流量
external拒绝流入的流量,除非与流出的流量相关;如果流量与ssh服务相关,则允许流量
dmz拒绝流入的流量,除非与流出的流量相关;如果流量与ssh服务相关,则允许流量
block拒绝流入的流量,除非与流出的流量相关
drop拒绝流入的流量,除非与流出的流量相关

        常用:trusted区域 ---白名单

                    public区域---默认

                    drop区域----黑名单

        Trust区域:可信任区域,主要用于连接局域网内部网络。比如企业网络中,通常将员工网络设置为Trust区域。

        Untrust区域:非信任区域,主要用于连接互联网。大部分情况下,非信任区域无法主动访问可信任区域。

        DMZ区域:非军事化区域,作为非信任区域与信任区域之间的缓冲区。一般用于放置企业内部服务器,如;OA服务器、邮件服务器等。

        Local区域:指防火墙自身,凡是防火墙主动发出的报文,均可以认为从Local区域发出。

        2.firewalld基本指令参数

        

zone区域相关指令
参数作用
--get-default-zone获取默认 的区域名称
--set-default-zone=<区域名称>设置默认的区域,使其永久生效
--get-active-zones显示当前正在使用的区域与网卡名称
--get-zones显示总共可用的区域
services服务相关命令
参数作用
--get-services列出服务列表中所有可管理的服务
--add-service=设置默认区域允许该添加服务的流量
--remove-service=设置默认区域不允许该删除服务的流量
Port端口相关指令
参数作用
--add-port=<端口号、协议>设置默认区域允许该填加端口的流量
--remove-port=<端口号、协议>设置默认区域不允许该删除端口的流量
interface网卡相关指令
参数作用
--add-interface=<网卡名称>将源自该网卡的所有流量都导向某个指定区域
--change-interface=<网卡名称>将某个网卡与区域进行关联
--remove-interface移除网卡
其他相关指令
--list-all显示当前区域的网卡配置参数、资源、端口以及服务等信息
--reload让“永久生效”的配置规则立即生效,并覆盖当前的规则
IP相关指令
--add-source=<IP/位数>设置默认区域允许该IP的流量
--remove-source=<IP/位数>设置默认区域移除允许该IP的流量

        3.基本应用

        启动并查看状态

# systemctl start firewalld
# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: active (running) since Thu 2023-06-08 19:23:08 CST; 9s ago
     Docs: man:firewalld(1)
 Main PID: 1758 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─1758 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid

        查看预设服务

# firewall-cmd --get-services
RH-Satellite-6 RH-Satellite-6-capsule amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server

        查看所有区域的设置

# firewall-cmd --list-all-zones

        查看指定网卡所在的区域

 # firewall-cmd --get-zone-of-interface=ens32

        把firewalld的当前默认区域设置为drop,此为永久设置

# firewall-cmd --set-defaut-zone=drop

        4.firewalld区域配置策略

        为正常使用firewalld服务和相关工具去管理防火墙,必须启动firewalld服务,关闭以前旧的防火墙相关的服务。firewalld规则分为两种状态:

        runtime运行时:修改马上生效,但如果重启服务则马上失效,测试建议;

        permanent持久配置:修改规则后需要reload重载服务才会生效,生产建议。

        禁用iptables

# systemctl stop iptables
# systemctl disabled iptables

# systemctl mask iptables

        启动已给出

        常用命令

# firewall-cmd --list-all --zone=trusted
trusted
  target: ACCEPT
  icmp-block-inversion: no
  interfaces:
  sources:
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

        trusted:区域名称;

        target:状态,默认为ACCEPT;

        icmp-block-inversion:icmp模块;

        interfaces:绑定的网卡;

        soureces:允许通过的IP地址、网段;

        services:允许通过的服务;

        ports:允许访问的端口;

        protocols:允许通过的协议;

        masquerade:IP伪装;

        forward-ports:转发的端口;

        source-ports:源端口;

        icmp-blocks:icmp块;

        rich rules:富规则

        5.firewalld配置放行策略

        1.放行服务

[root@localhost ~]# firewall-cmd --add-service=http
success  #放行多个服务
[root@localhost ~]# firewall-cmd --add-service={https,mysql,redis}
success #可自行修改的服务目录
[root@localhost ~]# cd /usr/lib/firewalld/services/
[root@localhost services]# pwd
/usr/lib/firewalld/services   #自定义配置服务
[root@localhost services]# firewall-cmd --add-service=nginx
Error: INVALID_SERVICE: nginx
[root@localhost services]# cp http.xml nginx.xml
[root@localhost services]# firewall-cmd --reload
success
[root@localhost services]# firewall-cmd --add-service=nginx
success

        2.firewalld放行端口

[root@localhost ~]# firewall-cmd --add-port=80/tcp
success  #开放端口必须加上协议
[root@localhost ~]# firewall-cmd --add-port={443/tcp,80/udp} 
success  #添加多个端口
[root@localhost ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources:
  services: dhcpv6-client nginx ssh
  ports: 80/tcp 443/tcp 80/udp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

       3. 放行IP(允许一个IP所有的操作)

[root@localhost ~]# firewall-cmd --add-source=192.168.42.147 --zone=trusted
success

        6.firewalld实例

        1.启用或者禁用Http实例

# firewall-cmd --zone=public --add-service=http --permanent
success
# firewall-cmd --zone=public --remove-service=http --permanent

        2.允许或者拒绝任意端口/协议

# firewall-cmd --zone=public --add-port=22/tcp --permanent
# firewall-cmd --zone=public --remove-port=22/tcp --permanent

        3.禁用一个ip地址所有访问

[root@localhost ~]# firewall-cmd --add-source=192.168.42.144 --zone=drop
success
[root@localhost ~]# firewall-cmd --get-active-zone
drop
  sources: 192.168.42.144
public
  interfaces: ens33

        4.禁用一个网段

[root@localhost ~]# firewall-cmd --add-source=192.168.19.0/24 --zone=drop
success
[root@localhost ~]# firewall-cmd --get-active-zone
drop
  sources: 192.168.42.144 192.168.19.0/24
public
  interfaces: ens33

        5.允许一个ip地址访问所有

[root@localhost ~]# firewall-cmd --add-source=192.168.42.143/32 --zone=trusted
success
[root@localhost ~]# firewall-cmd --get-active-zone
drop
  sources: 192.168.42.144 192.168.19.0/24
public
  interfaces: ens33
trusted
  sources: 192.168.42.143/32

        6.移除IP地址

# firewall-cmd --remove-source=192.168.42.143/32 --zone=trusted

        7.添加一个端口

firewall-cmd --add-port=80/tcp

        8.显示所有允许的端口及协议

# firewall-cmd --list-ports

        9.移除一个端口

# firewall-cmd --list-ports
80/tcp 443/tcp 80/udp
# firewall-cmd --remove-port=443/tcp

        10.移除多个端口

# firewall-cmd --remove-port={80/tcp,22/tcp}

        7.firewalld端口转发策略

        1.端口转发是传统的目标地址映射,实现外网访问内网资源;

        2.流量转发命令格式:

firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>

        例:将本地的6666端口映射到后端的19.168.42.137的22端口

firewall-cmd --permanent --zone=public --add-forward -port=port=6666:proto=tcp:toport=22:toaddr=192.168.42.137

        移除端口映射

firewall-cmd --permanent --zone=public --remove-forward -port=port=6666:proto=tcp:toport=22:toaddr=192.168.42.137

        禁用一切网络

firewall-cmd --panic-on

        关闭禁用的网络

firewall-cmd --panic-off

3.firewalld富规则集

        1.富规则语法

        查看具体语法:man firewalld.richlanguage

        --add-rich-rule='<rule>'   #在指定区域添加一条富规则

        --remove-rich-rule='<rule>'    #在指定的区域删除一条富规则

        --query-rich-rule='<rule>'    #找到规则返回0,找不到返回1

        --list-rich-rules     #列出指定区域里的所有富规则

        2.富规则实例

        1.允许192.168.42.137主机能够访问http服务,允许172.16.2.0/24能够访问111端口

# firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.42.137 service name=http accept'  
# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.2.0/24 port port=111 protocol=tcp accept'

        2.默认public区域对外开放所有人能通过ssh服务连接,但拒绝172.16.2.0/24网段通过ssh连接服务器

        方式一:

# firewall-cmd --add-service=ssh
# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.2.0/24 service name=ssh reject'
# ssh 172.16.2.8 22
ssh: connect to host 172.16.2.8 port 22: Connection refused

        方式二:

# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.2.0/24 service name=ssh drop'

        3.当用户来源IP地址是192.168.42.137主机,则将用户请求的555端口转发至后端192.168.42.147的22端口

# firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.42.137 forward-port port=5555 protocol=tcp to-port=22 to-addr=192.168.42.147'

        3.查看富规则

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources:
  services: dhcpv6-client nginx ssh
  ports: 80/tcp 80/udp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
        rule family="ipv4" source address="172.16.2.0/24" service name="ssh" drop
        rule family="ipv4" source address="192.168.42.137" forward-port port="5555" protocol="tcp" to-port="22" to-addr="192.168.42.147"

        4.防火墙配置网站禁ping

# firewall-cmd --add-rich-rule='rule family=ipv4 protocol value=icmp drop'

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值