SSH 连接远端 Ubuntu 服务器设置防火墙,实现只允许白名单访问
记录时间:2021/6/25
环境情况
- 服务器(Ubuntu server 版 16.04.7 LTS,安装openssh,举例 IP:10.110.111.4)
- 客户端(Windows10,ssh工具使用 MobaXterm,举例 IP:10.72.10.10)
- 但是,服务器在远端,无法直接操作,只能从客户端通过 SSH 连到服务器上操作
需求
- 服务器(10.110.111.4)设置防火墙,禁止所有外部访问,只允许白名单中的 IP 访问,例如 10.110.111.10
- 服务器禁止其他主机 ping
实现
使用 Ubuntu 中的防火墙工具 UFW 实现以上需求。
UFW 为简化 iptables 防火墙配置而开发,ufw 提供了一种用户友好的方式来创建基于 IPv4 或 IPv6 的基于主机的防火墙。默认情况下,UFW 被禁用。
需求1-只允许白名单访问
- 启用 ufw
ufw enable
- 默认拒绝所有外部访问
ufw default deny
- 添加 IP 白名单
ufw allow from 10.110.111.10 ufw allow from 10.72.10.10
- 重新加载
ufw reload
完成以上设置后,只允许 10.110.111.10 和 10.72.10.10 这两个 IP 访问服务器。其他 IP 无法访问服务器,但是可以 ping 通。
注意:
通常会把客户端 IP 也加到白名单,否则,结束 SSH 会话后,客户端无法再通过 SSH 与服务器建立会话,无法再继续远程对服务器进行操作
需求2-设置服务器禁止 PING
默认情况,ufw 允许 ping 请求。想要禁用,可以修改 /etc/ufw/before.rules 文件。由于 ping 命令使用 icmp 协议,可以移除或注释下面的行
# ok icmp codes
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
或者将 “ACCEPT” 改成 “DROP”
# ok icmp codes
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j DROP
-A ufw-before-input -p icmp --icmp-type source-quench -j DROP
-A ufw-before-input -p icmp --icmp-type time-exceeded -j DROP
-A ufw-before-input -p icmp --icmp-type parameter-problem -j DROP
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP