下文小编整理了一篇Linux系统VPS安全与优化设置教程,希望这篇文章能够对各位带来帮助哦,虽然不是很高级但绝对是有用的.
VPS安全设置
一、用户权限安全设置
root权限太高,误操作就相当危险,所以日常操作使用普通账号,只有特定时候才使用su切换到root身份.
①、新建普通用户,比如zhangge
useradd zhangge
②、修改密码
passwd zhangge
③、将帐号加入wheel组
usermod -G wheel zhangge
④、设置只允许这个组的帐号,使用su命令切换到root
vim /etc/pam.d/su
找到#auth required pam_wheel.so use_uid
去掉行首的注释符 # 然后使用:wq 保存退出
接着vim /etc/login.defs
在最末添加SU_WHEEL_ONLY yes,再用:wq保存退出即可。
Ps:执行 echo "SU_WHEEL_ONLY yes">>/etc/login.defs 亦可。
现在,再建立新的普通帐号,是无法使用su命令切换到root组了,感兴趣的可以测试下效果.
⑤、删除掉不需要的用户和用户组
禁止所有默认的被操作系统本身启动的并且不必要的账号,账号越多,系统就越容易受到攻击.
- userdeladm
- userdellp
- userdelsync
- userdelshutdown
- userdelhalt
- userdelnews
- userdeluucp
- userdeloperator
- userdelgames
- userdelgopher
- userdelftp
- groupdellp
- groupdelnews
- groupdeluucp
- groupdelgames
- groupdeldip
- groupdelpppusers
⑥、锁定口令文件
执行chattr命令给下面的文件加上不可更改属性,从而防止非授权用户获得权限.
- Shell
- chattr+i/etc/passwd
- chattr+i/etc/shadow
- chattr+i/etc/group
- chattr+i/etc/gshadow
二、SSH安全设置
①、修改SSH端口
默认的SSH使用22端口,众所周知,所以我们有必要自定义只有自己才知道的端口号,而且增加那些恶意扫描端口的难度,建议把SSH端口改到10000以上,比如使用23212,如下修改:
Ps:修改前,请执行iptables -nL 确认防火墙未设置非22/80访问限制规则,否则可能导致修改后无法使用自定义端口连接就悲剧了.
vim /etc/ssh/sshd_config 编辑SSH配置文件
i. 找到#Port 22,去掉#号,并在下面添加Port 23212(先保留22端口,等23212成功连接再去掉22,保险做法)
ii. 继续找到#UseDNS yes,改成UseDNS no,可以提高ssh的连接速度;
iii. 找到#PermitRootLogin Yes 改成 PermitRootLogin no 禁止root远程使用ssh登录
iv. 找到#PermitEmptyPasswords no,去掉#号, 禁止空密码登录
最后,使用 :wq 保存退出,再执行 service sshd restart 重启 ssh服务即可生效.
此时,可以新开一个终端,测试能否通过23212端口连线,如果可以就把之前保留的port 22删除即可.
三、防火墙简单安全设定
这个VPS是直接使用公网IP的,防火墙还是得简单设置下.
前期如下规划:
仅作为web服务器使用,所以只需要开放SSH和HTTP端口即可,即只要开放上面定义的23212和80端口,由于不使用ftp,本例未提到21号端口,实际使用请注意辨别。
①、准备工作
由于操作防火墙具有一定的误操作风险,很可能导致自己也被阻挡在外的悲剧,所以操作防火墙之前事先一定要先建立一个关闭防火墙的计划任务,比如:
执行 crontab -e 加入:
1
*/5 * * * * root /etc/init.d/iptables stop
表示每5分钟停止一次防火墙,以防误操作把自己挡在外面,就算出现误操作,5分钟之内将会停止,也不会造成悲剧,这是一个技巧!
②、防火墙设置脚本
以下代码我亲测无误,请放心使用,策略说明:
i. 仅开通HTTP(80)和SSH(自动抓取)端口,其他一律拒绝访问!可根据实际需要在第10行添加其他端口,比如FTP的21端口、smtp25端口等。
ii. 单向禁ping设置,即外部IP无法ping通你的公网IP.
- Shell
- #!/bin/bash
- ssh_port=`netstat-nutlp|grepsshd|grep0.0.0.0|awk'{print$4}'|cut-d":"-f2`
- iptables-F
- iptables-F-tnat
- iptables-X
- iptables-PINPUTDROP
- iptables-POUTPUTACCEPT
- iptables-PFORWARDDROP
- iptables-AINPUT-ilo-jACCEPT
- iptables-AINPUT-mstate--stateESTABLISHED,RELATED-jACCEPT--phpfensi.com
- iptables-AINPUT-ptcp-mmultiport--dport80,$ssh_port-jACCEPT
- iptables-AINPUT-picmp--icmp-type0-jACCEPT
- /etc/init.d/iptablessave
- exit0
确认无误后,记得把第①步中的任务计划取消.
如我的VPS防火墙规则如下.
四、其他安全设置
①、禁ping
执行如下命令即可:
Shell
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
然后用你的电脑ping服务器IP就可以看到效果了!当然如果你用了上面的防火墙脚本,就已经自带禁ping功能了。两种方法的区别如下:以上方法,ping能够返回消息(前提是防火墙未做阻挡规则,否则直接超时):
采用防火墙的方法,则直接超时:
Ps:个人推荐使用上文的防火墙脚本设置,更彻底。
②、开启TCP SYN Cookie保护
执行 echo 1 > /proc/sys/net/ipv4/tcp_syncookies 即可。
做到这里,你的VPS已经具备不错的安全性了,当互联网没有绝对的安全可言,我们必须时刻注意网络安全动态,随时对已经暴露出的和潜在安全漏洞进行修补。
VPS优化设置
一、增加SWAP分区
VPS(Virtual Private Server 虚拟专用服务器)技术,将一部服务器分割成多个虚拟专享服务器的优质服务。每个VPS都可分配独立公网IP地址、独立操作系统、独立超大空间、独立内存、独立执行程序和独立系统配置等。
下面是配置过程中的一些笔记:VPS只有一个根分区,没有swap交换分区。VPS内存不大,于是,我为其增加了一个swap交换文件。
1、进入一个目录
cd /var/
2、获取256M的文件块:
dd if=/dev/zero of=swapfile bs=1024 count=262144
3、创建swap文件
/sbin/mkswap swapfile
4、激活swap文件
/sbin/swapon swapfile
5、查看一下swap是否正确:
/sbin/swapon -s
6、加到fstab文件中让系统引导时自动启动
vi /etc/fstab
在末尾增加以下内容:
/var/swapfile swap swap defaults 0 0
Ps:这个方法在玛思阁以前的文章同样整理过,详见:给已安装的Linux新增Swap交换分区。
二、修改Linux系统时区
系统默认为美国东部时间,修改Linux时区为东八区
cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
三、Linux内核参数优化
Linux内核参数优化可以使用 sysctl 命令完成,但是命令只能临时生效,若要永久保留配置,我们就得编辑sysctl.conf这个文件了。先附上sysctl.conf详细参数说明
sysctl.conf 文件中参数设置及参考推荐值
需要优化的朋友,可以参考上面的参数说明,并根据服务器实际负载来定制你的sysctl.conf文件,下面贴上一个针对nginx内核参数优化的例子,仅供参考(待补充):
- net.ipv4.ip_forward=0
- net.ipv4.conf.default.rp_filter=1
- net.ipv4.conf.default.accept_source_route=0
- kernel.sysrq=0
- kernel.core_uses_pid=1
- net.ipv4.tcp_syncookies=1
- kernel.msgmnb=65536
- kernel.msgmax=65536
- kernel.shmmax=68719476736
- kernel.shmall=4294967296
- net.ipv4.tcp_max_tw_buckets=6000
- net.ipv4.tcp_sack=1
- net.ipv4.tcp_window_scaling=1
- net.ipv4.tcp_rmem=4096873804194304
- net.ipv4.tcp_wmem=4096163844194304
- net.core.wmem_default=8388608
- net.core.rmem_default=8388608
- net.core.rmem_max=16777216
- net.core.wmem_max=16777216
- 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_synack_retries=1
- net.ipv4.tcp_syn_retries=1
- net.ipv4.tcp_tw_recycle=1
- net.ipv4.tcp_tw_reuse=1
- net.ipv4.tcp_mem=94500000915000000927000000
- net.ipv4.tcp_fin_timeout=1
- net.ipv4.tcp_keepalive_time=30
- net.ipv4.ip_local_port_range=102465000
将以上代码添加到sysctl.conf文件的最后,然后执行/sbin/sysctl -p 即可生效。
三、关闭多余tty,释放内存
linux默认会启动6个TTY控制台,都需要常驻占用内存(1tty占用4M多的样子),事实上没必要需要使用这么多tty,个人vps,仅需1~2个tty即可。
Centos5.* 设置tty数量:
①、编辑 /etc/inittab,找到 tty [1-6] 改成 tty [1-2]
②、编辑 /etc/sysconfig/init,同样将tty [1-6] 改成 tty [1-2]
重启系统即可生效(建议先不重启,等后续操作完成一起重启即可).
CentOS 6.* 设置tty数量:
CentOS 6.0 开始 TTY 的配置由 /etc/inittab 更改为 /etc/init/start-ttys.conf,所以上面的第①步变为:
①、编辑 /etc/init/start-ttys.conf,找到 tty [1-6] 改成 tty [1-2]
②同上编辑即可
四、关闭ipv6
ipv6一般都用不到,完全关闭即可。
编辑 /etc/modprobe.d/dist.conf 文件,在最后追加:
alias net-pf-10 off
alias ipv6 off
然后重启系统即可(某些发行版可能是/etc/modprobe.conf文件).
五、关闭多余启动项
执行 chkconfig --list | grep :on 列出启动项:
然后找到不需要启动的项目,执行 chkconfig 程序名 off 即可.
比如,ip6tables 是ipv6防火墙,用不到,执行 chkconfig ip6tables off,然后执行service ip6tables stop即可彻底关闭ip6tables这个多余进程.
其余进程,请先查清楚作用,再来操作,以免出错,暂时就整理这么多,后续发现更多的优化设置,再来追加~