通用 Linux 服务器安全配置指南

本文是可参考的实际操作,不涉及如 IP 欺骗这样的原理,而且安全问题也不是几行命令就能预防的,这里只是 Linux 系统上基本的安全加固方法,后续有新的内容再添加进来。

注:所有文件在修改之前都要进行备份如

cp /etc/passwd{,.bak}

1. 禁用不使用的用户

可以使用命令 usermod -L usernamepasswd -l username 锁定。

2. 关闭不使用的服务

启动 Linux 系统时,可以进入不同的模式,这模式我们称为执行等级(run level)。不同的执行等级有不同的功能与服务,目前你先知道正常的执行等级有两个,一个是具有 X 窗口界面的 run level 5,另一个则是纯文本界面的 run level 3。

chkconfig --list | grep '3:on'      // 显示出目前在 run level 为 3 启动的服务
chkconfig --level 2345 postfix on   // 让 postfix 这个服务在 run level 为 2,3,4,5 时启动

// 关闭邮件服务
service postfix stop
chkconfig --level 2345 postfix off

3. 禁用 IPV6

IPV6 是为了解决 IPV4 地址耗尽的问题,但我们的服务器一般用不到它,反而禁用 IPV6 不仅仅会加快网络,还会有助于减少管理开销和提高安全级别。

4. iptables 规则

启用 linux 防火墙来禁止非法程序访问。使用 iptable 的规则来过滤入站、出站和转发的包。我们可以针对来源和目的地址进行特定 udp/tcp 端口的准许和拒绝访问。

// 只允许指定 ip 访问 6379 端口服务
# vim /etc/sysconfig/iptables
-I INPUT -p tcp --dport 6379 -j DROP
-I INPUT -s 127.0.0.1 -p tcp --dport 6379 -j ACCEPT
-I INPUT -s 183.14.11.* -p tcp --dport 6379 -j ACCEPT

5. SSH 安全

如果有可能,第一件事就是修改 ssh 的默认端口 22,改成如 20002 这样的较大端口会大幅提高安全系数,降低 ssh 破解登录的可能性。

// 修改 ssh 端口
# vim /etc/ssh/sshd_config
Port 22333

// 登录超时。用户在线 5 分钟无操作则超时断开连接,在 `/etc/profile`中添加
export TMOUT=300
readonly TMOUT

// 禁止 root 直接远程登录
# vim /etc/ssh/sshd_config
PermitRootLogin no

// 限制登录失败次数并锁定。在 `/etc/pam.d/login` 后添加
auth required pam_tally2.so deny=6 unlock_time=180 even_deny_root root_unlock_time=180 // 登录失败 5 次锁定 180 秒

// 登录 IP 限制。在 sshd_config 中定死允许 ssh 的用户和来源 ip
## allowed ssh users sysmgr
AllowUsers sysmgr@172.29.73.*

6. 配置只能使用密钥文件登录

使用密钥文件代替普通的简单密码认证也会极大的提高安全性。

占位图

将公钥重名为 authorized_key

# mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
# chmod 600 ~/.ssh/authorized_keys

下载私钥文件 id_rsa 到本地(为了更加容易识别,可重命名为 hostname_username_id_rsa),保存到安全的地方。以后 username 用户登录这台主机就必须使用这个私钥,配合密码短语来登录(不再使用 username 用户自身的密码)

另外还要修改 /etc/ssh/sshd_conf 文件,打开注释

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

PasswordAuthentication no

使用命令 service sshd restart 重启 sshd 服务。

7. 减少 history 命令记录

执行过的历史命令记录越多,从一定程度上讲会给维护带来简便,但同样会伴随安全问题。

# vim /etc/profile
HISTSIZE=50

或每次退出时,使用命令 history -c 清理 history。

8. 增强特殊文件权限

给下面的文件加上不可更改属性,从而防止非授权用户获取权限

chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/group
chattr +i /etc/gshadow
chattr +i /etc/services         // 给系统服务端口列表文件加锁,防止未经许可的删除或添加服务
chattr +i /etc/pam.d/su
chattr +i /etc/ssh/sshd_config
chattr +i /var/spool/cron/root  // root 用户定时任务

9. 防止一般网络攻击

网络攻击不是几行设置就能避免的,以下都只是些简单的将可能性降到最低,增大攻击的难度但并不能完全阻止。

// 禁 ping
# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

// 或使用 iptable 禁 ping
# iptables -A INPUT -p icmp --icmp-type 0 -s 0/0 -j DROP
# iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP          // 不允许ping其他主机

// 防止 IP 欺骗。编辑 `/etc/host.conf` 文件并增加如下几行
order hosts,bind
multi on
nospoof on

10. 定期做日志安全检查

将日志移动到专用的日志服务器里,这可避免入侵者轻易的改动本地日志。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

昵称 *