【Linux安全管理】Firewalld详解

目录

1、与iptables不同

2、配置防火墙

3、firewalld区域概念

4、filewalld 配置生效

5、firewalld服务

firewalld 端口映射

富规则 rich-rule


1、与iptables不同

  • firewalld采用区域和服务管理,而不是链式规则
  • 动态管理规则,允许更新规则而不破坏原有会话与连接

2、配置防火墙

  • firewall-cmd 命令行模式 推荐使用
  • firewall-config(如果没装图形化界面就不行)
  • vi /etc/firewalld/firewalld.conf
# (查看状态)
#  firewall-cmd --state

#(更新配置)
# firewall-cmd --reload

3、firewalld区域概念

zone

  1. trusted 信任区域     默认允许所有流量传入
  2. public 公共区域    (默认区域)默认允许ssh 服务 dhcp 
  3. external 外部区域   默认允许ssh其余均拒绝
  4. home 家庭区域       有ssh, 预定于服务等
  5. internal 内部区域     默认允许ssh 服务 dhcp服务等
  6. work 工作区域         默认ssh
  7. dmz 隔离区              
  8. block 限制区域          默认拒绝所有流量传入
  9. drop 丢弃区域            默认丢弃所有流量传入

        工作原理

        管理数据包时:

         1、先根据数据包的源IP进行相应区域的防火墙规则匹配; 如果源地址关联到特定的区域,则按特定区域的规则执行;  如果未关联到特定的区域,则按默认区域的规则执行。

        2、根据传入的网络接口,进行相应区域的防火墙规则匹配; 如果源地址关联到特定的区域,则按特定区域的规则执行;  如果未关联到特定的区域,则按默认区域的规则执行。

        绑定源地址的区域规则> 网卡绑定的区域规则> 默认区域规则

4、filewalld 配置生效

运行时配置:

  • 不中断现有连接
  • 不能修改服务配置

永久配置

  • 不立即生效,除非重启或者重新加载配置
  • 不中断现有连接
  • 可以修改服务配置
  •  注意:添加--permanent选项,表示永久配置,但是需要重启firewalld或者重新加载--reload,如果 不带这个选项,则表示用于设置运行时配置,这些规则在系统重启,firewalld重启,或者重新加载后失 效,需要将运行时配置永久生效,则需要将运行时配置规则写入配置文件中,执行firewall-cmd -- runtime-to-permanent。

5、firewalld服务

# systemctl status firewalld

# systemctl start firewalld

# systemctl enable firewalld
# 显示所有可用区域
# firewall-cmd --get-zones

# 显示当前默认区域
# firewall-cmd --get-default-zone

# 设置默认区域
# firewall-cmd --set-default-zone=public

# 显示当前使用的区域和对应网卡
# firewall-cmd --get-active-zones

# 显示指定接口绑定的区域
# firewall-cmd --get-zone-of-interface=ens33

# 为指定接口绑定区域
# firewall-cmd --zone=dmz --add-interface=ens37

# 为指定的区域更改绑定的网络接口
# firewall-cmd --zone=dmz --change-interface=ens33

# 为指定的区域删除绑定的网络接口
# firewall-cmd --zone=dmz --remove-interface=ens37

# 查看默认区域设置
# firewall-cmd --list-all

# 查看指定的区域设置
# firewall-cmd --zone=dmz --list-all

# 显示指定区域可以访问的服务
# firewall-cmd --zone=public --list-services

# 显示系统预定义的服务名
# firewall-cmd --get-service

# 为指定区域添加允许访问的服务
# firewall-cmd --zone=public --add-service=http

# 为指定区域删除允许访问的服务
# firewall-cmd --zone=public --remove-service=http

# 添加多个服务
# firewall-cmd --zone=public --add-services={http,https,redis,ssh}

# 永久生效,运行时配置结束后统一执行
# firewall-cmd --runtime-to-permanent

# 永久生效,需要在设置时加--permanent选项,但是并不是运行时生效,需要重启启动firewalld或者重
新reload
# firewall-cmd --permanent --zone=public --add-services=http
# firewall-cmd --reload 或者 systemctl restart firewalld

# 显示指定域中允许访问的端口
# firewall-cmd --zone=public --list-port

# 位指定域中添加允许访问的端口
# firewall-cmd --zone=public --add-port=22/tcp --add-port=80-100/tcp

#位指定域中删除允许访问的端口
# firewall-cmd --zone=public --remove-port=22/tcp --remove-port=80-100/tcp

如果执行命令显示success但是效果没有出现,使用firewall-cmd --reload

firewalld 端口映射

# 设置禁止来源IP为192.168.100.134的ip地址访问
# firewall-cmd --add-source=192.168.100.134/24 --zone=drop --类似于iptables中
DROP
# firewall-cmd --add-source=192.168.100.134/24 --zone=block --类似于iptables中
REJECT

# 设置允许来源IP为192.168.100.134的ip地址访问
# firewall-cmd --add-source=192.168.100.134/24 --zone=trusted

# 地址转发端口映射
# firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080


# firewall-cmd --zone=public --remove-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.100.134
(在访问添加了这个规则的ip的数据包会转发到192.168.100.134的80端口)

        当你修改了http配置文件(改端口为8080,并且重启了httpd),也添加了转发端口映射,查看服务也有http服务,为什么curl还是不通?

          因为没对外没有提供相应的8080端口;


            虽然系统起的是8080端口,但是对外来说我们的端口是80端口,必须通过80端口连进来,在、才能经过映射访问到8080端口;

        所以没添加8080端口,却访问了8080端口是不行的;


   

         如果添加了8080端口,直接用8080端口进行httpd访问,而不是通过连接80端口再经端口映射转发从8080端口进行访问;

富规则 rich-rule

        只用firewalld的服务以及端口进行配置的时候限制比较多;为了解决这一问题,所以用富规则;

# 查看帮助手册
# man 5 firewalld.richlanguage


# 列出富规则
# firewall-cmd --list-rich-rule


# 添加富规则
# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source
address="192.168.100.134" accept'
(添加富规则,允许192.168.100.134访问)

# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source
address="192.168.100.134" port port=22 protocol=tcp reject'
(拒绝来自这个ip的22端口的访问)


# 删除富规则
# firewall-cmd --zone=public --remove-rich-rule 'rule family="ipv4" source
address="192.168.100.134" forward-port port=80 protocol=tcp to-port=8080 '

 请求连接时被拒绝;