一直以来,Linux系统上都采用了Netilter作为内核级别控制访问网络栈。几十年来,管理Netfilter的主要工具是iptables规则集。因为调用这些规则的语法比较晦涩难懂,所以各种用户友好的实现方式,如ufw和firewalld被引入。下面我们将通过示例展示firewalld如何解决简单的连接问题。
使用firewalld配置HTTP访问
firewalld是systemd家族的一部分。对于RedHat和CentOS,firewalld是默认安装的,另外它可以安装在Debian或者Ubuntu的机器上。如果我们的计算机上运行了Apache这样的web服务器,那么可以通过浏览服务器的web根目录来确认防火墙是否在工作。如果网站不可访问,那么firewalld正在工作。
我们可以使用firewalld-cmd工具从命令行管理firewalld设置。添加state参数将返回当前防火墙状态:
#firewall-cmd --state
#running
默认情况下,firewalld处于运行状态,并拒绝所有传入流量,但有几个例外,如SSH。如果希望打开HTTP和HTTPS端口,默认情况下两个端口分别被指定为80和443。firewalld提供了两种参数来实现这个功能。一个通过--add-port参数,该参数直接引用端口号及其将使用的网络协议(如TCP)。另外一个是通过--permanent参数,它告诉firewalld在每次服务器启动是加载此规则。
#firewall-cmd --permanent --add-port=80/tcp
#firewall-cmd --permanent --add-port=443/tcp
-reload参数将这些规则应用于当前会话,让配置可以马上生效:
#firewall-cmd --reload
查看当前防火墙上的配置,使用--list-services参数:
#firewall-cmd --list-services
#dhcpv6-client http https ssh
假设已经如前所述添加了浏览器访问,那么 HTTP、HTTPS 和 SSH 端口现在都应该是和 dhcpv6-client 一样开放的 —— 它允许 Linux 从本地 DHCP 服务器请求IPv6地址。