firewalld 常见命令 systemctl
systemctl unmask firewalld #执行命令,即可实现取消服务的锁定
systemctl mask firewalld # 下次需要锁定该服务时执行
systemctl start firewalld.service #启动防火墙
systemctl stop firewalld.service #停止防火墙
systemctl reloadt firewalld.service #重载配置
systemctl restart firewalld.service #重启服务
systemctl status firewalld.service #显示服务的状态
systemctl enable firewalld.service #在开机时启用服务
systemctl disable firewalld.service #在开机时禁用服务
systemctl is-enabled firewalld.service #查看服务是否开机启动
systemctl list-unit-files|grep enabled #查看已启动的服务列表
systemctl —failed #查看启动失败的服务列表 firewall-cmd
firewall-cmd —state #查看防火墙状态
firewall-cmd —reload #更新防火墙规则
firewall-cmd —state #查看防火墙状态
firewall-cmd —reload #重载防火墙规则
firewall-cmd —list-ports #查看所有打开的端口
firewall-cmd —list-services #查看所有允许的服务
firewall-cmd —get-services #获取所有支持的服务 #区域相关
firewall-cmd —list-all-zones #查看所有区域信息
firewall-cmd —get-active-zones #查看活动区域信息
firewall-cmd —set-default-zone=public #设置public为默认区域
firewall-cmd —get-default-zone #查看默认区域信息
firewall-cmd —zone=public —add-interface=eth0 #将接口eth0加入区域public
#接口相关
firewall-cmd —zone=public —remove-interface=eth0 #从区域public中删除接口eth0
firewall-cmd —zone=default —change-interface=eth0 #修改接口eth0所属区域为default
firewall-cmd —get-zone-of-interface=eth0 #查看接口eth0所属区域
firewall-cmd —zone=public —list-interfaces 查看指定区域的所有接口
eth0
#端口控制
firewall-cmd —add-port=80/tcp —permanent #永久添加80端口例外(全局)
firewall-cmd —remove-port=80/tcp —permanent #永久删除80端口例外(全局)
firewall-cmd —add-port=65001-65010/tcp —permanent #永久增加65001-65010例外(全局)
firewall-cmd —zone=public —add-port=80/tcp —permanent #永久添加80端口例外(区域public)
firewall-cmd —zone=public —remove-port=80/tcp —permanent #永久删除80端口例外(区域public)
firewall-cmd —zone=public —add-port=65001-65010/tcp —permanent #永久增加65001-65010例外(区域public)
firewall-cmd —query-port=8080/tcp # 查询端口是否开放
firewall-cmd —permanent —add-port=80/tcp # 开放80端口
firewall-cmd —permanent —remove-port=8080/tcp # 移除端口
firewall-cmd —reload #重启防火墙(修改配置后要重启防火墙)
- 管理规则
# firewall-cmd —panic-on # 丢弃
# firewall-cmd —panic-off # 取消丢弃
# firewall-cmd —query-panic # 查看丢弃状态
# firewall-cmd —reload # 更新规则,不重启服务
# firewall-cmd —complete-reload # 更新规则,重启服务
添加某接口至某信任等级,譬如添加 eth0 至 public,永久修改
# firewall-cmd —zone=public —add-interface=eth0 —permanent
设置 public 为默认的信任级别
# firewall-cmd —set-default-zone=public
a. 管理端口
列出 dmz 级别的被允许的进入端口
# firewall-cmd —zone=dmz —list-ports
允许 tcp 端口 8080 至 dmz 级别
# firewall-cmd —zone=dmz —add-port=8080/tcp
允许某范围的 udp 端口至 public 级别,并永久生效
# firewall-cmd —zone=public —add-port=5060-5059/udp —permanent
b. 网卡接口
列出 public zone 所有网卡
# firewall-cmd —zone=public —list-interfaces
将 eth0 添加至 public zone,永久
# firewall-cmd —zone=public —permanent —add-interface=eth0
eth0 存在与 public zone,将该网卡添加至 work zone,并将之从 public zone 中删除
# firewall-cmd —zone=work —permanent —change-interface=eth0
删除 public zone 中的 eth0,永久
# firewall-cmd —zone=public —permanent —remove-interface=eth0
c. 管理服务
添加 smtp 服务至 work zone
# firewall-cmd —zone=work —add-service=smtp
移除 work zone 中的 smtp 服务
# firewall-cmd —zone=work —remove-service=smtpd. 配置 external zone 中的 ip 地址伪装
查看
# firewall-cmd —zone=external —query-masquerade
打开伪装
# firewall-cmd —zone=external —add-masquerade
关闭伪装
# firewall-cmd —zone=external —remove-masqueradee. 配置 public zone 的端口转发
端口转发是指传统的目标地址映射,实现外网访问内网资源
流量转发命令格式为:
firewalld-cmd —permanent —zone=<区域> —add-forward-port= port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>
要打开端口转发,则需要先
# firewall-cmd —zone=public —add-masquerade
然后转发 tcp 22 端口至 3753
# firewall-cmd —zone=public —add-forward-port=port=22:proto=tcp:toport=3753
转发 22 端口数据至另一个 ip 的相同端口上
# firewall-cmd —zone=public —add-forward-port=port=22:proto=tcp:toaddr=192.168.1.100
转发 22 端口数据至另一 ip 的 2055 端口上
# firewall-cmd —zone=public —add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.100 1 服务器内端口转发.
在服务器A上,将发送到A服务器的5423端口的数据转发到A服务器的80端口.
服务器A上执行一条指令:
firewall-cmd —permanent —add-forward-port=port=5423:proto=tcp:toport=80 ,很简单。
注意如果不加zone信息,默认是default-zone 内配置这条规则(通过firewall-cmd —get-default-zone查看).
2 服务器之间端口转发.—必须要开启ip伪装
在服务器A上,将发送到A服务器(192.168.37.3)的8080端口的数据转发到B(192.168.37.2)服务器的8080端口.
在服务器A上执行:
firewall-cmd —zone=trusted —add-masquerade —permanent
(如果不指定zone则默认default-zone),开启IP伪装,不开启的话,服务器间端口转发不会成功.
firewall-cmd —permanent —add-forward-port=port=8080:proto=tcp:toport=8080:toaddr=192.168.37.2
测试: 浏览器访问A服务器的8080端口,能正常访问网页
f. 配置 public zone 的 icmp
查看所有支持的 icmp 类型
# firewall-cmd —get-icmptypes
destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded
列出
# firewall-cmd —zone=public —list-icmp-blocks
添加 echo-request 屏蔽
# firewall-cmd —zone=public —add-icmp-block=echo-request [—timeout=seconds]
移除 echo-reply 屏蔽
# firewall-cmd —zone=public —remove-icmp-block=echo-reply
g. IP 封禁
# firewall-cmd —permanent —add-rich-rule=”rule family=’ipv4’ source address=’222.222.222.222’ reject”
当然,我们仍然可以通过 ipset 来封禁 ip
封禁 ip
# firewall-cmd —permanent —zone=public —new-ipset=blacklist —type=hash:ip
# firewall-cmd —permanent —zone=public —ipset=blacklist —add-entry=222.222.222.222
封禁网段
# firewall-cmd —permanent —zone=public —new-ipset=blacklist —type=hash:net
# firewall-cmd —permanent —zone=public —ipset=blacklist —add-entry=222.222.222.0/24
导入 ipset 的 blacklist 规则
# firewall-cmd —permanent —zone=public —new-ipset-from-file=/path/blacklist.xml
如果已经存 blacklist,则需要先删除
# firewall-cmd —get-ipsets
blacklist
# firewall-cmd —permanent —zone=public —delete-ipset=blacklist
然后封禁 blacklist
# firewall-cmd —permanent —zone=public —add-rich-rule=’rule source ipset=blacklist drop’
重新载入以生效
# firewall-cmd —reload
查看 blacklist
# firewall-cmd —ipset=blacklist —get-entries