CentOS7 系统加固 (转)

时间:2024-02-20 07:58:20

CentOS7 系统加固(minimal安装)
一、用户帐号和环境

1
清除了operator、lp、shutdown、halt、games、gopher 帐号
删除的用户组有: lp、uucp、games、dip
其它系统伪帐号均处于锁定SHELL登录的状态

2
验证是否有账号存在空口令的情况:
awk -F: ‘($2 == “”) { print $1 }’ /etc/shadow

3
检查除了root以外是否还有其它账号的UID为0:
awk -F: ‘($3 == 0) { print $1 }’ /etc/passwd
任何UID为0的账号在系统上都具有超级用户权限.


4
检查root用户的$PATH中是否有’.’或者所有用户/组用户可写的目录
超级用户的$PATH设置中如果存在这些目录可能会导致超级用户误执行一个特洛伊木马

5
用户的home目录许可权限设置为700
用户home目录的许可权限限制不严可能会导致恶意用户读/修改/删除其它用户的数据或取得其它用户的系统权限

6
是否有用户的点文件是所有用户可读写的:
for dir in \
`awk -F: ‘($3 >= 500) { print $6 }’ /etc/passwd`
do
for file in $dir/.[A-Za-z0-9]*
do
if [ -f $file ]; then
chmod o-w $file
fi
done
done
Unix/Linux下通常以”.”开头的文件是用户的配置文件,如果存在所有用户可读/写的配置文件可能会使恶意用户能读/写其它用户的数据或取得其它用户的系统权限

7
为用户设置合适的缺省umask值:
cd /etc
for file in profile csh.login csh.cshrc bashrc
do
if [ `grep -c umask $file` -eq 0 ];
then
echo “umask 022″ >> $file
fi
chown root:root $file
chmod 444 $file
done
为用户设置缺省的umask值有助于防止用户建立所有用户可写的文件而危及用户的数据.

8
设备系统口令策略:修改/etc/login.defs文件
将PASS_MIN_LEN最小密码长度设置为12位。

9
限制能够su为root 的用户:#vi /etc/pam.d/su
在文件头部添加下面这样的一行
auth required pam_wheel.so use_uid
这样,只有wheel组的用户可以su到root

操作样例:
#usermod -G10 test 将test用户加入到wheel组

10
修改别名文件/etc/aliases:#vi /etc/aliases
注释掉不要的 #games: root #ingres: root #system: root #toor: root #uucp: root #manager: root #dumper: root #operator: root #decode: root #root: marc

修改后执行/usr/bin/newaliases

11
修改帐户TMOUT值,设置自动注销时间
vi /etc/profile
增加TMOUT=600
无操作600秒后自动退出

12
设置Bash保留历史命令的条数
#vi /etc/profile
修改HISTSIZE=5
即只保留最新执行的5条命令

13
防止IP SPOOF:
#vi /etc/host.conf 添加:nospoof on
不允许服务器对IP地址进行欺骗

14
使用日志服务器:
#vi /etc/rsyslog.conf 照以下样式修改
*.info;mail.none;authpriv.none;cron.none @192.168.10.199
这里只是作为参考,需要根据实际决定怎么配置参数


二、系统访问认证和授权

1
限制 at/cron给授权的用户:
cd /etc/
rm -f cron.deny at.deny
echo root >cron.allow
echo root >at.allow
chown root:root cron.allow at.allow
chmod 400 cron.allow at.allow
Cron.allow和at.allow文件列出了允许允许crontab和at命令的用户名单, 在多数系统上通常只有系统管理员才需要运行这些命令

2
Crontab文件限制访问权限:
chown root:root /etc/crontab
chmod 400 /etc/crontab
chown -R root:root /var/spool/cron
chmod -R go-rwx /var/spool/cron
chown -R root:root /etc/cron.*
chmod -R go-rwx /etc/cron.*
系统的crontab文件应该只能被cron守护进程(它以超级用户身份运行)来访问,一个普通用户可以修改crontab文件会导致他可以以超级用户身份执行任意程序

3
建立恰当的警告banner:
echo “Authorized uses only. All activity may be \
monitored and reported.” >>/etc/motd
chown root:root /etc/motd
chmod 644 /etc/motd
echo “Authorized uses only. All activity may be \
monitored and reported.” >> /etc/issue
echo “Authorized uses only. All activity may be \
monitored and reported.” >> /etc/issue.net
改变登录banner可以隐藏操作系统类型和版本号和其它系统信息,这些信息可以会对攻击者有用.

4
限制root登录到系统控制台:
cat <<END_FILE >/etc/securetty
tty1
tty2
tty3
tty4
tty5
tty6
END_FILE
chown root:root /etc/securetty
chmod 400 /etc/securetty
通常应该以普通用户身份访问系统,然后通过其它授权机制(比如su命令和sudo)来获得更高权限,这样做至少可以对登录事件进行跟踪

5
设置守护进程掩码
vi /etc/rc.d/init.d/functions
设置为 umask 022
系统缺省的umask 值应该设定为022以避免守护进程创建所有用户可写的文件


三、核心调整

1
禁止core dump:
cat <<END_ENTRIES >>/etc/security/limits.conf
* soft core 0
* hard core 0
END_ENTRIES
允许core dump会耗费大量的磁盘空间.

2
chown root:root /etc/sysctl.conf
chmod 600 /etc/sysctl.conf
log_martians将进行ip假冒的ip包记录到/var/log/messages
其它核心参数使用CentOS默认值。

四、需要关闭的一些服务

1
关闭Mail Server
chkconfig postfix off
多数Unix/Linux系统运行Sendmail作为邮件服务器, 而该软件历史上出现过较多安全漏洞,如无必要,禁止该服务


五、SSH安全配置

1
配置空闲登出的超时间隔:
ClientAliveInterval 300
ClientAliveCountMax 0
Vi /etc/ssh/sshd_config

2
禁用 .rhosts 文件
IgnoreRhosts yes
Vi /etc/ssh/sshd_config

3

禁用基于主机的认证
HostbasedAuthentication no
Vi /etc/ssh/sshd_config

4
禁止 root 帐号通过 SSH 登录
PermitRootLogin no
Vi /etc/ssh/sshd_config

5
用警告的 Banner
Banner /etc/issue
Vi /etc/ssh/sshd_config

6
iptables防火墙处理 SSH 端口 # 64906
-A INPUT -s 192.168.1.0/24 -m state –state NEW -p tcp –dport 64906 -j ACCEPT
-A INPUT -s 202.54.1.5/29 -m state –state NEW -p tcp –dport 64906 -j ACCEPT
这里仅作为参考,需根据实际需要调整参数

7
修改 SSH 端口和限制 IP 绑定:
Port 64906

安装selinux管理命令
yum -y install policycoreutils-python

修改 port contexts(关键),需要对context进行修改
semanage port -a -t ssh_port_t -p tcp 64906
semanage port -l | grep ssh —-查看当前SElinux 允许的ssh端口

Vi /etc/ssh/sshd_config
仅作为参考,需根据实际需要调整参数。

8
禁用空密码:
PermitEmptyPasswords no
禁止帐号使用空密码进行远程登录SSH

9
记录日志:
LogLevel INFO
确保在 sshd_config 中将日志级别 LogLevel 设置为 INFO 或者 DEBUG,可通过 logwatch or
logcheck 来阅读日志。

10
重启SSH
systemctl restart sshd.service
重启ssh


六、封堵openssl的Heartbleed漏洞
检测方法:在服务器上运行以下命令确认openssl版本
# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
以上版本的openssl存在Heartbleed bug,需要有针对性的打补丁。
升及补丁:
#yum -y install openssl
验证:
# openssl version -a
OpenSSL 1.0.1e-fips 11 Feb 2013
built on: Thu Jun 5 12:49:27 UTC 2014
以上built on 的时间是2014.6.5号,说明已经修复了该漏洞。
注:如果能够临时联网安装以上补丁,在操作上会比较简单一些。如果无法联网,则有两种处理办法:首选从安装光盘拷贝独立的rpm安装文件并更新;另一个办法是提前下载最新版本的openssl源码,编译并安装。

七、开启防火墙策略
在CentOS7.0中默认使用firewall代替了iptables service。虽然继续保留了iptables命令,但已经仅是名称相同而已。除非手动删除firewall,再安装iptables,否则不能继续使用以前的iptables配置方法。以下介绍的是firewall配置方法:
#cd /usr/lib/firewalld/services //该目录中存放的是定义好的网络服务和端口参数,只用于参考,不能修改。这个目录中只定义了一部分通用网络服务。在该目录中没有定义的网络服务,也不必再增加相关xml定义,后续通过管理命令可以直接增加。
#cd /etc/firewalld/services/ //从上面目录中将需要使用的服务的xml文件拷至这个目录中,如果端口有变化则可以修改文件中的数值。

1.
# Check firewall state.
firewall-cmd --state
# Check active zones.
firewall-cmd --get-active-zones
# Check current active services.
firewall-cmd --get-service
# Check services that will be active after next reload.
firewall-cmd --get-service --permanent
查看firewall当前的配置信息,最后一个命令是查看写入配置文件的信息。

2
# # Set permanent and reload the runtime config.
# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --reload
# firewall-cmd --permanent --zone=public --list-services

打开HTTP服务端口并写入配置文件
从配置文件中重载至运行环境中。

3
# firewall-cmd --permanent --zone=public --remove-service=https
# firewall-cmd --reload
从已有配置中删除一个服务端口

4
# firewall-cmd --permanent --zone=public --add-port=8080-8081/tcp
# firewall-cmd --reload
# firewall-cmd --zone=public --list-ports
8080-8081/tcp
# firewall-cmd --permanent --zone=public --list-ports
8080-8081/tcp
#
# firewall-cmd --permanent --zone=public --remove-port=8080-8081/tcp
# firewall-cmd --reload
打开或关闭一段TCP端口的方法,同理如果使用了其它非通用端口,那么也可以这么操作。

5
# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" \
source address="192.168.0.4/24" service name="http" accept"
# firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4" \
source address="192.168.0.4/24" service name="http" accept"
The following command allows you to open/close HTTP access to a specific IP address.


八、启用系统审计服务
审计内容包括:系统调用、文件访问、用户登录等。编辑/etc/audit/audit.rules,在文中添加如下内容:
-w /var/log/audit/ -k LOG_audit
-w /etc/audit/ -p wa -k CFG_audit
-w /etc/sysconfig/auditd -p wa -k CFG_auditd.conf
-w /etc/libaudit.conf -p wa -k CFG_libaudit.conf
-w /etc/audisp/ -p wa -k CFG_audisp
-w /etc/cups/ -p wa -k CFG_cups
-w /etc/init.d/cups -p wa -k CFG_initd_cups
-w /etc/netlabel.rules -p wa -k CFG_netlabel.rules
-w /etc/selinux/mls/ -p wa -k CFG_MAC_policy
-w /usr/share/selinux/mls/ -p wa -k CFG_MAC_policy
-w /etc/selinux/semanage.conf -p wa -k CFG_MAC_policy
-w /usr/sbin/stunnel -p x
-w /etc/security/rbac-self-test.conf -p wa -k CFG_RBAC_self_test
-w /etc/aide.conf -p wa -k CFG_aide.conf
-w /etc/cron.allow -p wa -k CFG_cron.allow
-w /etc/cron.deny -p wa -k CFG_cron.deny
-w /etc/cron.d/ -p wa -k CFG_cron.d
-w /etc/cron.daily/ -p wa -k CFG_cron.daily
-w /etc/cron.hourly/ -p wa -k CFG_cron.hourly
-w /etc/cron.monthly/ -p wa -k CFG_cron.monthly
-w /etc/cron.weekly/ -p wa -k CFG_cron.weekly
-w /etc/crontab -p wa -k CFG_crontab
-w /var/spool/cron/root -k CFG_crontab_root
-w /etc/group -p wa -k CFG_group
-w /etc/passwd -p wa -k CFG_passwd
-w /etc/gshadow -k CFG_gshadow
-w /etc/shadow -k CFG_shadow
-w /etc/security/opasswd -k CFG_opasswd
-w /etc/login.defs -p wa -k CFG_login.defs
-w /etc/securetty -p wa -k CFG_securetty
-w /var/log/faillog -p wa -k LOG_faillog
-w /var/log/lastlog -p wa -k LOG_lastlog
-w /var/log/tallylog -p wa -k LOG_tallylog
-w /etc/hosts -p wa -k CFG_hosts
-w /etc/sysconfig/network-scripts/ -p wa -k CFG_network
-w /etc/inittab -p wa -k CFG_inittab
-w /etc/rc.d/init.d/ -p wa -k CFG_initscripts
-w /etc/ld.so.conf -p wa -k CFG_ld.so.conf
-w /etc/localtime -p wa -k CFG_localtime
-w /etc/sysctl.conf -p wa -k CFG_sysctl.conf
-w /etc/modprobe.conf -p wa -k CFG_modprobe.conf
-w /etc/pam.d/ -p wa -k CFG_pam
-w /etc/security/limits.conf -p wa -k CFG_pam
-w /etc/security/pam_env.conf -p wa -k CFG_pam
-w /etc/security/namespace.conf -p wa -k CFG_pam
-w /etc/security/namespace.init -p wa -k CFG_pam
-w /etc/aliases -p wa -k CFG_aliases
-w /etc/postfix/ -p wa -k CFG_postfix
-w /etc/ssh/sshd_config -k CFG_sshd_config
-w /etc/vsftpd.ftpusers -k CFG_vsftpd.ftpusers
-a exit,always -F arch=b32 -S sethostname
-w /etc/issue -p wa -k CFG_issue
-w /etc/issue.net -p wa -k CFG_issue.net
重启audit服务
#service auditd restart

九、部署完整性检查工具软件
AIDE(Advanced Intrusion Detection Environment,高级入侵检测环境)是个入侵检测工具,主要用途是检查文档的完整性。
AIDE能够构造一个指定文档的数据库,他使用aide.conf作为其配置文档。AIDE数据库能够保存文档的各种属性,包括:权限(permission)、索引节点序号(inode number)、所属用户(user)、所属用户组(group)、文档大小、最后修改时间(mtime)、创建时间(ctime)、最后访问时间(atime)、增加的大小连同连接数。AIDE还能够使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每个文档的校验码或散列号。
在系统安装完毕,要连接到网络上之前,系统管理员应该建立新系统的AIDE数据库。这第一个AIDE数据库是系统的一个快照和以后系统升级的准绳。数据库应该包含这些信息:关键的系统二进制可执行程式、动态连接库、头文档连同其他总是保持不变的文档。这个数据库不应该保存那些经常变动的文档信息,例如:日志文档、邮件、/proc文档系统、用户起始目录连同临时目录
安装方法:
#yum -y install aide
注:如果主机不能联网安装AIDE,那么也可以从安装光盘拷贝至目标主机。
检验系统文件完整性的要求:
因为AIDE可执行程序的二进制文档本身可能被修改了或数据库也被修改了。因此,应该把AIDE的数据库放到安全的地方,而且进行检查时要使用确保没有被修改过的程序,最好是事先为AIDE执行程序生成一份MD5信息。再次使用AIDE可执行程序时,需要先验证该程序没有被篡改过。
配置说明:

1
/etc/aide.conf
配置文件

2
database
Aide读取文档数据库的位置,默认为/var/lib/aide,默认文件名为aide.db.gz

3
database_out
Aide生成文档数据库的存放位置,默认为/var/lib/aide,默认文件名为aide.db.new.gz

database_new
在使用aide –compare命令时,需要在aide.conf中事先设置好database_new并指向需要比较的库文件

4
report_url
/var/log/aide,入侵检测报告的存放位置

5
其它参数继续使用默认值即可。

建立、更新样本库:
1)执行初始化,建立第一份样本库
# aide –init
# cd /var/lib/aide/
# mv aide.db.new.gz aide.db.gz //替换旧的样本库
2)更新到样本库
#aide –update
# cd /var/lib/aide/
# mv aide.db.new.gz aide.db.gz //替换旧的样本库
执行aide入侵检测:
1)查看入侵检测报告
#aide –check
报告的详细程度可以通过-V选项来调控,级别为0-255,-V0 最简略,-V255 最详细。

#aide –compare
这个命令要求在配置文件中已经同时指定好了新、旧两个库文件。
2)保存入侵检测报告(将检查结果保存到其他文件)
aide –check –report=file:/tmp/aide-report-20120426.txt
3)定期执行入侵检测,并发送报告
# crontab -e
45 17 * * * /usr/sbin/aide -C -V4 | /bin/mail -s ”AIDE REPORT $(date +%Y%m%d)” abcdefg#163.com

45 23 * * * aide -C >> /var/log/aide/’date +%Y%m%d’_aide.log
记录aide可执行文件的md5 checksum:
#md5sum /usr/sbin/aide

 

 

CentOS7上系统安全加固
----------------------------------------------
# 寻找空密码的用户
[root@localhost ~]# awk -F: \'($2==""){print $1}\' /etc/shadow

# 查找uid为0的用户,当一个用户的uid为0的时候,那么这个用户就拥有root权限
[root@localhost ~]# awk -F: \'($3==0){print $1}\' /etc/passwd

# 禁止使用旧密码
[root@localhost ~]# vim /etc/pam.d/system-auth
password sufficient pamunix.so sha512 shadow nullok tryfirstpass useauthtok remember= 记住的数量

# 设置密码最小长度
[root@localhost ~]# vim /etc/pam.d/system-auth
password sufficient pamunix.so sha512 shadow nullok tryfirstpass useauthtok remember= 5 minlen=最小长度

# 设置密码生存周期限制
[root@localhost ~]# vim /etc/login.defs
PASS_MAX_DAYS=想要的天数

# 设置口令过期提醒:
[root@localhost ~]# vim /etc/login.defs
加入:PASS_WARN_AGE=天数

# 登陆时间超时强制注销
[root@localhost ~]# vim /etc/profile
在histsize=1000,下面加一行 TMOUT=1000(单位为秒)

一.密码长度与有效期
默认配置:
[root@i-1y3we23j ~]# cat /etc/login.defs |grep PASS_ |grep -v \'#\'
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
加固方案:
1.备份配置文件:
# cp -a /etc/login.defs /etc/login.defs.default

2.编辑配置文件并将相关参数改成如下
# vi /etc/login.defs
PASS_MAX_DAYS 90
PASS_MIN_DAYS 6
PASS_MIN_LEN 8
PASS_WARN_AGE 30
复制代码
备注:

/etc/login.defs文件的pass_min_len 参数并不具备强制性,测试仍然可以设置7位密码。最终需要cracklib来实现。

参数说明:
PASS_MAX_DAYS 密码有效期
PASS_MIN_DAYS 修改密码的最短期限
PASS_MIN_LEN 密码最短长度
PASS_WARN_AGE 密码过期提醒

二.密码复杂度
默认配置:
[root@i-1y3we23j ~]# cat /etc/pam.d/system-auth | grep "pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type="
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
加固方案:

复制代码
1.备份配置文件:
# cp -a /etc/pam.d/system-auth /etc/pam.d/system-auth.default
2.编辑配置文件
# vi /etc/pam.d/system-auth
将password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
注释并在其下面新增1行 password requisite pam_cracklib.so try_first_pass minlen=8 difok=5 dcredit=-1 lcredit=-1 ocredit=-1 retry=1 type=
3.保存配置文件
复制代码
备注:
try_first_pass而当pam_unix验证模块与password验证类型一起使用时,该选项主要用来防止用户新设定的密码与以前的旧密码相同。
minlen=8:最小长度8位
difok=5:新、旧密码最少5个字符不同
dcredit=-1:最少1个数字
lcredit=-1:最少1个小写字符,(ucredit=-1:最少1个大写字符)
ocredit=-1:最少1个特殊字符
retry=1:1次错误后返回错误信息
type=xxx:此选项用来修改缺省的密码提示文本

三.新口令不能与4个最近使用的相同
默认配置:
[root@i-1y3we23j ~]# cat /etc/pam.d/system-auth |grep use_authtok
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
加固方案:

1.备份配置文件
2.编辑配置文件:
# vi /etc/pam.d/system-auth
在password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok 所在行的后面添加
remember=5
3.保存配置文件
备注:
记住5个历史密码

四.设置会话超时(5分钟)
默认配置:

加固方案:
复制代码
1.备份配置文件:
# cp -a /etc/profile /etc/profile.default
2.编辑配置文件:
vi /etc/profile
在文件的末尾添加参数
export TMOUT=300
3.保存配置文件
复制代码

备注:
5分钟无操作中断登录会话

五.设置history命令时间戳
默认配置:

加固方案:
复制代码
1.备份配置文件:

2.编辑配置文件:
vi /etc/profile
在文件的末尾添加参数
export HISTTIMEFORMAT="%F %T `whoami` "
3.保存配置文件
复制代码

六.设置登陆失败锁定(终端登录)
默认配置:

加固方案:
1.备份配置文件
2.编辑配置文件:
# vi /etc/pam.d/system-auth
在# User changes will be destroyed the next time authconfig is run.行的下面,添加
auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=1800
3.保存配置文件

备注:
通过终端登录,5次登录失败后锁定账号30分钟,锁定期间此账号无法再次登录。

七.禁止root通过ssh远程登录
默认配置:
# cat /etc/ssh/sshd_config |grep PermitRootLogin
#PermitRootLogin yes

加固方案:
复制代码
1.备份配置文件
# cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.default
2.编辑配置文件
vi /etc/ssh/sshd_config
将配置参数#PermitRootLogin yes改成PermitRootLogin no
3.保存配置文件
4.重启ssh服务
# /etc/init.d/sshd restart
复制代码

八.SSH 配置参数增强
复制代码
1.备份配置文件
2.编辑配置文件
#vi /etc/ssh/sshd_config

(1)禁止空密码登录
将#PermitEmptyPasswords no参数的注释符号去掉,改成
PermitEmptyPasswords no

(2)关闭ssh的tcp转发
将#AllowTcpForwarding yes参数改成
AllowTcpForwarding no

(3)关闭S/KEY(质疑-应答)认证方式
将#ChallengeResponseAuthentication yes参数,改成
ChallengeResponseAuthentication no

(4)关闭基于GSSAPI 的用户认证
将GSSAPIAuthentication yes参数,改成
GSSAPIAuthentication no

3.保存配置文件
4.重启ssh服务
复制代码

九.设置SSH登录警告语
默认配置:

加固方案:
复制代码
1.备份配置文件
# 略
2.编辑配置文件
#vi /etc/ssh/sshd_config
找到#Banner none参数,在其下一行,增加
Banner /etc/ssh/alert
3.保存配置文件
4新增告警信息文件.
#vi /etc/ssh/alert
文件内容,设置成
*******************************************************
这里的内容自己定义,可以提示一下登录的用户引起运维人员重视
Warning!!!Any Access Without Permission Is Forbidden!!!
*******************************************************
5.保存后重启ssh服
复制代码

十.设置umask值
默认配置:
# umask
0022
加固方案:
复制代码
1.备份配置文件
# cp -a /etc/bashrc /etc/bashrc.default
2.编辑配置文件
# vi /etc/bashrc
在文件末尾增加参数
umask 027
3.保存配置文件
4. 备份配置文件
# cp -a /etc/profile /etc/pr ofile.default
5.编辑配置文件
# vi /etc/profile
在文件末尾增加参数
umask 027
6.保存配置文件
复制代码
备注:
将umask值设置成0027,用于拿掉新增目录与文件的非所有者和所有者所属组的访问权限
默认:
新增目录权限755,即rxwr-xr-x
新增文件权限644,即rw-r--r—
加固后:
新增目录权限750,即rxwr-x---
新增文件权限640,即rw-r-----

十一.禁止Control-Alt-Delete 键盘重启系统命令
默认配置:
ls /usr/lib/systemd/system/ctrl-alt-del.target

加固方案:
1.备份配置文件
cp -a /usr/lib/systemd/system/ctrl-alt-del.target /usr/lib/systemd/system/ctrl-alt-del.target.default
2.移除该原源文件
rm -rf /usr/lib/systemd/system/ctrl-alt-del.target
十二. 隐藏系统版本信息
默认配置:

加固方案:
执行以下命令:
#mv /etc/issue /etc/issue.bak
#mv /etc/issue.net /etc/issue.net.bak
备注:登录界面显示系统版本信息

十三.设置grup密码
默认配置:无
加固方案:
复制代码
1.备份配置文件
cp -a /etc/grub.d/00_header /etc/grub.d/00_header.default
2.使用grub2-mkpasswd-pbkdf2 加密密码(密码自己定义,但是一定得保存好否则最后连自己都登录不进去)
[root@localhost ~]# grub2-mkpasswd-pbkdf2
Enter password:
Reenter password:
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.B157F42E96462AB239C03000F113D32EB18FD48073F1FC7D8F87A8F3B3F89F662424ECCAB901F3A812A997E547FD520F3E99D0E080F4FE8B05E019757E34F75B.29C83F87B4B6C086FC9A81E046CC3623CC5CF2F82128EDC3A0364894E429D4993B28563F82D71BF346188108CBD4341FC4A71B90E543581646B4E7EAE920C54A

3.添加以下配置到该文件的最后面(特别需要注意 用户名root和密文之间是空格分隔,而不是换行)
cat <<EOF
set superusers=\'root\'
password_pbkdf2 root grub.pbkdf2.sha512.10000.B157F42E96462AB239C03000F113D32EB18FD48073F1FC7D8F87A8F3B3F89F662424ECCAB901F3A812A997E547FD520F3E99D0E080F4FE8B05E019757E34F75B.29C83F87B4B6C086FC9A81E046CC3623CC5CF2F82128EDC3A0364894E429D4993B28563F82D71BF346188108CBD4341FC4A71B90E543581646B4E7EAE920C54A
E0F
4.执行命令grub2-mkconfig -o /boot/grub2/grub.cfg
重新编译生成grub.cfg文件
复制代码

十四.最大文件打开数(文件句柄数)
默认配置:
[root@i-1y3we23j ~]# ulimit -n
1024

加固方案:
1.备份配置文件
cp -a /etc/security/limits.conf /etc/security/limits.conf.default
2.添加以下两行配置到该文件最后
* soft nofile 65535
* hard nofile 65535

备注:修改所有用户的最大文件打开数为65535

十五.用户最大进程数
默认配置:
复制代码
[root@i-1y3we23j ~]# cat /etc/security/limits.d/20-nproc.conf
# Default limit for number of user\'s processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

* soft nproc 4096
root soft nproc unlimited
复制代码

加固方案:
1.备份配置文件
cp -a /etc/security/limits.d/20-nproc.conf /etc/security/limits.d/20-nproc.conf.default
2.修改配置文件vim /etc/security/limits.d/20-nproc.conf
* soft nproc 65535
* hard nproc 65535
备注:修改所有用户的最大进程数为65535

十六.系统参数调优
默认配置:

加固方案:
复制代码
1.备份配置文件
cp -a /etc/sysctl.conf /etc/sysctl.conf.default
2.添加以下调优参数到该文件中
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.route.gc_timeout = 20
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_wmem = 8192 131072 16777216
net.ipv4.tcp_rmem = 32768 131072 16777216
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.core.somaxconn = 262144
net.core.netdev_max_backlog = 262144
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.route.gc_timeout = 20
net.ipv4.ip_local_port_range = 10024 65535
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_wmem = 8192 131072 16777216
net.ipv4.tcp_rmem = 32768 131072 16777216
net.ipv4.tcp_mem = 94500000 915000000 927000000

fs.file-max = 65535
kernel.pid_max = 65536
net.ipv4.tcp_wmem = 4096 87380 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_max_syn_backlog = 10240

net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1


net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_max_tw_buckets = 36000

 

 

阿里云 Centos7 安全加固

ssh配置:(防暴力破解)
useradd normal //创建一个系统用户,设置只能通过这个用户远程登录系统
vim /etc/ssh/sshd_config

修改
Port 2000 //端口必须大于1024
Protocol 2 //没有的话就添加,有就不用
PermitEmptyPasswords no //禁止空密码登录
X11Forwarding no //禁止端口转发
PermitRootLogin no //禁止root用户登录
MaxAuthTries 3 //允许三次尝试
LoginGraceTime 20 //在20秒内不能完成登录,则断开连接
AllowUsers normal //添加,只允许这个用户远程登录
保存退出,重启ssh

防火墙开启ssh端口
firewall-cmd --zone=public --add-port=2000/tcp --permanent
firewall-cmd --reload

selinux开启ssh端口
yum -y install policycoreutils-python //安装selinux端口管理工具
semanage port -a -t ssh_port_t -p tcp 2000 //添加端口
semanage port -l |grep ssh //查看selinux开启的ssh端口
service sshd restart

防止IP SPOOF攻击
vim /etc/host.conf
末尾添加
nospoof on

禁止被ping
vim /etc/sysctl.conf
有则修改,无则添加
net.ipv4.icmp_echo_ignore_all=0
保存配置
sysctl -p

防火墙禁止被ping
firewall-cmd --permanent --add-rich-rule=\'rule protocol value=icmp drop\'
firewall-cmd --reload
注意:也可以在阿里云控制台的安全组规则,删除允许ICMP协议的规则

每十多天更新一次系统,删除没有用到的软件,清除yum缓存
crontab -e
以下内容按需修改
0 0 */10 * * yum update -y
0 0 */11 * * yum autoremove -y
0 0 */12 * * yum clean all

防火墙禁止端口扫描(centos7无效,端口还是被扫描出来了,不知道centos7以下是否生效)

iptables -F #清除防火墙策略
iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j Drop
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j Drop
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j Drop
iptables -A INPUT -p tcp --tcp-flags SYN,SYN --dport 80 -j Drop

卸载阿里云的云盾(安骑士),因为服务器本来就内存紧张,云盾弊大于利,卸载

wget http://update.aegis.aliyun.com/download/uninstall.sh
chmod +x uninstall.sh
./uninstall.sh
wget http://update.aegis.aliyun.com/download/quartz_uninstall.sh
chmod +x quartz_uninstall.sh
./quartz_uninstall.sh
pkill aliyun-service
rm -fr /etc/init.d/agentwatch /usr/sbin/aliyun-service
rm -rf /usr/local/aegis*

注意:卸载完成后,可以删除以上两个脚本文件

屏蔽云盾IP,云盾会定期扫描服务器模拟黑客攻击

vim shield_ip.sh

添加如下内容:

#!/bin/bash
echo "开始屏蔽云盾扫描云服务器的IP"
firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="140.205.201.0/28" drop\'
firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="140.205.201.16/29" drop\'
firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="140.205.201.32/28" drop\'
firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="140.205.225.192/29" drop\'
firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="140.205.225.200/30" drop\'
firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="140.205.225.184/29" drop\'
firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="140.205.225.183/32" drop\'
firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="140.205.225.206/32" drop\'
firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="140.205.225.205/32" drop\'
firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="140.205.225.195/32" drop\'
firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="140.205.225.204/32" drop\'
firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="106.11.224.0/26" drop\'
firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="106.11.224.64/26" drop\'
firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="106.11.224.128/26" drop\'
firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="106.11.224.192/26" drop\'
firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="106.11.222.64/26" drop\'
firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="106.11.222.128/26" drop\'
firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="106.11.222.192/26" drop\'
firewall-cmd --permanent --add-rich-rule=\'rule family=ipv4 source address="106.11.223.0/26" drop\'
firewall-cmd --reload

保存退出

chmod +x shield_ip.sh
./shield_ip.sh

注意:这些IP地址段来源于阿里云官方给的云盾服务器IP,来源:(https://help.aliyun.com/knowledge_detail/37436.html)

编码设置:

vim /etc/locale.conf

删除原有,添加如下内容:

LANG=zh_CN.utf8 //中文界面
LC_MESSAGES=en_US.utf8 //英文提示

reboot //重启生效

进入阿里云控制台,云服务器ECS–>安全组–>配置规则–>添加安全组规则

 


安全组添加ssh端口,否则外网是无法进入的,包括ftp和apache的端口不在安全组开放的话

下载xshell远程登录软件,normal用户远程登录至linux系统,xshell的使用不再赘述,登录成功后

su - root //提权

注意:在阿里云控制台远程连接登录系统后,不能以任何用户一直处于登录状态,使用系统完后,必须退出用户登录,界面保持在需要输入用户名的界面

如:在阿里云控制台登录(而不是xshell登录),退出用户登录命令

logout //exit也可以

注意:root用户的话必须退出两次才可以

最后:在阿里云控制台–>安全(云盾)–>态势感知–>开启态势感知服务–>设置邮箱或短信提醒