仅允许来自特定IP的Ubuntu Server访问

我如何只允许自己的ip登录我的ubuntu服务器? 昨天有1500个不需要的失败登录尝试。

只允许我自己的IP,可能是最安全的黑客? 我只使用Postfix进行发送,因此不需要允许任何传入连接。

如果您不使用(或不想使用) ufw而需要iptables答案,这里是如何做到这一点的要点。 请注意,您还必须适应IPv4和IPv6。


IPv4的

首先,检查你的iptables规则( iptables -L -n )。 假设默认安装,那么您将没有规则。

iptables -A INPUT -s SOURCEIP/CIDR -p tcp --dport PORTNUM -j ACCEPT是将规则添加到INPUT表末尾的一般语法,具体说明“我想允许源IP地址(和范围) IP,如果提供CIDR后缀 – 没有必要)当请求通过TCP端口PORTNUM时访问我的服务器“。 如果您只想允许一个 IP地址,则省略带有SOURCEIP/CIDR部分。

如果您在INPUT表中有任何规则拒绝访问(最后),您将需要使用iptables -I INPUT RULENUMBER (其中RULENUMBERINPUT表中要插入此规则的行号)。

但是,请确保您还添加以下规则:
iptables -A INPUT -i lo -j ACCEPT – 通过localhost环回接受任何内容(127.0.0.1等)
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT – 接受与已建立的连接相关的流量(确保与服务器和远程客户端通信的工作所需)

完成配置后,您现在需要添加规则以拒绝所有其他连接。 这样的规则就是这样,添加到INPUT表的末尾:
iptables -A INPUT -j REJECT --reject-with icmp-host-unreachable


IPv6的

首先,检查你的ip6tables规则( ip6tables -L -n )。 假设默认安装,那么您将没有规则。

ip6tables -A INPUT -s SOURCEIP/CIDR -p tcp --dport PORTNUM -j ACCEPT是将规则添加到INPUT表末尾的一般语法,具体说明“我想允许源IP地址(和范围) IP,如果提供CIDR后缀 – 没有必要)当请求通过TCP端口PORTNUM时访问我的服务器“。 如果您只想允许一个 IP地址,则省略带有SOURCEIP/CIDR部分。

如果INPUT表中有任何规则拒绝访问(最后),则需要使用ip6tables -I INPUT RULENUMBER (其中RULENUMBERINPUT表中要插入此规则的行号)。

但是,请确保您还添加以下规则:
ip6tables -A INPUT -i lo -j ACCEPT – 接受localhost环回(127.0.0.1等)的任何内容
ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT – 接受与已建立的连接相关的流量(确保与服务器和远程客户端通信的工作所需)

此外,对于IPv6,您需要实际接受几乎所有ICMPv6数据包,因为它比IPv4更需要。 这将实现:
ip6tables -A INPUT -p ipv6-icmp -j ACCPET

完成配置后,您现在需要添加规则以拒绝所有其他连接。 这样的规则就是这样,添加到INPUT表的末尾:
ip6tables -A INPUT -j REJECT --reject-with icmp6-addr-unreachable


使这些规则持久(`iptables`只有解决方案需要这个)

是时候让规则坚持下去了。 让我们安装iptables-persistentapt-get install iptables-persistent

安装程序将询问您是否要保存当前规则。 对IPv4和IPv6提示都说“是”。 我们刚刚“添加”或创建的规则集现在将持续可用。

(如果使用ufw而不是iptables ,则不需要安装此软件包)


虽然ufw会自动管理规则集以确保它的顺序正确,但iptables是进行高级防火墙的“系统管理员”方式。 UFW只是简单的规则和function – 与iptables复杂规则或者使用iptables语法手动添加到ufw的配置文件。

你可以使用ufw

当您启用任何规则的ufw以允许某些流量时,所有流量都处于拒绝状态。

sudo ufw enable

使用此命令,您将启用Ubuntu Firewall

要查看状态使用情况

sudo ufw status

 Status: active To Action From -- ------ ---- 69 ALLOW Anywhere 53 ALLOW Anywhere 22 ALLOW 213.xxx.xxx.xxx 80/tcp ALLOW 194.247.xxx.xxx 21/tcp ALLOW 194.247.xxx.xxx 69 (v6) ALLOW Anywhere (v6) 80 (v6) ALLOW Anywhere (v6) 

此规则接受任何port 69 ,任何port 53 ,ssh从213.xxx.xxx.xxx8021194.247.xxx.xxx …并拒绝任何其他入站流量

在ufw中完成规则的命令是

 sudo ufw [--dry-run] [delete] [insert NUM] allow|deny|reject|limit [in|out on INTERFACE] [log|log-all] [proto protocol] [from ADDRESS [port PORT]][to ADDRESS [port PORT]] 

根据此规则模板,您可以使用此规则allow from xxx.xxx.xxx.xxx port 80上的allow from xxx.xxx.xxx.xxx进行allow from xxx.xxx.xxx.xxx

对于特定的主机

 sudo ufw allow proto tcp from xxx.xxx.xxx.xxx to any port 80 

如果您想允许任何人访问您的Web服务器

 sudo ufw allow proto tcp from any to any port 80 

如果您希望允许从特定网络访问

 sudo ufw allow proto tcp from xxx.xxx.xxx.xxx/yy to any port 80 

哪里

xxx.xxx.xxx.xxx – 代表网络IP

yy – 代表网络掩码