如何在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中设置防火墙()

文章图片
如你所见, 我们有三个链(输入, 前进, 输出)。我们还可以看到列标题, 但它们不是实际规则。这是因为大多数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.实施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中设置防火墙()

文章图片
但是, 上述命令有问题。它实际上不允许数据包。你能猜出这是什么?
提示:-它与访问规则的方式有关。
请记住, 正如我们前面所讨论的, 你在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中设置防火墙()

文章图片
因此, 首先检查来自192.168.1.3的任何数据包是否去往端口22(如果不是)
通过链中的下一条规则运行。否则, 它可以通过防火墙。
现在, 你已经了解了如何阻止和接受传入流量, 让我们看看如何删除规则:-
3.从iptable删除规则:
句法:-
sudo iptables -D chain_name rule_number

例:-
如果我们要删除接受端口22流量并在上一节中添加的规则, 则:
sudo iptables -D INPUT 1

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

输出如下
:-
如何在Linux中设置防火墙()

文章图片
4.保存你的配置:
如果要在不是服务器的个人计算机上实现此部分, 则不需要此部分, 但是如果
你正在服务器上实施防火墙, 那么很有可能服务器会损坏并且
你可能会丢失所有数据。因此, 最好保存你的配置。
有很多方法可以做到这一点, 但是我发现最简单的方法是iptables-永久包。你可以从Ubuntu的默认存储库下载该软件包:
sudo apt-get updatesudo 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

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

    推荐阅读