CentOS 7 中配置Firewall规则
1. 防火墙简介
动态防火墙后台程序
firewalld
提供了一个 动态管理的防火墙,用以支持网络 “zones” ,以分配对一个网络及其相关链接和界面一定程度的信任。它具备对 IPv4
和 IPv6
防火墙设置的支持。它支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口。2. 了解防火墙
一个图像化的配置工具,firewall-config,用于配置
firewalld
:它依次用 iptables工具 与执行数据包筛选的内核中的 Netfilter 通信,使用图像化的 firewall-config 工具,按下 Super 键进入活动总览,点击
firewall
,然后按下 Enter。firewall-config 工具就出现了。您将被提示输入管理员密码。firewall-config 工具里有一个标记为 Configuration 的下拉菜单,可以在
由
firewalld
提供的是动态的防火墙服务,而非静态的。因为配置的改变可以随时随地立刻执行,不再需要保存或者执行这些改变。现行网络连接的意外中断不会发生,正如防火墙的所有部分都不需要重新下载。提供命令行客户端,firewall-cmd,用于进行永久性或非永久性运行时间的改变,正如在
man firewall-cmd(1)
所解释的一样。永久性改变需要按照 firewalld(1)
手册页的解释来进行。注意, firewall-cmd
命令可以由 root
用户运行,也可以由管理员用户——换言之, wheel
群体的成员运行。在后一种情况里,命令将通过 polkit 进程来授权。firewalld
的配置储存在 /usr/lib/firewalld/
和 /etc/firewalld/
里的各种 XML 文件里,这样保持了这些文件被编辑、写入、备份的极大的灵活性,使之可作为其他安装的备份等等。其他应用程序可以使用 D-bus 和
firewalld
通信。3. 比较 system-config-firewall 以及 iptables 的 firewalld
firewalld
和 iptables service 之间最本质的不同是:
-
iptables service 在
/etc/sysconfig/iptables
中储存配置,而firewalld
将配置储存在/usr/lib/firewalld/
和/etc/firewalld/
中的各种 XML 文件里,。要注意,当firewalld
在Red Hat Enterprise Linux上安装失败时,/etc/sysconfig/iptables
文件就不存在。 -
使用 iptables service,每一个单独更改意味着清除所有旧有的规则和从
/etc/sysconfig/iptables
里读取所有新的规则,然而使用firewalld
却不会再创建任何新的规则;仅仅运行规则中的不同之处。因此,firewalld
可以在运行时间内,改变设置而不丢失现行连接。
4. 对网络区的理解
基于用户对网络中设备和交通所给与的信任程度,防火墙可以用来将网络分割成不同的区域。 NetworkManager 通知
firewalld
一个接口归属某个区域。接口所分配的区域可以由 NetworkManager 改变,也可以通过能为您打开相关 NetworkManager 窗口的 firewall-config 工具进行。在
/etc/firewalld/
的区域设定是一系列可以被快速执行到网络接口的预设定。列表并简要说明如下:drop
(丢弃)-
任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。
block
(限制)-
任何接收的网络连接都被
IPv4
的 icmp-host-prohibited 信息和IPv6
的 icmp6-adm-prohibited 信息所拒绝。 public
(公共)-
在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。
external
(外部)-
特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。
dmz
(非军事区)-
用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。
work
(工作)-
用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。
home
(家庭)-
用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。
internal
(内部)-
用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接。
trusted
(信任)-
可接受所有的网络连接。
指定其中一个区域为默认区域是可行的。当接口连接加入了 NetworkManager,它们就被分配为默认区域。安装时,
firewalld
里的默认区域被设定为公共区域。如果你的系统上没有安装使用命令安装
安装firewalld 防火墙
yum install firewalld
开启服务
systemctl start firewalld.service
关闭防火墙
systemctl stop firewalld.service
开机自动启动
systemctl enable firewalld.service
关闭开机制动启动
systemctl disable firewalld.service
使用firewall-cmd 命令
查看状态firewall-cmd --state //running 表示运行
获取活动的区域
firewall-cmd --get-active-zones
这条命令将用以下格式输出每个区域所含接口:
<zone1>: <interface1> <interface2> ..<zone2>: <interface3> ..
获取所有支持的服务
firewall-cmd --get-service
在不改变状态的条件下重新加载防火墙:
firewall-cmd --reload
启用某个服务
firewall-cmd --zone=public --add-service=https //临时 firewall-cmd --permanent --zone=public --add-service=https //永久
开启某个端口
firewall-cmd --permanent --zone=public --add-port=8080-8081/tcp //永久 firewall-cmd --zone=public --add-port=8080-8081/tcp //临时
删除某个端口
firewall-cmd --permanent --zone=public --remove-port=8080-8081/tcp
使用命令加载设置firewall-cmd --reload
新增一个zone,如新增 k8s,新增的配置文件会存放在 /etc/firewalld/zones 目录下
firewall-cmd --new-zone=k8s --permanent
将网络接口eth0 添加到k8s zones,一个zone 可以添加多个网络接口,但是一个网络接口只能加入一个 zone(一定要加ssh服务)
firewall-cmd --zone=k8s --add-interface=eth0
如网络接口 eth0 已经存在其他zone,首先查找eth0 接口当前在那个zone(假设查询在 publich zone),然后将 eth0 接口从所在的 zone 删除
firewall-cmd --get-zone-of-interface=eth0 firewall-cmd --zone=public --remove-interface=eth0
查看开启的端口和服务
firewall-cmd --permanent --zone=public --list-services //服务空格隔开 例如 dhcpv6-client https ss firewall-cmd --permanent --zone=public --list-ports //端口空格隔开 例如 8080-8081/tcp 8388/tcp 80/tcp
设置某个ip 访问某个服务
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.4/24" service name="http" accept"
ip 192.168.0.4/24 访问 http
删除上面设置的规则
firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4" source address="192.168.0.4/24" service name="http" accept"
检查设定是否生效
iptables -L -n | grep 21 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 ctstate NEW
执行命令firewall-cmd --list-all
显示:
public (default) interfaces: sources: services: dhcpv6-client ftp ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
查询服务的启动状态
firewall-cmd --query-service ftp yes firewall-cmd --query-service ssh yes firewall-cmd --query-service samba no firewall-cmd --query-service http no
自行加入要开放的 Port
firewall-cmd --add-port=3128/tcp firewall-cmd --list-all public (default) interfaces: sources: services: dhcpv6-client ftp ssh ports: 3128/tcp masquerade: no forward-ports: icmp-blocks: rich rules:
如对您有帮助,支持下呗!
微信
支付宝