服务器防火墙入门:用 ufw 只放行该开的端口
很多个人服务器出事,不是因为漏洞多高深,而是因为端口开得太随手:数据库直接裸奔公网、测试服务忘了关、面板端口对全世界开放。防火墙的意义不是把服务器藏起来,而是只放行该开的端口,其余一律拒绝。ufw 是 Ubuntu/Debian 上最省事的一层,几条命令就能把暴露面收干净。
一、先想清楚:到底哪些端口必须开
动手之前先列清单。一台典型的个人服务器,真正需要对公网开放的通常只有三个:SSH(登录用)、80 和 443(网站用)。其他像数据库 3306、Redis 6379、各种应用的调试端口,原则上都只监听本机或内网,需要远程访问时走 SSH 隧道,而不是直接放行。
判断方法也很简单:ss -tlnp 看一遍当前监听的端口,逐个问一句“这个端口,需要让全世界连进来吗”。答不上来或者答案是“只是我自己用”,就不开放公网。
二、最重要的顺序:先放行 SSH,再启用防火墙
远程操作防火墙最怕的就是把自己锁在门外。正确顺序是:先 ufw allow 你实际在用的 SSH 端口(改过端口的用改后的端口号),确认规则无误,再 ufw enable 启用。启用之后也别急着断开当前会话,新开一个终端试着登录一次,确认能进,再关掉旧窗口。
万一云厂商有安全组,先确认安全组和主机防火墙两层放行的端口一致,两边有一边没放行都会连不上,排查时两边都要看。
三、默认拒绝,只加白名单
推荐的基线是两条:ufw default deny incoming(入站默认拒绝)、ufw default allow outgoing(出站默认放行)。然后逐个把清单里的端口加回来:
ufw allow 22/tcp 这一类逐条添加,网站再加 80 和 443。规则加完用 ufw status numbered 核对一遍,编号、端口、协议都对得上再算完。UDP 的服务(比如某些代理或游戏服务)要单独写 /udp,TCP 和 UDP 是两套规则,别漏。
四、给 SSH 再加一道限速
SSH 端口必须开,但可以对它限速:ufw limit 22/tcp 的效果是同一 IP 短时间内频繁新建连接会被临时拒绝,能挡掉绝大多数自动化爆破扫描。配合禁用密码登录、只允许密钥(这是另一层配置),SSH 暴露在公网的风险就降到很低了。
如果你的登录来源 IP 相对固定,还可以更严格:ufw allow from 你的IP to any port 22,只放行自己的地址段,其余来源连 SSH 的门都摸不到。家庭宽带 IP 会变的话慎用,或者放行一个稍大的地址段折中。
五、改规则之前,先想好回滚
线上改防火墙的纪律是:任何删除、收紧规则的操作,先确认自己当前的登录路径不受影响。删规则用 ufw delete 编号,编号以 ufw status numbered 显示的为准,删完再核对一次列表。另外,Docker 发布端口会绕过 ufw 的默认链(它走自己的 iptables 规则),容器映射到公网的端口不要以为 ufw 能管住,需要单独留意,这是很多人以为关了、其实还开着的盲区。
小结
防火墙配置的核心就一句话:默认拒绝,按需放行。先列必须开放的清单,先保住 SSH 再启用,规则逐条核对,SSH 再加限速或来源限制,再注意 Docker 这种绕过路径。花二十分钟把这层收拾干净,比事后处理入侵省心得多。
(本文为个人运维实践记录。)
- 点赞
- 收藏
- 关注作者
评论(0)