使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

如何配置 iptables 或 nftables 以允许流量流向我的 Amazon EC2 Linux 实例?

3 分钟阅读
0

我想配置 iptables 或 nftables 以允许流量流向在 Amazon Elastic Compute Cloud(Amazon EC2)Linux 实例上运行的我的应用程序或实例。

简短描述

使用 iptables 和 nftables 管理 Linux 系统上的网络流量,包括 Amazon EC2 Linux 实例。为新部署选择 nftables,在传统环境中使用 iptables。有关 iptables 的更多信息,请参阅 Ubuntu 网站上的 IptablesHowTo

解决方法

配置 iptables

要安装和激活 iptables 服务,请运行以下命令:

sudo yum install iptables-services -y
sudo systemctl enable iptables
sudo systemctl start iptables

**注意:**如果您使用预先配置的规则安装了 iptables,则清除这些规则并配置新规则。要列出规则,请运行以下命令:

sudo iptables -L

要刷新所有规则,请运行以下命令:

sudo iptables -F

要打开特定端口,请运行以下命令:

sudo iptables -A INPUT -p tcp --dport example_port -j ACCEPT

**注意:**将 example_port 替换为您的端口号。

要允许特定端口上的入站流量到达特定 IP 地址或子网,请运行以下命令:

sudo iptables -A INPUT -p tcp -s your_server_ip --dport example_port -j ACCEPT

**注意:**使用您的 IP 地址或子网替换 your_server_ip,将 example_port 替换为您的端口。

根据您的用例更改端口和协议。以下是常用的端口和协议:

  • TCP 端口 80 -- HTTP 服务器
  • TCP 端口 443 -- HTTPS 服务器
  • TCP 端口 25 -- 邮件服务器
  • TCP 端口 22 -- OpenSSH(远程)安全 Shell 服务器
  • TCP 端口 110 -- POP3(邮局协议 v3)服务器
  • TCP 端口 143 -- 互联网消息访问协议(IMAP)-- 电子邮件消息管理
  • TCP/UDP 端口 53 -- 域名系统(DNS)

要列出 iptables 规则,请运行以下命令:

sudo iptables -L

要按链和编号删除 iptables 规则,请完成以下步骤:

  1. 要列出带有行号的规则,请运行以下命令:

    sudo iptables -L --line-numbers
  2. 要删除规则,请运行以下命令:

    sudo iptables -D example_chain example_number

    **注意:**将 example_chainexample_number 替换为链的名称和规则编号。

  3. 要保存 iptables,请运行以下命令:

    sudo service iptables save

这组规则会自动保存到 /etc/sysconfig/iptables 中,并在每次启动时恢复。

配置 nftables

nft 命令不会自动创建表和链。必须手动创建表和链。有关 nftables 的更多信息,请参阅 Red Hat Enterprise Linux(RHEL)网站上的 Getting started with nftables

要安装和激活 nftables,请运行以下命令:

sudo yum install nftables -y
sudo systemctl enable nftables
sudo systemctl start nftables

使用 nft 命令管理表、链或规则

**先决条件:**要执行以下任务,您必须拥有 sudo 权限或是根用户。

必须为每个表分配一个地址系列。地址系列定义了该表处理的数据包类型。

以下是地址系列及其匹配的数据包:

  • ip: 仅匹配 IPv4 数据包。
    **注意:**如果您未指定地址系列,则默认为 ip。
  • ip6: 仅匹配 IPv6 数据包。
  • inet: 匹配 IPv4 和 IPv6 数据包。
  • arp: 匹配 IPv4 地址解析协议(ARP)数据包。
  • bridge: 匹配通过网桥设备的数据包。
  • netdev: 匹配来自入口的数据包。

要创建一个具有 inet 地址系列的表,以便该表可以处理 IPv4 和 IPv6 数据包,请先创建一个名为 test_rules 的表。然后,运行以下命令:

sudo nft add table inet test_rules

要添加一个名为 INPUT 的基础链来处理传入网络流量,请运行以下命令:

sudo nft add chain inet test_rules INPUT '{ type filter hook input priority 0 ; policy accept ; }'

要向 INPUT 链添加规则以允许 TCP 端口 443、22 和 80,请按照您希望 nft 添加规则的顺序运行以下命令:

sudo nft add rule inet test_rules INPUT tcp dport 443 accept
sudo nft add rule inet test_rules INPUT tcp dport 22 accept
sudo nft add rule inet test_rules INPUT tcp dport 80 accept

**注意:**将 TCP 端口 443、2280 替换为您的端口号。

要显示当前规则,请运行以下命令:

sudo nft -a list table inet test_rules

要在句柄 2 的现有规则之前插入规则,请运行以下命令:

sudo nft insert rule inet test_rules INPUT position 2 tcp dport 8080 accept

**注意:**将 2 替换为您的位置序号,将 8080 替换为您的端口号。

要在句柄 2 的现有规则之后追加规则,请运行以下命令:

sudo nft add rule inet test_rules INPUT position 2 tcp dport 621 accept

**注意:**将 2 替换为您的位置序号,将 621 替换为您的端口号。

要删除句柄 3 的规则,请运行以下命令:

sudo nft delete rule inet test_rules INPUT handle 3

**注意:**将 3 替换为您的位置序号。

要移除所有规则,请运行以下命令:

sudo nft flush chain inet test_rules INPUT

要保存您的规则集,请运行以下命令:

sudo bash -c "nft list ruleset > /etc/sysconfig/nftables.conf"

相关信息

RHEL 网站上的 Comparison of common iptables and nftables commands

排查 Amazon EC2 Linux 实例的连接问题

AWS 官方
AWS 官方已更新 2 个月前