Linux安全优化和内核参数优化方案有那些?
入口安全优化
ssh配置优化
修改之前,需要将/etc/ssh/sshd_config备份一个,比如/etc/ssh/sshd_config.old, 主要优化如下参数:
Port 12011
PermitRootLogin no
UseDNS no
#防止ssh客户端超时#
ClientAliveInterval 30
ClientAliveCountMax 99
GSSAuthentication no主要目的更改ssh远程端口、禁用root远程登录(本地还是可以root登录的)、禁用dns、防止ssh超时、解决ssh慢,当然也可以启用密钥登录,这个根据公司需求。
注意:修改以后需重启ssh生效,另外需要iptables放行最新ssh端口。
iptables优化
原则:用到哪些放行哪些,不用的一律禁止。
举下简单的例子:敏感服务比如mysql这种3306控制,默认禁止远程,确实有必要可以放行自己指定IP连接或者通过vpn拨号做跳板连接,不可直接放置于公网; 如单位有自己的公网IP或固定IP,那只允许自己的公网IP进行连接ssh或者指定服务端口就更好了。
用户权限以及系统安全优化
非root用户添加以及sudo权限控制
用户配置文件锁定
服务控制
默认无关服务都禁止运行并chkconfig xxx off,只保留有用服务。这种如果是云计算厂商提供的,一般都是优化过。如果是自己安装的虚拟机或者托管的机器,那就需要优化下,默认只保留network、sshd、iptables、crond、以及rsyslog等必要服务,一些无关紧要的服务就可以off掉了,
内核参数优化
进程级文件以及系统级文件句柄数量参数优化
默认ulinit -n看到的是1024,这种如果系统文件开销量非常大,那么就会遇到各种报错比如:
localhost kernel: VFS: file-max limit 65535 reached 或者too many open files 等等,那就是文件句柄打开数量已经超过系统限制,就需要优化了。
这个参数我们进程级优化文件如下:
vim /etc/security/limits.conf
# End of file
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
好了,退出当前终端以后重新登录可以看到ulimit -n已经改成了65535。另外需要注意,进程级参数优化还需要修改文件:
/etc/security/limits.d/90-nproc.conf 这个会影响到参数。查看某一个进程的limits可以通过cat /proc/pid/limits查看。默认这个文件参数推荐设置:
[root@21yunwei 9001]# cat /etc/security/limits.d/90-nproc.conf
* soft nproc 65535
root soft nproc unlimited
系统级文件句柄优化
修改/etc/sysctl.conf添加如下参数:
fs.file-max=65535
内核参数优化(这个是非常重要的)。具体优化的文件为/etc/sysctl.conf,后尾追加优化参数:
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.all.arp_announce=2
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.conf.lo.arp_announce=2
net.ipv4.tcp_synack_retries = 2
#参数的值决定了内核放弃连接之前发送SYN+ACK包的数量。
net.ipv4.tcp_syn_retries = 1
#表示在内核放弃建立连接之前发送SYN包的数量。
net.ipv4.tcp_max_syn_backlog = 262144
#这个参数表示TCP三次握手建立阶段接受SYN请求列队的最大长度,默认1024,将其设置的大一些可以使出现Nginx繁忙来不及accept新连接的情况时,Linux不至于丢失客户端发起的链接请求。
设置完以后执行命令sysctl -p使得配置新配置的内核参数生效。系统优化这个内核对系统本身安全以及高并发都非常的有效(可以解决大量TIME_WAIT带来的无法访问使用、系统文件句柄数量超出等等)。
net.ipv4.tcp_timestamps = 1 #开启时间戳,配合tcp复用。如遇到局域网内的其他机器由于时间戳不同导致无法连接服务器,有可能是这个参数导致。注:阿里的slb会清理掉tcp_timestamps
net.ipv4.tcp_tw_recycle = 1 #这个参数用于设置启用timewait快速回收
net.ipv4.tcp_max_tw_buckets = 6000 #参数设置为 1 ,表示允许将TIME_WAIT状态的socket重新用于新的TCP链接,该参数默认为180000,过多的TIME_WAIT套接字会使Web服务器变慢。
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1 #当服务器主动关闭链接时,选项决定了套接字保持在FIN-WAIT-2状态的时间。默认值是60秒。
net.ipv4.tcp_keepalive_time = 600 #当keepalive启动时,TCP发送keepalive消息的频度;默认是2小时,将其设置为10分钟,可以更快的清理无效链接。
net.ipv4.ip_local_port_range = 1024 65000#定义UDP和TCP链接的本地端口的取值范围。
fs.file-max=65535 #表示最大可以打开的句柄数;
设置完以后执行命令sysctl -p使得配置新配置的内核参数生效。这个内核对系统本身安全以及高并发都非常的有效(可以解决大量TIME_WAIT带来的无法访问使用、系统文件句柄数量超出等等)。