1.36. Linux初始化系统安全设置

1.36.1. 1.禁止系统响应任何从外部/内部来的ping请求

攻击者一般首先通过ping命令检测此主机或者IP是否处于活动状态。如果能够ping通某个主机或者IP,那么攻击者就认为此系统处于活动状态,继而进行攻击或破坏。如果没有人能ping通机器并收到响应,那么就可以大大增强服务器的安全性。Linux下可以执行如下设置,禁止ping请求。

[root@localhost ~]#echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

默认情况下“icmp_echo_ignore_all”的值为“0”,表示响应ping操作。

可以添加上面的一行命令到/etc/rc.d/rc.local文件中,以使每次系统重启后自动运行它。

1.36.2. 2.限制Shell记录的历史命令条数

默认情况下,Bash Shell会在文件$HOME/.bash_history中存放多达1000条命令记录(根据系统不同,默认记录条数不同)。系统中每个用户的主目录下都有一个这样的文件。 存放这么多的历史命令记录,肯定是不安全的,因此必须限制该文件的大小。

可以编辑/etc/profile文件,修改其中的如下选项。
HISTSIZE=30

这表示在文件$HOME/.bash_history中记录最近的30条历史命令。 如果将“HISTSIZE”设置为0,则表示不记录历史命令,于是也就不能用键盘的上下键查找历史命令了。

1.36.3. 3.删除系统默认的不必要用户和组

Linux 提供了各种系统账户,在系统安装完毕后, 如果不需要某些用户或者组,就要立即删除它,因为账户越多,系统就越不安全,越容易受到攻击。 删除系统不必要的用户用如下命令。

[root@localhost ~]# userdel username

删除系统不必要的组用如下命令。

[root@localhost ~]# groupdel  groupname

Linux系统中可以删除的默认用户有:adm、lp、sync、shutdown、halt、news、uucp、operator、games、gopher等,
可以删除的组有adm、lp、news、uucp、games、dip、pppusers、popusers、slipusers等。
## 4.关闭SELinux SELinux是 Security-Enhanced Linux的简称,是一种内核强制访问控制(MAC)安全系统,目前SELinux已经集成到Linux 2.6内核的主线和大多数Linux发行版上。由于SELinux与现有 Linux 应用程序和 Linux 内核模块兼容性还存在一些问题,因此建议初学者先关闭SELinux,等到对Linux有了深入的认识后,再对SELinux深入研究也不迟。 要查看Linux系统SELinux是否启用,可以使用getenforce命令。
[root@localhost ~]# getenforce
Disabled

#临时关闭SELinux
[root@localhost ~]# setenforce 0
setenforce: SELinux is disabled

#永久关闭SELinux
[root@localhost ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

将SELINUX=enforcing修改为SELINUX=disabled, 重启系统后将会停止SElinux。



sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

1.36.4. 5.设定tcp_wrappers防火墙

tcp_wrappers是一个用来分析TCP/IP封包的软件,类似的IP封包软件还有iptables,Linux默认都安装了此软件。作为一个安全的系统,Linux本身有两层安全防火墙,通过IP过滤机制的iptables实现第一层防护,iptables防火墙通过直观地监控系统的运行状况,阻挡网络中的一些恶意攻击,保护整个系统正常运行,免遭攻击和破坏。iptables的实现将在下一章详细讲述。如果通过了第一层防护,那么下一层防护就是tcp_wrappers了,通过tcp_wrappers可以实现对系统中提供的某些服务的开放与关闭、允许和禁止,从而更有效地保证系统安全运行。 tcp_wrappers的使用很简单,仅仅涉及两个配置文件:/etc/hosts.allow和/etc/hosts.deny。

(1)查看系统是否安装了tcp_wrappers

[root@localhost ~]#rpm -q tcp_wrappers 或者
[root@localhost ~]#rpm -qa | grep tcp
tcp_wrappers-libs-7.6-57.el6.x86_64

如果有上面的类似输出,表示系统已经安装了tcp_wrappers模块。 如果没有显示,可能没有安装,就需要通过yum或者rpm工具进行安装。

(2)tcp_wrappers防火墙的局限性 系统中的某个服务是否可以使用 tcp_wrappers 防火墙,取决于该服务是否应用了libwrapped库文件,如果应用了就可以使用tcp_wrappers防火墙,系统中默认的一些服务(如sshd、portmap、sendmail、xinetd、vsftpd、tcpd等)都可以使用tcp_wrappers防火墙。

(3)tcp_wrappers设定的规则 tcp_wrappers防火墙的实现是通过/etc/hosts.allow和/etc/hosts.deny两个文件来完成的,首先看一下设定的格式。

service:host(s)  [:action]

service:代表服务名,如sshd、vsftpd、sendmail等。
host(s):代表主机名或者IP地址,可以有多个,如192.168.60.0、www.ixdba.net。
action:代表动作,符合条件后所采取的动作。
几个关键字如下所示。
ALL:所有服务或者所有IP。
ALL EXCEPT:所有服务或者所有IP(除去指定的)。
例如,ALL:ALL EXCEPT 192.168.60.132表示除了192.168.60.132这台机器之外,任何机器执行所有服务时或被允许或被拒绝。
了解了设定语法后,下面就可以对服务进行访问限定。
例如,互联网上一台Linux服务器,实现的目标是:仅仅允许222.90.66.4、61.185.224.66以及域名softpark.com通过SSH服务远程登录系统,设置如下。 首先设定允许登录的计算机,即配置/etc/hosts.allow 文件,设置很简单,只要修改/etc/hosts.allow(如果没有此文件,请自行建立)这个文件即可。 只需要将下面的规则加入/etc/hosts.allow即可。
sshd:  222.90.66.4  61.185.224.66  softpark.com

接着设置不允许登录的机器,也就是配置/etc/hosts.deny文件了。 一般情况下,Linux会首先判断/etc/hosts.allow这个文件。

如果远程登录的计算机满足文件/etc/hosts.allow设定的规则,就不会使用/etc/hosts.deny文件了。 相反,如果不满足hosts.allow文件设定的规则,就会使用hosts.deny文件了。

如果满足hosts.deny的规则,此主机就被限制为不可访问 Linux 服务器。

如果也不满足 hosts.deny 的设定,此主机默认是可以访问 Linux服务器的。

因此,当设定好/etc/hosts.allow 文件的访问规则之后,只须设置/etc/hosts.deny 为“所有计算机都不能登录的状态”即可。

sshd:ALL

1.36.5. 6.运行级别设置为文本模式

cat /etc/inittab
id:3:initdefault:        设置默认运行级别
runlevel                 查看当前运行级别
## 7. 精简开机启动服务
只保留五个重要服务

crond
network
rsyslog
sshd
sysstat

关闭其它不需要的服务

chkconfig --list|grep 3:on|egrep -v "crond|sshd|network|rsyslog|sysstat"|awk '{print "chkconfig",$1,"off"}'|bash
## 8.优化Linux文件打开最大数 默认Linux内核对每个用户设置了打开文件最大数为1024,对于高并发网站,是远远不够的,需要将默认值调整到更大,调整方法如下: ulimit -n 65535
修改linux系统参数:vi /etc/security/limits.conf *  soft  nofile  65536*  hard  nofile  65536
修改以后保存,注销当前用户,重新登录,执行ulimit -a

可以使用命令修改

echo '* soft nofile 65535'>>/etc/security/limits.conf
echo '* hard nofile 65535'>>/etc/security/limits.conf
echo '* soft nproc 65535'>>/etc/security/limits.conf
echo '* hard nproc 65535'>>/etc/security/limits.conf

1.36.6. 9.Linux内核参数优化

实际生产环境服务器内核参数(BAT):

/etc/sysctl.conf文件

: <<EOF 其实,很多Linux的默认配置压根不符合我们的生产环境配置所需,有时候我们需要适当的调整一些内核参数,
#有时我们需要开启一些内核功能,有时我们需要关闭内核的某些功能。比如关闭ipv6,开启路由转发功能,关闭虚拟内存使用,
#套接字缓存大小调整等。我们需要根据自己的生产环境做出适当的分析,将一些默认值我们需要手动去配置一下,
#具体的参数信息大家可以自行百度,下面是我在生产环境中对某一个集群进行的调优参数配置:
EOF


cat /etc/sysctl.conf | egrep -v '^#|^$'
net.ipv6.conf.all.disable_ipv6 = 1
vm.dirty_ratio = 80
vm.dirty_background_ratio = 5
vm.swappiness = 1
net.core.wmem_default = 256960
net.core.rmem_default = 256960
net.ipv4.tcp_wmem = 8760  256960  4088000
net.ipv4.tcp_rmem = 8760  256960  4088000
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.core.netdev_max_backlog = 2000
vm.max_map_count = 262144

修改参数后,我们需要执行一条命令,就可以让他生效了,即“sysctl -p”
sysctl -p”

1.36.7. 10.Centos7 安装之后必要的初始化操作

参考文献

https://www.treesir.pub/post/centos-init-config/