Sur*_*rti -1 ssh iptables firewall
我正在使用 Ubuntu Server (Amazon EC2) 并使用 putty 与 ssh 连接 我正在设置 iptables 以阻止除我的 IP 地址之外的所有传入和传出连接,我在 putty 中尝试了以下命令:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
Run Code Online (Sandbox Code Playgroud)
现在,我无法从任何地方连接。请帮助我如何恢复连接。
根据评论,我们确定这是在 Amazon AWS EC2 实例上,并且您已将自己锁定在远程 SSH 访问之外。通过使用 Amazon EC2,您会在这里感到有点头疼。没有真正的串行/控制台模式可供访问,也没有任何人可以“修复”它,并且通过像您一样禁用所有连接,您已经将自己完全锁定了。
除了销毁 EC2 实例并重新开始之外,您实际上没有太多解决方案。
一旦你重新开始,你有两种选择如何对你的系统进行防火墙:
请改用 EC2 安全组防火墙。这配置起来更容易一些,而且不需要任何额外的配置就已经存在了——它是 EC2 基础设施的一部分,您必须允许端口实际到达EC2实例。您也不会那么容易将自己锁定在外面(尽管您可能会被锁定,但修复它很简单,因为您只需在 Amazon EC2 设置面板的规则集中再次允许端口 22,前提是您不搞乱)iptables也与)。
使用合适的 iptables规则集,并且不要从 EC2 上的 PuTTY 中注销,除非您完全确定所实施的规则不会完全破坏您对系统的访问。
现在,我在#2 中提到了“体面的规则集”。下面是我的 EC2 指南iptables,前提是您在执行命令之前实际阅读了注释(例如,除非确实需要,否则不要弄乱 OUTPUT 或 FORWARD)。
iptables根据您的要求设置工作规则:
您不需要键入以 a#开头的行,这些只是我的注释,解释了每个命令的作用。另外,请替换YOUR.IP.ADDRESS.HERE为您的实际 IP 地址,如下所示。
入站过滤:
# Permit localhost to communicate with itself.
iptables -A INPUT -i lo -j ACCEPT
# Permit already established connection traffic and related traffic
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Permit new SSH connections into the system from trusted IP address
iptables -A INPUT -p tcp --dport 22 -s YOUR.IP.ADDRESS.HERE -m conntrack --ctstate NEW -j ACCEPT
# Permit all other traffic from trusted IP Address
iptables -A INPUT -s YOUR.IP.ADDRESS.HERE -j ACCEPT
# Drop all other traffic
iptables -A INPUT -j DROP
Run Code Online (Sandbox Code Playgroud)
出站过滤:
警告:这将阻止对更新服务器、时间同步服务器等的访问,因此仅在绝对需要时才过滤出站,否则根本不要执行此部分
# Allow Localhost to itself
iptables -A OUTPUT -i lo -j ACCEPT
# Allow RELATED,ESTABLISHED state traffic (related to Inbound for example)
iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Allow all other traffic to trusted IP address
iptables -A OUTPUT -d YOUR.IP.ADDRESS.HERE -j ACCEPT
# Drop all other unpermitted outbound traffic.
iptables -A OUTPUT -j DROP
Run Code Online (Sandbox Code Playgroud)
前向过滤:
注意:除非您确实需要限制诸如通过隧道或 VPN 将流量转发到互联网到您的服务器作为“网络代理”之类的事情,否则您真的不需要弄乱 FORWARD 规则集,所以我建议不这样做是因为没有其他东西真正会使用这个函数或永远落在这个规则集表中
# Drop FORWARD target traffic, we don't need it
iptables -A FORWARD -j DROP
Run Code Online (Sandbox Code Playgroud)
请注意,我坚信不要弄乱服务器上的默认策略,因为它有一些......邪恶......如果做得不正确,我通常只过滤入口流量和FORWARD流量,并允许传出流量,因为时间同步服务器、Ubuntu 更新服务器并不总是具有一定数量的 IP、我需要的其他相关进程(例如 SSH 输入/输出作为“相关”流量的一部分)等。
我也坚信使用REJECT而不是DROP,但这只是为了让您更容易知道您的服务器已启动并拒绝连接。为此,我将替换为-j DROP或-j REJECT --reject-with icmp-host-unreachable类似的。
请注意,如果您的系统启用了 IPv6,则也需要对 IPv6 执行此操作,但使用ip6tables, 并将 ICMP 相关消息指示符替换为 ICMP6 等效项。
| 归档时间: |
|
| 查看次数: |
9561 次 |
| 最近记录: |