目录
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
- trusted 信任区域 默认允许所有流量传入
- public 公共区域 (默认区域)默认允许ssh 服务 dhcp
- external 外部区域 默认允许ssh其余均拒绝
- home 家庭区域 有ssh, 预定于服务等
- internal 内部区域 默认允许ssh 服务 dhcp服务等
- work 工作区域 默认ssh
- dmz 隔离区
- block 限制区域 默认拒绝所有流量传入
- 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 '
请求连接时被拒绝;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)