使用iptable和Firewalld工具来管理Linux防火墙连接规则
防火墙
防火墙是一套规则。当数据包进入或离开受保护的网络空间时,将根据防火墙规则测试数据包的内容(特别是有关其来源、目标和计划使用的协议的信息),以确定是否应该允许数据包通过。下面是一个简单的例子:
防火墙可以根据协议或基于目标的规则过滤请求.
一方面,iptables是管理linux机器上防火墙规则的工具。
另一方面,firewalld也是管理linux机器上防火墙规则的工具。
你对此有意见吗?如果我告诉你外面还有另一个工具,叫做nftable?
好吧,我承认整件事闻起来有点怪怪的,所以让我解释一下。这一切都是从netfilter开始的,netfilter控制linux内核模块级别对网络堆栈的访问。几十年来,管理netfilter钩子的主要命令行工具是iptables规则集。
因为调用这些规则所需的语法可能有点神秘,各种用户友好的实现如下ufw并引入了firewalld作为高级netfilter解释器.然而,ufw和firewalld主要是为了解决独立计算机所面临的各种问题而设计的。构建全尺寸的网络解决方案通常需要iptables的额外功能,或者自2014年以来,它的替代品nftable(通过nft命令行工具)。
iptables没有去任何地方,而且仍然被广泛使用。事实上,在未来的许多年里,您应该会在管理员的工作中遇到受iptables保护的网络。但是nftable通过添加到经典的netfilter工具集,带来了一些重要的新功能。
从现在开始,我将通过示例演示firewalld和iptables如何解决简单的连接问题。
使用firewalld配置http访问
正如您从其名称中可能猜到的那样,firewalld是systemd一家人。firewalld可以安装在debian/ubuntu机器上,但在redhat和centos上是默认的。如果在计算机上运行了像apache这样的web服务器,则可以通过浏览服务器的web根目录来确认防火墙是否正常工作。如果这个网站无法到达,那么firewalld就在做它的工作。
您将使用firewall-cmd工具来管理命令行中的firewalld设置。添加–state参数返回当前防火墙状态:
?1 2 | # firewall-cmd --state running< br > |
默认情况下,firewalld将处于活动状态,并将拒绝所有传入通信量,但有几个例外情况,如ssh。这意味着您的网站将不会有太多的访问者,这肯定会为您节省大量的数据传输成本。但是,由于这可能不是您对web服务器的想法,所以您需要打开http和https端口,按照约定,这两个端口分别被指定为80和443。firewalld提供了两种方法来做到这一点。一个是通过–add-port参数,直接引用端口号以及它将使用的网络协议(在本例中为tcp)。这,这个,那,那个–permanent参数告诉firewalld在每次服务器启动时加载此规则:
?1 2 | # firewall-cmd --permanent --add-port=80/tcp # firewall-cmd --permanent --add-port=443/tcp |
–reload参数将这些规则应用于本届会议:
?1 | # firewall-cmd --reload |
对防火墙上的当前设置很好奇吗?跑–list-services:
?1 2 | # firewall-cmd --list-services dhcpv6-client http https ssh |
假设您添加了前面描述的浏览器访问,http、https和ssh端口现在都应该是打开的dhcpv6-client,它允许linux从本地dhcp服务器请求ipv 6 ip地址。
使用iptables配置锁定的客户信息亭
我敢肯定你见过售货亭-它们是平板电脑、触摸屏和类似atm的个人电脑-在一个包厢里,机场、图书馆和商务室随处可见,邀请顾客和过路人浏览内容。大多数信息亭的特点是,你通常不希望用户在家里把自己当成自己的设备。它们通常不是用来浏览、观看youtube视频或对五角大楼发起拒绝服务攻击的。所以,为了确保它们不被滥用,你需要把它们锁起来。
一种方法是应用某种kiosk模式,无论是通过聪明地使用linux显示管理器还是在浏览器级别。但是,为了确保所有的漏洞都已堵塞,您可能还需要通过防火墙添加一些硬网络控件。在下一节中,我将描述如何使用iptable来实现它。
关于使用iptables,有两件重要的事情要记住:您给出的规则的顺序是至关重要的,仅凭它本身,iptable规则将无法在重新启动后存活下来。我会在这里一次讲一遍。
亭工程
为了说明这一切,让我们想象一下,我们在一家名为bigmart的大型连锁商店工作。他们已经存在了几十年;事实上,我们想象中的祖父母很可能是在那里购物长大的。但如今,bigmart公司总部的人可能只是在数着亚马逊(amazon)把他们永远赶下去之前的几个小时。
尽管如此,bigmart的it部门正在尽力而为,他们刚刚给您发送了一些wifi准备的信息亭设备,您可以在整个商店的战略位置安装这些设备。他们的想法是,他们将显示一个登录到bigmart.com产品页面的网页浏览器,允许他们查找商品特征、走道位置和库存级别。这些信息亭还需要访问bigmart-data.com,那里存储了许多图像和视频媒体。
除此之外,您还希望允许更新,并在必要时允许包下载。最后,您希望只允许从本地工作站访问入站ssh,并阻止其他所有人。下图说明了这一切将如何运作:
亭的交通流量由iptable控制。
剧本
下面是如何将所有这些都放入一个bash脚本中:
?1 2 3 4 5 6 7 8 9 | #!/bin/bash iptables -a output -p tcp -d bigmart.com -j accept iptables -a output -p tcp -d bigmart-data.com -j accept iptables -a output -p tcp -d ubuntu.com -j accept iptables -a output -p tcp -d ca.archive.ubuntu.com -j accept iptables -a output -p tcp --dport 80 -j drop iptables -a output -p tcp --dport 443 -j drop iptables -a input -p tcp -s 10.0.3.1 --dport 22 -j accept iptables -a input -p tcp -s 0.0.0.0 /0 --dport 22 -j drop |
我们的规则的基本解剖是从-a告诉iptables我们要添加以下规则。output这意味着这个规则应该成为输出链的一部分。-p指示此规则仅适用于使用tcp协议的数据包,其中,-d告诉我们,目的地是bigmart.com。这,这个,那,那个-j标志指向accept作为当数据包与规则匹配时要采取的操作。在第一条规则中,该操作是允许或接受请求。但在更低的范围内,您可以看到将被删除或拒绝的请求。
记住秩序很重要。这是因为iptables将运行一个请求,超过它的每个规则,但只有在它得到匹配为止。所以一个向外发送的浏览器请求,比如说,youtube.com将通过前四条规则,但是当它到达–dport 80或–dport 443规则-取决于它是http请求还是https请求-它将被删除。iptable不会再费心检查了,因为那是匹配的。
另一方面,如果系统请求ubuntu.com进行软件升级,那么当它达到适当的规则时,它就会通过。显然,我们在这里所做的是只允许发送http或https请求到我们的bigmart或ubuntu目的地,而不是其他目的地。
最后两个规则将处理传入的ssh请求。由于它们不使用端口80或443,而是使用22,所以它们不会被前面的两个drop规则所拒绝。在这种情况下,从我的工作站登录请求将被接受,但其他任何地方的请求将被删除。这一点很重要:确保用于端口22规则的ip地址与用于登录的机器的地址相匹配-如果不这样做,您将立即被锁在门外。当然,这没什么大不了的,因为按照当前的配置方式,您可以简单地重新启动服务器,而iptables规则就会被删除。如果您使用lxc容器作为您的服务器并从您的lxc主机登录,那么使用您的主机用来连接到容器的ip地址,而不是它的公共地址。
如果我的机器的ip曾经改变,您需要记住更新这个规则;否则,您将被锁在门外。
在家里玩(希望是在一个丢弃的vm上)?太棒了创建自己的脚本。现在我可以保存脚本,使用chmod使其可执行,并将其运行为sudo。别担心bigmart-data.com not found错误-当然找不到;它不存在。
?1 2 | chmod +x scriptname.sh sudo ./scriptname.sh |
您可以在命令行中使用curl。请求ubuntu.com有效,但是manning.com失败了。
?1 2 | curl ubuntu.com curl manning.com |
将iptables配置为在系统启动时加载
现在,我如何使这些规则自动加载每次售货机启动?第一步是使用iptables-save工具。这将在根目录中创建一个包含规则列表的文件。这个管道,后面跟着tee命令,是应用我的sudo权限到字符串的第二部分:将文件实际保存到其他受限制的根目录。
然后,我可以告诉系统运行一个名为iptables-restore每次它启动。像我们在前面的模块中看到的那样的常规cron作业不会有帮助,因为它们是在设定的时间运行的,但是我们不知道我们的计算机何时会决定崩溃和重新启动。
有很多方法来处理这个问题。这里有一个:
在我的linux机器上,我将安装一个名为anacron这将在/etc/目录中提供一个名为anacrontab的文件。我将编辑该文件并添加以下内容iptables-restore命令,告诉它每天(必要时)在启动后一分钟将该.rule文件的当前值加载到iptables中。我会给作业一个标识符(iptables-restore),然后添加命令本身。既然你在家里和我一起玩,你应该重新启动你的系统来测试这一切。
?1 2 3 4 | sudo iptables-save | sudo tee /root/my.active.firewall.rules sudo apt install anacron sudo nano /etc/anacrontab 1 1 iptables-restore iptables-restore < /root/my.active.firewall.rules |
我希望这些实际的例子已经说明了如何使用iptables和firewalld来管理基于linux的防火墙上的连接问题。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://opensource.com/article/18/9/linux-iptables-firewalld?utm_campaign=intrel
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。