Centos7 debian firewalld防火墙基础
跳到导航
跳到搜索
常用命令
#如果你的系统上没有安装使用命令安装 yum install firewalld pre NOTE 安装firewall后(LINUX7系统一般情况下默认已安装),防火墙默认配置是只打开SSH端口的,也就是22端口,就是默认放行ssh服务,不受firewalld-cmd的规则限制。如果SSH的端口已更改成别的端口了,请切记一定在启动firewall前先修改对应服务策略中SSH的端口为你的SSH端口 #开启服务 systemctl start firewalld.service #关闭防火墙 systemctl stop firewalld.service #开机自动启动 systemctl enable firewalld.service #关闭开机制动启动 systemctl disable firewalld.service #查看状态 systemctl status firewalld firewall-cmd --state #检查是否生效 firewall-cmd --zone=public --query-port=80/tcp #列出所有的开放端口 firewall-cmd --list-all #设置特定ip访问特定服务 firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.4/24" service name="http" accept' 删除命令为 : --remove-rich-rule 端口转发路由 : 复制代码 # 将80端口的流量转发至8080 firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 # 将80端口的流量转发至192.168.0.1 firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1 # 将80端口的流量转发至192.168.0.1的8080端口 firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080 #删除端口 这个好像 无效呢 firewall-cmd --zone=public --remove-port=80/tcp firewall-cmd --zone=public --remove-service=http
例子说明
举例 添加 80 443 3306 2222 对外公开,其它就不开, 如果默认ssh 那就是22 firewall-cmd --permanent --zone=public --add-port=80/tcp #//永久 firewall-cmd --permanent --zone=public --add-port=443/tcp firewall-cmd --permanent --zone=public --add-port=3306/tcp firewall-cmd --zone=public --add-port=2222/tcp --permanent # 用户SSH登录端口,如果默认就是22 #reload 使刚才的命令生效 firewall-cmd --reload my eg on lx firewall-cmd --add-port=80/tcp --add-port=443/tcp --permanent firewall-cmd --add-port=3306/tcp --add-port=6379/tcp --add-port=5672/tcp --add-port=15672/tcp --permanent firewall-cmd --reload firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: ssh dhcpv6-client ports: 80/tcp 443/tcp 3306/tcp 6379/tcp 5672/tcp 15672/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: 多个端口 firewall-cmd --add-port=8000-8999/tcp --permanent firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="18.69.11.55" port protocol="tcp" port="9100-9256" accept" firewall-cmd --add-service=http --add-service=https --permanent firewall-cmd --reload 端口允许被某固定 IP 访问 $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="允许访问的IP" port protocol="tcp" port="端口" accept" $ firewall-cmd --reload # 重载规则, 才能生效 $ firewall-cmd --list-all # 查看使用中的规则 添加多个端口要先删除 firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="148.6.11.59" port protocol="tcp" port="9256" accept" firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="18.69.11.55" port protocol="tcp" port="9100-9256" accept" # 举例 # 允许 192.168.100.166 访问 6379 端口 $ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.100.166" port protocol="tcp" port="6379" accept" 配置文件 /etc/firewalld/zones/public.xml
知识点
firewalld跟iptables比起来至少有两大好处: 1、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效; 2、firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。 firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter。 一个重要的概念:区域管理 注:FirewallD的默认区域是public。 firewalld默认提供了九个zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,他们都保存在“/usr/lib /firewalld/zones/”目录下。 配置方法 firewalld的配置方法主要有三种:firewall-config、firewall-cmd和直接编辑xml文件,其中 firewall-config是图形化工具,firewall-cmd是命令行工具,而对于linux来说大家应该更习惯使用命令行方式的操作
firewalld 基础知识
RHEL 7系统中集成了多款防火墙管理工具,其中firewalld(Dynamic Firewall Manager of Linux systems,Linux系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥有基于CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式。
相较于传统的防火墙管理配置工具,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。例如,我们有一台笔记本电脑,每天都要在办公室、咖啡厅和家里使用。按常理来讲,这三者的安全性按照由高到低的顺序来排列,应该是家庭、公司办公室、咖啡厅。当前,我们希望为这台笔记本电脑指定如下防火墙策略规则:在家中允许访问所有服务;在办公室内仅允许访问文件共享服务;在咖啡厅仅允许上网浏览。在以往,我们需要频繁地手动设置防火墙策略规则,而现在只需要预设好区域集合,然后只需轻点鼠标就可以自动切换了,从而极大地提升了防火墙策略的应用效率。firewalld中常见的区域名称(默认为public)以及相应的策略规则如表8-2所示。
firewalld中常用的区域名称及策略规则 区域 默认规则策略 trusted 允许所有的数据包 home 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量 internal 等同于home区域 work 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关,则允许流量 public 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许流量 external 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 dmz 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 block 拒绝流入的流量,除非与流出的流量相关 drop 拒绝流入的流量,除非与流出的流量相关 firewall-cmd命令中使用的参数以及作用 参数 作用 --get-default-zone 查询默认的区域名称 --set-default-zone=<区域名称> 设置默认的区域,使其永久生效 --get-zones 显示可用的区域 --get-services 显示预先定义的服务 --get-active-zones 显示当前正在使用的区域与网卡名称 --add-source= 将源自此IP或子网的流量导向指定的区域 --remove-source= 不再将源自此IP或子网的流量导向某个指定区域 --add-interface=<网卡名称> 将源自该网卡的所有流量都导向某个指定区域 --change-interface=<网卡名称> 将某个网卡与区域进行关联 --list-all 显示当前区域的网卡配置参数、资源、端口以及服务等信息 --list-all-zones 显示所有区域的网卡配置参数、资源、端口以及服务等信息 --add-service=<服务名> 设置默认区域允许该服务的流量 --add-port=<端口号/协议> 设置默认区域允许该端口的流量 --remove-service=<服务名> 设置默认区域不再允许该服务的流量 --remove-port=<端口号/协议> 设置默认区域不再允许该端口的流量 --reload 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则 --panic-on 开启应急状况模式 --panic-off 关闭应急状况模式 --permanent(永久配置 与Linux系统中其他的防火墙策略配置工具一样,使用firewalld配置的防火墙策略默认为运行时(Runtime)模式,又称为当前生效模式,而且随着系统的重启会失效。如果想让配置策略一直存在,就需要使用永久(Permanent)模式了,方法就是在用firewall-cmd命令正常设置防火墙策略时添加--permanent参数,这样配置的防火墙策略就可以永久生效了。但是,永久生效模式有一个“不近人情”的特点,就是使用它设置的策略只有在系统重启之后才能自动生效。如果想让配置的策略立即生效,需要手动执行firewall-cmd --reload命令。 接下来的实验都很简单,但是提醒大家一定要仔细查看刘遄老师使用的是Runtime模式还是Permanent模式。如果不关注这个细节,就算是正确配置了防火墙策略,也可能无法达到预期的效果。 查看firewalld服务当前所使用的区域: [root@l ~]# firewall-cmd --get-default-zone public
参考
Install and Configure Firewalld on Debian 10/11
CentOS 7.0 关闭firewalld防火墙指令 及更换Iptables防火墙
细说firewalld和iptables How to Disable SELinux on CentOS 7
How to Configure ‘FirewallD’ in RHEL/CentOS 7