firewalld常用笔记。
工作机制
相较于传统的iptables:日常使用过程中支持动态更新,不用重启服务;并加入了常见防火墙的“zone”概念(便于快速切换机器环境,如办公、家庭等)。相比iptables语法更加简明易懂。默认配置文件有两个:
/usr/lib/firewalld/ (系统自带配置,尽量不要修改。如包升级可能需要考虑丢失配置) /etc/firewalld/ (用户配置地址,优先生效)
在firewalld运行过程中,对于一个接受到的请求具体使用哪个zone,firewalld是通过三种方法来判断的:
-
1、source,也就是源地址,优先级最高
-
2、interface,接收请求的网卡,优先级第二
-
3、firewalld.conf中配置的默认zone,优先级最低
这三个的优先级按顺序依次降低,也就是说如果按照source可以找到就不会再按interface去查找,如果前两个都找不到才会使用第三个,也就是在firewalld.conf中配置的默认zone。
zone简单说明
- public
默认接口都在public域,该zone的初始化配置为拒绝流入的数据包,除非与输出流量数据包相关或是ssh,dhcpv6-client服务则允许。
- dmz
该zone的初始化配置为拒绝流入的数据包,除非与输出流量数据包相关或是ssh服务则允许。生产环境我们可以使用dmz这个名字,为以后可能存在的单机多域预留扩展。
(其实,zone只是个便于人为管理和识别的名字而已。)
一般开局
# 查看当前生效规则 firewall-cmd --list-all firewall-cmd --zone=XXXX --list-all --permanent # 注:域内多个规则出现冲突时,第一条规则优先生效 # 查看指定接口所属区域 firewall-cmd --get-zone-of-interface=eno16777736 # 将本机设置为dmz firewall-cmd --set-default-zone=dmz firewall-cmd --get-default-zone # 将接口加入域 firewall-cmd --zone=dmz --add-interface=eno16777736 # 查看指定区域打开的端口及服务 firewall-cmd --zone=dmz --list-ports firewall-cmd --zone=dmz --list-services # 开启业务需要的服务http(80) firewall-cmd --zone=dmz --add-service=http --permanent # 开启自定义端口ssh(60123) firewall-cmd --remove-service=ssh --permanent firewall-cmd --add-port=60123/tcp --permanent # 修改规则后,动态更新 firewall-cmd --reload # 高级用法 # 当基本的语法规则不能满足要求时,可以使用更复杂的规则 # 1、rich规则 # man 5 firewalld.richlanguage # 2、direct规则 # man 5 firewalld.direct # 源IP限制 firewall-cmd --add-rich-rule="rule family="ipv4" source address="114.253.30.102" port protocol="tcp" port="22" accept" --permanent # 地址转发(NAT) # 首先需要开启IP伪装 firewall-cmd --permanent --zone=dmz --add-masquerade # 另外需要确保系统参数IPV4数据转发开启 echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p # 端口转发 # 注,如果开启了NAT配置,通过该功能转发的数据包,源地址会变为转发机的IP firewall-cmd --add-rich-rule="rule family=ipv4 source address="114.253.30.102" forward-port to-addr=10.119.3.253 to-port=11940 protocol=tcp port=11940" --permanent # direct规则 # 防火墙masquerade状态查看 firewall-cmd --query-masquerade firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.0.0.0/24 -o ens37 -j MASQUERADE firewall-cmd --complete-reload # 转发查询 firewall-cmd --direct --get-all-passthroughs # 组播查询 firewall-cmd --direct --get-all-rules # 应急: # 关闭所有对外接口(只推荐本地操作) firewall-cmd --panic-on # 彻底重启防火墙(仅在异常时使用) firewall-cmd --complete-reload
# 业务已经正常运行过程中,如果想要打开防火墙进行设置(之前测试阶段防火墙是关闭的) # 需要注意只能从配置文件入手(防火墙关闭状态下无法使用命令配置) # 域信息配置: vi /etc/firewalld/firewalld.conf DefaultZone=dmz # 端口及网卡绑定信息配置: vi /etc/firewalld/zones/dmz.xml # 编辑内容格式如下 <?xml version="1.0" encoding="utf-8"?> <zone> <short>DMZ</short> <description>For computers in your demilitarized zone that are publicly-accessible with limited access to your internal network. Only selected incoming connections are accepted.</description> <interface name="lo"/> <interface name="ens3"/> <interface name="ens9"/> <service name="ssh"/> <port protocol="tcp" port="22"/> <port protocol="tcp" port="8066"/> <port protocol="tcp" port="9066"/> <port protocol="tcp" port="10050"/> </zone> # 清除配置 # 可以直接删除下列配置即可 /etc/firewalld/zones/dmz.xml /etc/firewalld/direct.xml # 【特殊】 # direct组播规则配置 vi /etc/firewalld/direct.xml # 格式如下 <?xml version="1.0" encoding="utf-8"?> <direct> <rule priority="0" table="filter" ipv="ipv4" chain="INPUT">--in-interface ens3 --destination 224.0.0.18 --protocol vrrp -j ACCEPT</rule> <rule priority="0" table="filter" ipv="ipv4" chain="OUTPUT">--out-interface ens3 --destination 224.0.0.18 --protocol vrrp -j ACCEPT</rule> </direct> # 按地址段进行规制管理 firewall-cmd --permanent --new-ipset=whitelist-app --type=hash:ip firewall-cmd --permanent --ipset=whitelist-app --add-entry=10.0.0.2 firewall-cmd --permanent --ipset=whitelist-app --add-entry=10.0.0.3 firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source ipset=whitelist-app service name="http" accept'
评论列表,共 3 条评论