仅允许来自特定 IP 的 Ubuntu 服务器访问

bat*_*rsi 6 14.04

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

只允许我自己的 IP,对黑客来说可能是最安全的吗?我仅将 Postfix 用于发送,因此不需要允许任何传入连接。

270*_*974 6

您可以使用 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)
Run Code Online (Sandbox Code Playgroud)

此规则接受任何的port 69,任何对port 53,SSH的213.xxx.xxx.xxx80并且21194.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]]
Run Code Online (Sandbox Code Playgroud)

基于此规则模板,你可以allow from xxx.xxx.xxx.xxxport 80这个规则

对于特定主机

sudo ufw allow proto tcp from xxx.xxx.xxx.xxx to any port 80
Run Code Online (Sandbox Code Playgroud)

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

sudo ufw allow proto tcp from any to any port 80
Run Code Online (Sandbox Code Playgroud)

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

sudo ufw allow proto tcp from xxx.xxx.xxx.xxx/yy to any port 80
Run Code Online (Sandbox Code Playgroud)

在哪里

xxx.xxx.xxx.xxx - 代表网络ip

yy - 代表网络掩码


Tho*_*ard 3

如果您不使用(或不想使用)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地址,则省略带/CIDR的部分SOURCEIP

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

但是,请确保您还添加了如下规则:
iptables -A INPUT -i lo -j ACCEPT - 接受本地主机环回上的任何内容(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地址,则省略带/CIDR的部分SOURCEIP

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

但是,请确保您还添加了如下规则:
ip6tables -A INPUT -i lo -j ACCEPT - 接受本地主机环回上的任何内容(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 只是执行简单的规则和功能 - 复杂的规则和功能您必须使用语法来处理iptables或手动添加到配置文件中。ufwiptables