如何配置 iptables 或 nftables 以允许流量流向我的 Amazon EC2 Linux 实例?
我想配置 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 规则,请完成以下步骤:
-
要列出带有行号的规则,请运行以下命令:
sudo iptables -L --line-numbers
-
要删除规则,请运行以下命令:
sudo iptables -D example_chain example_number
**注意:**将 example_chain 和 example_number 替换为链的名称和规则编号。
-
要保存 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、22 和 80 替换为您的端口号。
要显示当前规则,请运行以下命令:
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
相关内容
- AWS 官方已更新 6 个月前
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 个月前
- AWS 官方已更新 3 个月前