电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 2243 人浏览分享

使用iptable和Firewalld工具来管理Linux防火墙连接规则

[复制链接]
2243 0
防火墙

防火墙是一套规则。当数据包进入或离开受保护的网络空间时,将根据防火墙规则测试数据
包的内容(特别是有关其来源、目标和计划使用的协议的信息),以确定是否应该允许数据包
通过。下面是一个简单的例子:

5bf8f03b20.jpg


防火墙可以根据协议或基于目标的规则过滤请求.

一方面,iptables是管理Linux机器上防火墙规则的工具。

另一方面,firewalld也是管理Linux机器上防火墙规则的工具。

你对此有意见吗?如果我告诉你外面还有另一个工具,叫做nftable?

好吧,我承认整件事闻起来有点怪怪的,所以让我解释一下。这一切都是从Netfilter
开始的,Netfilter控制Linux内核模块级别对网络堆栈的访问。几十年来,管理Netfil
ter钩子的主要命令行工具是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. # firewall-cmd --state
  2. running
复制代码

默认情况下,Firewalld将处于活动状态,并将拒绝所有传入通信量,但有几个例外情况,如SSH。
这意味着您的网站将不会有太多的访问者,这肯定会为您节省大量的数据传输成本。但是,由于
这可能不是您对Web服务器的想法,所以您需要打开HTTP和HTTPS端口,按照约定,这两个端
口分别被指定为80和443。Firewalld提供了两种方法来做到这一点。一个是通过–add-port参
数,直接引用端口号以及它将使用的网络协议(在本例中为TCP)。这,这个,那,那个
–permanent参数告诉Firewalld在每次服务器启动时加载此规则:

  1. # firewall-cmd --permanent --add-port=80/tcp
  2. # firewall-cmd --permanent --add-port=443/tcp
复制代码

–reload参数将这些规则应用于本届会议:

  1. # firewall-cmd --reload
复制代码


对防火墙上的当前设置很好奇吗?跑–list-services:

  1. # firewall-cmd --list-services
  2. 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-d
ata.com,那里存储了许多图像和视频媒体。

除此之外,您还希望允许更新,并在必要时允许包下载。最后,您希望只允许从本
地工作站访问入站SSH,并阻止其他所有人。下图说明了这一切将如何运作:

719e226cee.jpg


亭的交通流量由iptable控制。

剧本

下面是如何将所有这些都放入一个Bash脚本中:

  1. #!/bin/bash
  2. iptables -A OUTPUT -p tcp -d bigmart.com -j ACCEPT
  3. iptables -A OUTPUT -p tcp -d bigmart-data.com -j ACCEPT
  4. iptables -A OUTPUT -p tcp -d ubuntu.com -j ACCEPT
  5. iptables -A OUTPUT -p tcp -d ca.archive.ubuntu.com -j ACCEPT
  6. iptables -A OUTPUT -p tcp --dport 80 -j DROP
  7. iptables -A OUTPUT -p tcp --dport 443 -j DROP
  8. iptables -A INPUT -p tcp -s 10.0.3.1 --dport 22 -j ACCEPT
  9. 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. chmod +X scriptname.sh
  2. sudo ./scriptname.sh
复制代码


您可以在命令行中使用cURL。请求ubuntu.com有效,但是manning.com失败了。

  1. curl ubuntu.com
  2. curl manning.com
复制代码


将iptables配置为在系统启动时加载

现在,我如何使这些规则自动加载每次售货机启动?第一步是使用iptables-save工具。
这将在根目录中创建一个包含规则列表的文件。这个管道,后面跟着tee命令,是应用
我的sudo权限到字符串的第二部分:将文件实际保存到其他受限制的根目录。

然后,我可以告诉系统运行一个名为iptables-restore每次它启动。像我们在前面的模块中
看到的那样的常规cron作业不会有帮助,因为它们是在设定的时间运行的,但是我们不知
道我们的计算机何时会决定崩溃和重新启动。

有很多方法来处理这个问题。这里有一个:

在我的Linux机器上,我将安装一个名为anacron这将在/etc/目录中提供一个名为anacrontab的文件。
我将编辑该文件并添加以下内容iptables-restore命令,告诉它每天(必要时)在启动后一分钟将该.Rule
文件的当前值加载到iptables中。我会给作业一个标识符(iptables-restore),然后添加命令本身。既然
你在家里和我一起玩,你应该重新启动你的系统来测试这一切。

  1. sudo iptables-save | sudo tee /root/my.active.firewall.rules
  2. sudo apt install anacron
  3. sudo nano /etc/anacrontab
  4. 1 1 iptables-restore iptables-restore < /root/my.active.firewall.rules
复制代码


我希望这些实际的例子已经说明了如何使用iptables和Firewalld来管理基于Linux的防火墙上的连接问题。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.