在Ubuntu VPS上安装使用Iptables Linux防火墙教程

2020年02月28日14:30:45

本文将向你介绍如何在Ubuntu系统上安装及使用iptables。通过了解此Linux防火墙工具,你可以使用命令行界面保护Linux VPS。

什么是Iptables,它如何工作?

概括来讲,iptables是Linux的防火墙程序。它将使用表监视来往服务器的流量。这些表包含规则集,称为链,这将过滤传入和传出数据分组。

当数据包与规则匹配时,将为其指定目标,该目标可以是另一条链或以下特殊值之一:

  • ACCEPT –将允许数据包通过。
  • DROP –不会让数据包通过。
  • RETURN –阻止数据包遍历链,并告诉它返回上一个链。

在此iptables教程中,我们将使用默认表之一,称为filter。它由三个链组成:

  • INPUT –控制进入服务器的数据包。
  • FORWARD –过滤将转发到其他地方的传入数据包。
  • OUTPUT –过滤从服务器传出的数据包。

在开始本指南之前,请确保你对在Ubuntu 16.04或更高版本上运行的计算机具有SSH根目录或sudo访问权限。你可以通过PuTTY(Windows)或终端外壳(Linux,macOS)建立连接。

iptables规则仅适用于ipv4。如果要为ipv6协议设置防火墙,则需要改用ip6tables。

如何安装和使用Iptables Linux防火墙

我们将把这个iptables教程分为三个步骤。首先,你将学习如何在Ubuntu上安装该工具。其次,我们将向你展示如何定义规则。最后,我们将指导你对iptables进行永久更改。

第1步-安装iptables

iptables预装在大多数Linux发行版中。但是,如果默认情况下在Ubuntu / Debian系统中没有它,请按照以下步骤操作:

  1. 通过SSH连接到服务器。如果你不知道,可以阅读我们的前文《Linux VPS远程终端工具:PuTTY的使用教程》。
  2. 一一执行以下命令:
    sudo apt-get update
    sudo apt-get install iptables
  3. 通过运行以下命令检查当前iptables配置的状态:
    sudo iptables -L -v

    在这里,-L选项用于列出所有规则,而-v 用于以更详细的格式显示信息。下面是示例输出:

    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target     prot opt in out   source destination
    
    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target     prot opt in out   source destination
    
    Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target     prot opt in out   source destination
    sudo iptables -L -v

现在,你将安装Linux防火墙。此时,你会注意到所有链都设置为ACCEPT并且没有规则。这是不安全的,因为任何数据包都可以通过而无需过滤。

不用担心 我们将在iptables教程的下一步告诉你如何定义规则。

第2步-定义链规则

定义规则意味着将其附加到链中。为此,你需要在iptables命令之后插入-A选项(Append),如下所示:

sudo iptables -A

它将警告iptables你正在向链中添加新规则。然后,你可以将该命令与其他选项结合使用,例如:

  • -i(接口)—你要过滤其流量的网络接口,例如eth0,lo,ppp0等。
  • -p(protocol)-进行过滤过程的网络协议。它可以是tcpudpudpliteicmpsctpicmpv6等。或者,你可以键入all选择每个协议。
  • -s(source)-流量来自的地址。你可以添加主机名或IP地址。
  • –dport(目标端口)—协议的目标端口号,例如22(SSH)443(https)等。
  • -j(目标)—目标名称(ACCEPTDROPRETURN)。每次制定新规则时都需要插入此代码。

如果要使用所有这些,则必须按以下顺序编写命令:

sudo iptables -A <chain> -i <interface> -p <protocol (tcp/udp) > -s <source> --dport <port no.>  -j <target>

了解基本语法后,就可以开始配置防火墙,以为服务器提供更高的安全性。对于此iptables教程,我们将使用INPUT链作为示例。

在Localhost上启用流量

要允许本地主机上的流量,请键入以下命令:

sudo iptables -A INPUT -i lo -j ACCEPT

对于此iptables教程,我们使用loLoopback接口。它用于本地主机上的所有通信。上面的命令将确保同一台计算机上的数据库和Web应用程序之间的连接正常工作。

在HTTP,SSH和SSL端口上启用连接

接下来,我们希望http(端口80)https(端口443)ssh(端口22)连接能够照常工作。为此,我们需要指定协议(-p)和相应的端口(-dport)。你可以一一执行以下命令:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

现在该检查规则是否已添加到iptables中了:

sudo iptables -L -v

它应返回以下结果,这意味着将接受来自指定端口的所有TCP协议连接:

来自指定端口的所有TCP协议连接

来自指定端口的所有TCP协议连接

基于源过滤报文

iptables允许你根据IP地址或IP地址范围过滤数据包。你需要在-s选项后指定它。例如,要接受来自192.168.1.3的数据包,命令将是:

sudo iptables -A INPUT -s 192.168.1.3 -j ACCEPT

你还可以通过将ACCEPT目标替换为DROP来拒绝来自特定IP地址的数据包。

sudo iptables -A INPUT -s 192.168.1.3 -j DROP

如果要丢弃来自某个IP地址范围的数据包,则必须使用-m选项和iprange模块。然后,使用–src-range指定IP地址范围。请记住,连字符应将IP地址范围分隔成空格,如下所示:

sudo iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP
丢弃所有其他流量

定义–dport规则后,对所有其他流量使用DROP目标至关重要。这将防止未经授权的连接通过其他打开的端口访问服务器。为此,只需键入:

sudo iptables -A INPUT -j DROP

现在,指定端口外部的连接将被删除。

删除规则

如果要删除所有规则并以干净的开头开始,则可以使用-F选项(flush)

sudo iptables -F

该命令将删除所有当前规则。但是,要删除特定规则,必须使用-D选项。首先,你需要通过输入以下命令来查看所有可用规则:

sudo iptables -L --line-numbers

你将获得带有数字的规则列表:

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all -- 192.168.0.4          anywhere
2    ACCEPT     tcp -- anywhere             anywhere tcp dpt:https
3    ACCEPT     tcp -- anywhere             anywhere tcp dpt:http
4    ACCEPT     tcp -- anywhere             anywhere tcp dpt:ssh

要删除规则,请从列表中插入相应的链和编号。假设对于此iptables教程,我们要摆脱INPUT链的第三条规则。该命令应为:

sudo iptables -D INPUT 3
步骤3 –永久保存变更

我们创建的iptables规则保存在内存中。这意味着我们必须在重新启动时重新定义它们。要在重新启动服务器后使这些更改持久化,可以使用以下命令:

sudo /sbin/iptables-save

它将当前规则保存在系统配置文件中,该文件将在每次服务器重新引导时用于重新配置表。

请注意,每次更改规则时,都应始终运行此命令。例如,如果要禁用iptables,则需要执行以下两行:

sudo iptables -F
sudo /sbin/iptables-save

你将看到以下结果:

结论

iptables是功能强大的防火墙程序,你可以根据自己的喜好定义各种规则,保护Linux服务器或VPS。

在此iptables教程中,你学习了如何安装和使用该工具。通过本教程的学习,你应该也可以管理规则以过滤传入和传出数据包了。

相关文章推荐