Debian服务器上线后默认状态并不等于裸奔,但离能抗住基础网络攻击确实还有一段距离。多数扫描器盯上的不是你的业务逻辑,而是那些没改的默认端口、没做限制的服务和完全暴露的登录入口。极简防护的核心思路不是堆砌安全软件,而是把攻击面收到最小,让自动化攻击在第一轮探测时就失效。
先处理SSH登录入口SSH是Linux服务器被暴力破解的重灾区。默认22端口在公网上每时每刻都在被扫描,攻击者不需要知道你的域名,只要扫到IP就会尝试root加常见密码组合。第一步不是改端口,而是先禁用root远程登录和密码登录。编辑/etc/ssh/sshd_config,把PermitRootLogin设为no,PasswordAuthentication设为no,同时确保PubkeyAuthentication为yes。改完后执行systemctl restart sshd使配置生效。密钥登录的密钥对要提前生成好并测试通过,否则断开当前会话后可能把自己锁在服务器外面。
改端口是有效的降噪手段,但不是安全本身。把Port 22改成高位端口比如2222或更高,能挡掉大部分无差别扫描。不过要注意,如果服务器上有严格的出站防火墙规则,改端口后要同步放行。改端口配合密钥登录,基本能让暴力破解类攻击失效。如果一定要保留密码登录,至少安装fail2ban,对多次失败的IP自动封禁。但fail2ban是事后补救,不如直接关掉密码登录来得彻底。
用UFW建立最小化防火墙策略Debian自带的iptables规则管理起来比较繁琐,UFW是更简单的选择。安装后先设置默认策略:拒绝所有入站,允许所有出站。然后只放行你实际需要的端口。比如SSH端口、Web服务的80和443,如果不用FTP、不用数据库远程连接,就一个端口都不要多开。执行ufw default deny incoming,ufw default allow outgoing,再ufw allow 2222/tcp,ufw allow 80/tcp,ufw allow 443/tcp,最后ufw enable激活。这样即使某个服务意外启动并监听端口,外部也无法直接访问。
UFW还有一个容易被忽略的用法是限制特定端口的连接速率。ufw limit 2222/tcp会默认限制该端口每30秒最多6个新连接,对SSH这类低频管理端口非常合适。这比fail2ban更轻量,直接在防火墙层面就抑制了高频连接尝试。对于Web端口不要用limit,否则正常用户访问可能被误伤。
关闭不必要的网络服务Debian最小化安装时服务不多,但有些默认组件仍会监听网络。用ss -tulnp查看当前所有监听中的端口和对应进程。常见的多余监听包括:Exim4邮件服务默认监听25端口,如果服务器不发邮件就果断卸载或禁用;Avahi-daemon用于局域网服务发现,服务器上完全用不到;rpcbind通常伴随NFS出现,不用NFS就停掉。执行systemctl disable --now exim4 avahi-daemon rpcbind,具体服务名以ss命令输出为准。
数据库服务比如MySQL或PostgreSQL如果只供本机应用使用,要把监听地址绑定到127.0.0.1而不是0.0.0.0。在MySQL配置中设置bind-address = 127.0.0.1,PostgreSQL则在postgresql.conf中设置listen_addresses = 'localhost'。这样即使数据库账号密码泄露,外部也无法直接连接。Redis同理,默认不设密码且监听所有接口,必须改bind和requirepass。
内核参数加固网络层Debian默认的内核网络参数偏保守,可以通过sysctl调整来抵御常见的网络层攻击。在/etc/sysctl.d/99-security.conf中写入几项关键配置。net.ipv4.tcp_syncookies = 1开启SYN Cookie防护,抵御SYN Flood。net.ipv4.conf.all.rp_filter = 1开启反向路径过滤,防止IP欺骗。net.ipv4.conf.all.accept_redirects = 0和net.ipv4.conf.all.send_redirects = 0关闭ICMP重定向,防止路由被篡改。net.ipv4.icmp_echo_ignore_all = 1直接忽略所有ping请求,能减少被扫描器发现的机会,但也会影响一些监控系统,按需开启。
还有一项net.ipv4.tcp_max_syn_backlog和net.core.somaxconn可以适当调大,提升半连接队列长度。这些参数不会让服务器变成高防,但能让基础的SYN攻击更难奏效。改完后执行sysctl -p /etc/sysctl.d/99-security.conf立即生效。内核参数调整是底层防护,和防火墙不冲突,两者叠加效果更好。
限制ICMP和异常流量如果不想完全禁ping,可以用iptables限制ICMP速率。UFW本身对ICMP的控制比较粗,需要直接操作iptables。在/etc/ufw/before.rules中添加规则,限制每秒最多1个ICMP回显请求,超出则丢弃。这样既保留了基本的连通性检测能力,又不会被ICMP Flood打满带宽。对于UDP流量也要注意,如果业务不需要UDP,直接在UFW中不开放任何UDP端口即可。DNS服务器除外,但自建DNS的情况在基础防护场景中较少。
自动更新安全补丁Debian的unattended-upgrades包可以自动安装安全更新,不需要人工每天盯着。安装后编辑/etc/apt/apt.conf.d/50unattended-upgrades,确保只自动更新安全源,避免自动升级大版本导致服务异常。配置文件中把"${distro_id}:${distro_codename}-security"这一行取消注释,其他更新源保持注释状态。然后启用定时任务,在/etc/apt/apt.conf.d/20auto-upgrades中设置APT::Periodic::Update-Package-Lists "1"和APT::Periodic::Unattended-Upgrade "1"。这样每天自动检查并安装安全补丁,对已知漏洞的响应速度远快于人工。
自动更新不是万能的,有些服务更新后需要重启才能生效。可以在50unattended-upgrades中设置Unattended-Upgrade::Automatic-Reboot "true",并指定重启时间。如果服务器不能随意重启,至少设置邮件通知,让管理员知道哪些更新已安装、哪些需要手动处理。
日志监控与基础入侵检测极简防护不代表不监控。至少要让SSH登录日志可追溯。Debian默认用journald管理日志,journalctl -u sshd -f可以实时查看SSH日志。更实用的做法是安装logwatch,每天汇总一次日志摘要发到邮箱。重点看SSH登录失败记录、sudo使用记录和异常服务启动。如果发现某个IP反复尝试登录,直接ufw deny from 该IP封掉。
对于Web服务器,要关注访问日志中的异常请求。大量404请求、扫描常见路径的请求、带有SQL注入特征的URL,都可以用简单的awk或grep脚本统计。不需要上完整的IDS系统,基础的日志分析就能发现大部分自动化攻击的痕迹。把这些异常IP提取出来加入防火墙黑名单,比任何高级安全软件都直接有效。
文件权限与关键目录加固基础攻击不只是网络层面,通过Web漏洞写入文件也是常见路径。检查Web目录权限,确保Web服务器进程对网站根目录只有读权限,只有需要上传的目录才开放写权限。用chown和chmod明确属主和权限,不要图省事把整个目录设为777。对于/tmp目录,Debian默认已经设置了sticky bit,但可以进一步挂载为noexec,防止攻击者在临时目录执行恶意程序。在/etc/fstab中为/tmp添加noexec,nosuid选项,重启后生效。
另外检查系统中是否有SUID位异常的程序。find / -perm -4000 -type f 2>/dev/null可以列出所有SUID程序,正常情况下只有passwd、su、sudo等少数几个。如果发现不明程序带有SUID位,立即排查来源。这是权限提升攻击的常见突破口。
以上这些措施全部落地后,一台Debian服务器在面对基础的网络扫描、暴力破解、SYN Flood和常见Web攻击时,已经有了相当程度的抵抗力。整个配置过程不需要安装额外的安全套件,全部基于系统自带工具和内核参数。维护成本低,不依赖第三方更新,也不会对正常业务造成明显影响。对于大多数中小型网站和应用来说,这套极简防护方案已经足够实用。
