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

微信扫一扫 分享朋友圈

已有 1891 人浏览分享

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

[复制链接]
1891 0
本帖最后由 zhaorong 于 2019-12-3 15:48 编辑

防火墙

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

5bf8f03b20.png

防火墙可以根据协议或基于目标的规则过滤请求.
一方面 iptables是管理Linux机器上防火墙规则的工具。
另一方面 firewalld也是管理Linux机器上防火墙规则的工具。
你对此有意见吗?如果我告诉你外面还有另一个工具叫做nftable?
好吧我承认整件事闻起来有点怪怪的 所以让我解释一下 这一切都是从Netfilter开始的 Netfilter控制Linux内核模块级别对网络
堆栈的访问  几十年来 管理Netfilter钩子的主要命令行工具是iptables规则集。

因为调用这些规则所需的语法可能有点神秘 各种用户友好的实现如下UFW并引入了Firewalld作为高级Netfilter解释器
然而UFW和Firewalld主要是为了解决独立计算机所面临的各种问题而设计的 构建全尺寸的网络解决方案通常需要ipta
bles的额外功能 或者自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-data.com 那里存储了许多图像和视频媒体。
除此之外 您还希望允许更新 并在必要时允许包下载 最后 您希望只允许从
本地工作站访问入站SSH 并阻止其他所有人下图说明了这一切将如何运作:

98.png

亭的交通流量由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.