在Amazon Linux AMI上设置基本的Iptables防火墙
如何在运行于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