在Amazon Linux AMI上设置基本的Iptables防火墙

时间:2020-01-09 10:43:37  来源:igfitidea点击:

如何在运行于EC2或者Lightsail实例的Amazon Linux AMI上设置基本的iptables防火墙?

AWS(Amazon Web Services)拥有自己的Linux发行版,称为Amazon Linux AMI。
它主要是与CentOS Linux二进制兼容的,所有必需的软件包都更新为最新版本。
本教程说明如何在Amazon Linux上设置基于iptables的基本防火墙。

如何在Amazon Linux AMI上设置基本的Iptables防火墙

在Amazon Linux AMI上设置基本防火墙的过程如下:

  • 使用ssh命令登录到您的Lightsail/EC2实例。
  • 执行sudo -i命令切换到root用户。
  • 创建一个名为/etc/sysconfig/iptables的文件
  • 根据您的需要打开或者关闭端口和其他选项
  • 在启动时启用iptables,执行:sudo chkconfig iptables on
  • 启动iptables服务,运行:sudo service iptables start

我真的需要Amazon Linux AMI支持的EC2和Lightsail实例的基于iptables的防火墙设置吗?

"简短答案"取决于您的需求。

"长答案":EC2和Lightsail VM都带有基于云的防火墙。
创建AWS Lightsail实例/VM时,默认情况下会打开某些网络端口。
打开端口后,您的实例可以接受公共网络连接。
例如,您可以打开端口22或者关闭端口22,但不能指定源IP地址来控制访问ssh端口22或者任何其他端口。
但是,EC2防火墙允许我们为流量设置源或者目的地。
这是Lightsail实例防火墙设置的示例:您可以在实例管理页面的"网络"选项卡上更改Lightsail实例的网络端口设置。

如您所见,防火墙很小,并且没有提供为Lightsail实例设置源IP地址或者目标IP地址的选项。
因此,在Amazon Linux AMI上设置基本iptables是一个好主意。

示例/etc/sysconfig/iptables

执行以下命令:

sudo vi /etc/sysconfig/iptables

追加以下内容:

*filter
 
# Deny all inbound traffic
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
 
# Accept all outbound traffic
:OUTPUT ACCEPT [0:0]
 
# Accept already connected sessions
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
# Accept all loopback 
-A INPUT -i lo -j ACCEPT
 
# Open https/http port from anywhere
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
 
# Accept ssh port from anywhere
# -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
 
# Accept ssh port from only your static IP address such as 1.2.3.4
-A INPUT -m state --state NEW -m tcp -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT
# Multiple IPs are also allowed 
-A INPUT -m state --state NEW -m tcp -p tcp -s 192.53.1.2,93.1.2.3 --dport 22 -j ACCEPT
 
# Deny from specific IP address 
#-A INPUT -m state --state NEW -s 1.2.3.4 -j DROP
 
COMMIT

启用iptables服务

运行以下chkconfig命令:

sudo chkconfig iptables on

启动iptables服务

执行以下服务命令以在Amazon Linux AMI上启动iptables服务:

sudo service iptables start

列出Amazon Linux AMI上的iptables规则

sudo iptables -S
sudo iptables --list
sudo iptables -L
sudo iptables -L -n -v
sudo iptables -L -n -v --line-numbers
sudo iptables -S TABLE_NAME
sudo iptables --table NameHere --list
sudo iptables -t NameHere -L -n -v --line-numbers

关于Amazon Linux AMI的IPv6防火墙的说明

请注意,我们了解了IPv4安全性。
在Amazon Linux AMI中,使用名为/etc/sysconfig/ip6tables的文件与IPv4分开维护IPv6安全性:

sudo vi /etc/sysconfig/ip6tables

追加以下配置:

*filter
 
# Set default chain policies
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:100]
 
# Accepts ongoing traffic for any existing connections
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 
# Accept all ICMP packets
-A INPUT -p ipv6-icmp -j ACCEPT
 
# Accept all traffic from/to loopback interface
-A INPUT -i lo -j ACCEPT
 
# Accept DHCPv6 traffic
-A INPUT -d fe80::/64 -p udp -m udp --dport 546 -m state --state NEW -j ACCEPT
 
# Custom rules go here
# Open port 80, 443 and 22 for IPv6
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
 
# Drop everything else 
# We reject all traffic that didn't match a rule, using "port unreachable"
-A INPUT -j REJECT --reject-with icmp6-adm-prohibited
-A FORWARD -j REJECT --reject-with icmp6-adm-prohibited
 
COMMIT

保存并关闭vim中的文件。
打开ip6tables服务并启动它:

sudo chkconfig ip6tables on
sudo service ip6tables start

列表规则:

sudo ip6tables -L -n -v --line-numbers
sudo ip6tables -L -n -v
sudo ip6tables -S