个性化阅读
专注于IT技术分析

如何在Linux中设置防火墙?

什么是防火墙?

防火墙是一种网络安全系统, 可根据一组预定规则过滤和控制流量。这是设备和互联网之间的中介系统。

注意:-如果你已经了解Linux中防火墙的工作原理, 并且只想了解命令, 那么请结束本教程。

Linux防火墙的工作方式:

大多数Linux发行版随附默认防火墙工具, 可用于配置它们。我们将使用Linux中提供的默认工具” IPTables”来建立防火墙。 iptables用于在Linux内核中设置, 维护和检查IPv4和IPv6数据包过滤器规则的表。

注意:-下面的所有命令都需要sudo权限。

链条:-

链是为特定任务定义的一组规则。

我们有三个链(规则集), 用于处理流量:-

  1. 输入链
  2. 输出链
  3. 前进链

1.输入链

从Internet(网络)到本地计算机的任何流量都必须经过输入链。这意味着他们必须遵循输入链中已设置的所有规则。

2.输出链

从本地计算机到互联网的任何流量都需要经过输出链。

3.正向链

来自外部网络并到达另一个网络的任何流量都需要经过前向链。当连接两台或更多台计算机并且我们要在它们之间发送数据时使用。

不同的政策:

iptables可以对流量执行三种操作

  1. 接受
  2. 下降
  3. 拒绝

1.接受

当流量通过其指定链中的规则时, 则iptable接受流量。

这意味着它打开了大门, 并允许该人进入萨诺斯王国。

2.删除

当流量无法通过其指定链中的规则时, iptable会阻止该流量。

这意味着防火墙已关闭。

3.拒绝

这种类型的操作类似于丢弃操作, 但是它向流量的发送方发送一条消息, 指出数据传输失败。

通常, 当你希望另一端知道端口不可达时, 请使用REJECT。对于与你不希望别人看到的主机建立连接, 请使用DROP。

注意:-

你需要在这里记住一个简单的规则:

你在iptables中设置的规则是从最上面的规则到最下面的规则进行检查的。每当数据包通过任何最高规则时, 都允许其通过防火墙。不检查较低的规则。因此, 在设置规则时要小心。

1.列出iptable的当前规则:

列出当前iptables的规则:

sudo iptables -L

输出如下

将会:-

如何在Linux中设置防火墙?1

如你所见, 我们有三个链(输入, 前进, 输出)。我们还可以看到列标题, 但它们不是实际规则。这是因为大多数Linux都没有预定义的规则。

让我们看看每列的含义。

目标:-

这定义了需要对数据包执行哪些动作(ACCEPT, DROP等)。

Prot:-

这定义了数据包的协议(TCP, IP)。

资源:-

这告诉了数据包的源地址。

目的地:-

这定义了数据包的目的地址

2.清除规则:

如果你想清除/清除所有现有规则。运行以下命令:-

sudo iptables -F

这将重置iptables。

3.更改链的默认策略:

sudo iptables -P Chain_name Action_to_be_taken

如上图所示, 每个链的默认策略是ACCEPT。

例如:

如果看到转发链, 则会看到” Chain FORWARD(接受策略)”。这意味着你的计算机允许将任何流量转发到另一台计算机。

为了将转发策略更改为丢弃:-

sudo iptables -P FORWARD DROP

上面的命令将停止所有通过系统转发的流量。这意味着没有其他系统可以作为中介来传递数据。

1.实施DROP规则:

现在, 我们将开始构建防火墙策略。首先, 我们将在输入链上进行工作, 因为输入链将通过该输入链发送。

句法:-

sudo iptables -A/-I chain_name -s source_ip -j action_to_take

我们将采取例子了解主题。

假设我们要阻止来自IP地址192.168.1.3的流量。可以使用以下命令:

sudo iptables -A INPUT -s 192.168.1.3 -j DROP

这可能看起来很复杂, 但是当我们仔细研究这些组件时, 大多数都会有意义:

-A输入:-

标志-A用于将规则附加到链的末尾。命令的这一部分告诉iptable, 我们想在INPUT链的末尾添加一条规则。

-我输入:-

在此标志中, 规则将添加到链的顶部。

-s 192.168.1.3:-

标志-s用于指定数据包的来源。这告诉iptable查找来自源192.168.1.3的数据包

-j DROP

这指定iptable应该如何处理数据包。

简而言之, 上面的命令向INPUT链添加了一条规则, 该规则说, 如果到达源地址为192.168.1.3的任何数据包到达, 然后丢弃该数据包, 则意味着该数据包不允许到达计算机。

执行上述命令后, 你可以使用以下命令查看更改:

sudo iptables -L

的输出如下将会:-

如何在Linux中设置防火墙?2

2.实施ACCEPT规则:

如果要将规则添加到网络的特定端口, 则可以使用以下命令。

句法:-

sudo iptables -A/-I chain_name -s source_ip -p protocol_name --dport port_number -j Action_to_take

-p协议名称:-

此选项用于匹配遵循协议protocol_name的数据包。

-dport端口号:

仅当你提供-p protocol_name选项时, 此选项才可用。它指定查找要发送到端口” port_number”的数据包。

例:-

假设我们要保持在上述情况下阻止的192.168.1.3网络中的SSH端口保持开放状态(在本指南中, 我们假定默认的SSH端口为22)。那就是我们只希望允许那些来自192.168.1.3的数据包并想要进入端口22。

我们做什么:-

让我们尝试以下命令:

sudo iptables -A INPUT -s 192.168.1.3 -p tcp --dport 22 -j ACCEPT

上面的命令说查找来自IP地址192.168.1.3, 具有TCP协议并且想要在我的计算机的端口22传递内容的数据包。如果找到这些数据包, 则接受它们。

输出如下

该命令是:

如何在Linux中设置防火墙?3

但是, 上述命令有问题。它实际上不允许数据包。你能猜出这是什么?

提示:-它与访问规则的方式有关。

请记住, 正如我们前面所讨论的, 你在iptables中设置的规则是从上到下检查的。每当将数据包处理为最高规则之一时, 就不会使用较低的规则对其进行检查。

好的!答案是:-

在我们的例子中, 使用最高规则检查了数据包, 该规则说iptable必须丢弃任何来自192.168.1.3的数据包。因此, 一旦通过此规则访问了数据包, 它就不会进入允许数据包到达端口22的下一个规则。因此, 它失败了。

该怎么办?

最简单的答案是, 将规则添加到链的顶部。你需要做的就是将-A选项更改为-I选项。

(在我们的场景中, 我们首先删除上一节中添加的规则[请参阅下一节], 然后再次添加以下规则)

这样做的命令是:

sudo iptables -I INPUT -s 192.168.1.3 -p tcp --dport 22 -j ACCEPT

现在, 使用-L命令检查iptable配置。输出将是:-

如何在Linux中设置防火墙?4

因此, 首先检查来自192.168.1.3的任何数据包是否去往端口22(如果不是)

通过链中的下一条规则运行。否则, 它可以通过防火墙。

现在, 你已经了解了如何阻止和接受传入流量, 让我们看看如何删除规则:-

3.从iptable删除规则:

句法:-

sudo iptables -D chain_name rule_number

例:-

如果我们要删除接受端口22流量并在上一节中添加的规则, 则:

sudo iptables -D INPUT 1

请记住, 规则编号从1开始

输出如下

:-

如何在Linux中设置防火墙?5

4.保存你的配置:

如果要在不是服务器的个人计算机上实现此部分, 则不需要此部分, 但是如果

你正在服务器上实施防火墙, 那么很有可能服务器会损坏并且

你可能会丢失所有数据。因此, 最好保存你的配置。

有很多方法可以做到这一点, 但是我发现最简单的方法是iptables-永久包。你可以从Ubuntu的默认存储库下载该软件包:

sudo apt-get update
sudo apt-get install iptables-persistent

安装完成后, 你可以使用以下命令保存配置:

sudo invoke-rc.d iptables-persistent save

好了, 这就是本教程的结尾。

让我们简单介绍一下到目前为止所学到的所有命令:

1.列出iptables的当前规则:

sudo iptables -L

2.更改默认策略:

sudo iptables -P Chain_name Action_to_be_taken

例:-

sudo iptables -P FORWARD DROP

3.清除/刷新所有规则

sudo iptables -F

4.要将规则附加到链的末尾:

sudo iptables -A

5.要在链的开头附加一条规则:

sudo iptables -I

6.要实施接受规则:

sudo iptables -A/-I chain_name -s source_ip -j action_to_take

例:-

iptables -A INPUT -s 192.168.1.3 -j ACCEPT

7.实施DROP规则:

sudo iptables -A/-I chain_name -s source_ip -j action_to_take

例:-

iptables -A INPUT -s 192.168.1.3 -j DROP

8.在特定端口/协议上实施规则:

sudo iptables -A/-I chain_name -s source_ip -p protocol_name --dport port_number -j Action_to_take

例:-

sudo iptables -I INPUT -s 192.168.1.3 -p tcp --dport 22 -j ACCEPT

9.删除规则:

sudo iptables -D chain_name rule_number

例:-

sudo iptables -D INPUT 1

10.保存配置:

sudo invoke-rc.d iptables-persistent save

到此结束了。我们已经看到了在本地计算机上实施防火墙所需的所有必要命令。我们可以使防火墙执行多种其他操作, 但是不可能在一篇文章中涵盖所有这些内容。因此, 我将再写几篇文章解释所有命令。在此之前, 请继续尝试!!


赞(0) 打赏
未经允许不得转载:srcmini » 如何在Linux中设置防火墙?
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏