[Tony]加强 CentOS 7 登录安全

背景

这几天登录服务器root账户发现了上千的登录尝试,而服务器上有重要的隐私文件,升级安全性刻不容缓。


查看主机登录日志

日志存放的地点是/var/log
可以使用以下命令查看

less /var/log/secure

常用日志

日志名称 说明
access-log 纪录HTTP/web的传输
acct/pacct 纪录用户命令
aculog 纪录MODEM的活动
btmp 纪录失败的纪录
lastlog 纪录最近几次成功登录的事件和最后一次不成功的登录
messages 从syslog中记录信息(有的链接到syslog文件)
sudolog 纪录使用sudo发出的命令
sulog 纪录使用su命令的使用
syslog 从syslog中记录信息(通常链接到messages文件)
utmp 纪录当前登录的每个用户
wtmp 一个用户每次登录进入和退出时间的永久纪录
xferlog 纪录FTP会话

详细指令查看这里


添加新用户

使用自定义的用户登录参考这篇文章。

禁用root账户远程登录

需要编辑/etc/ssh/sshd_config文件。
找到以下语句

PermitRootLogin yes

如果有#,则取消注释,修改为

PermitRootLogin no

保存并退出。
重启SSH服务

systemctl restart sshd

使用秘钥登录

以后更新。

修改SSH登录端口

修改/etc/ssh/sshd_config文件,取消# Port 22的注释,并在下一行添加想更改成为的端口,例如2222端口Port 2222

Port 22
Port 2222

这里不直接删除Port 22是因为避免配置中出错而导致彻底无法远程登录。
保存更改后重启sshd服务

systemctl restart sshd

新开终端,测试连接新端口。

ssh -p 2222 [email protected]

如果成功连接便可以忽略文章中间的SELinuxFirewalld的配置,直接转到收尾。


配置SELinux

SELinux 全称 Security Enhanced Linux (安全强化 Linux),是 MAC (Mandatory Access Control,强制访问控制系统)的一个实现,目的在于明确的指明某个进程可以访问哪些资源(文件、网络端口等)。

对于SSH,SELinux默认只允许22端口,我们可以用SELinux管理配置工具semanage,来修改SSH可访问的端口。

安装 semanage 工具

yum provides semanage
yum -y install policycoreutils-python

打开2222端口

semanage port -a -t ssh_port_t -p tcp 2222

查看当前SELinux允许的SSH端口

semanage port -l | grep ssh

如果显示如下则配置正常。

ssh_port_t                     tcp      2222, 22

解除禁用

SELinux配置为禁用状态时,使用semanage会报错提示无法读取policy 文件。

SELinux:  Could not downgrade policy file /etc/selinux/targeted/policy/policy.30, searching for an older version.  
SELinux:  Could not open policy file <= /etc/selinux/targeted/policy/policy.30:  No such file or directory  
/sbin/load_policy:  Can't load policy:  No such file or directory
libsemanage.semanage_reload_policy: load_policy returned error code 2. (No such file or directory).  
FileNotFoundError: [Errno 2] No such file or directory

此时需要修改/etc/selinux/config文件,开启SELinux

vi /etc/selinux/config
SELINUX=permissive

重启服务器

init 6

查看SELinux状态

sestatus # if it shows disable, you can run$ load_policy -qi

添加SSH端口并检查配置

semanage port -a -t ssh_port_t -p tcp 2222
$ semanage port -l | grep ssh
ssh_port_t                     tcp      2222, 22

重启SSH服务

systemctl restart sshd

注:semange 不能禁用 ssh 的 22 端口:

semanage port -d -t ssh_port_t -p tcp 22
ValueError: 在策略中定义了端口 tcp/22,无法删除。

配置Firewalld

启用防护墙

systemctl enable firewalld
systemctl start firewalld

检查防火墙状态

  • 方法一
systemctl status firewalld

显示如下为正常

 firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 二 2016-12-20 02:12:59 CST; 1 day 13h ago
 Main PID: 10379 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─10379 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
  • 方法二
firewall-cmd --state

显示如下为正常

running

查看防火墙当前默认激活zone(区域)

$ firewall-cmd --get-default-zone
public  
$ firewall-cmd --get-active-zones
public  
  interfaces: eth0 eth1

如果没有激活public区域,需要激活。

激活public区域,增加网卡接口

$ firewall-cmd --set-default-zone=public
$ firewall-cmd --zone=public --add-interface=eth0
success
$ firewall-cmd --zone=public --add-interface=eth1
success

public zone永久开放2222/TCP端口:

# 以防新端口不生效,先把 22 端口暴露
$ firewall-cmd --permanent --zone=public --add-port=22/tcp
$ firewall-cmd --permanent --zone=public --add-port=2222/tcp
success  
# 重载防火墙
$ firewall-cmd --reload
# 查看暴露端口规则
$ firewall-cmd --permanent --list-port
443/tcp 80/tcp 22/tcp 2222/tcp  
$ firewall-cmd --zone=public --list-all
public (default, active)  
  interfaces: eth0 eth1
  sources:
  services: dhcpv6-client ssh
  ports: 443/tcp 80/tcp 22/tcp 2222/tcp
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

测试连接

ssh -p 2222 [email protected]

收尾

SSH禁用22号端口

修改/etc/ssh/sshd_config文件,注释掉Port 22
重启SSH服务

systemctl restart sshd

查看SSH监听的端口

ss -tnlp | grep ssh
LISTEN     0      128          *:2222                     *:*                   users:(("sshd",pid=2125,fd=3))

防火墙移除22号端口

$ firewall-cmd --permanent --zone=public --remove-port=22/tcp
success  
$ firewall-cmd --reload
$ firewall-cmd --permanent --list-port
443/tcp 80/tcp 2222/tcp

其实可以这样。

firewall-cmd --permanen --zone=public --add-forward-port=port=22:proto=tcp:toport=22:toaddr=127.0.0.1

防火墙载入配置后就会将22号端口的流量重定向为访问者本地。

如要删除。

firewall-cmd --permanen --zone=public --remove-forward-port=port=22:proto=tcp:toport=22:toaddr=127.0.0.1

测试

$ ssh -p 22 [email protected]

无响应,因为转到了本地的 22 端口,若防火墙未 forward 连接,则会回显 "ssh: connect to host {ip} port 22: Connection refused"

$ ssh -p 2222 [email protected]

成功 success

你可能感兴趣的:([Tony]加强 CentOS 7 登录安全)