暴露在公网环境下主机的安全防护

服务器安全问题是每个运维从事人员不可避免的一部分工作,在linux管理界乃至计算机界也都是一个首要考虑的问题。最近公司的部分机器需要暴露在公网环境下,如果不做安全策略的话,可能睡到半夜就会被叫起来处理问题,为睡眠安稳计,为工作质量计,特整理下关于基本安全防护的注意点与可操作点:

公司的部分主机需要能够与公网通信,相应的,远程连接安全是肯定需要做加固的,而一台公网上主机基本的安全策略有以下几点:

1.禁止主机被ping:如果能够ping通某个主机或者IP,那么攻击者就认为此系统处于活动状态,继而进行攻击或破坏。如果没有人能ping通机器并收到响应,那么就可以大大增强服务器的安全性,在linux下可以执行如下设置,来禁止ping请求:

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

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

2.禁止系统被重启:在linux的默认设置下,同时按下Control-Alt-Delete键,系统将自动重启,这种情况下很容易被重启,从而导致不可预知的问题,而禁止Control-Alt-Delete组合键重启系统,需修改/etc/inittab文件:

 

[root@localhost ~]#vi /etc/inittab
找到:ca::ctrlaltdel:/sbin/shutdown -t3 -r now    在之前加上"#"或者删除此行,即可,然后
[root@localhost ~]#telinit q

3.限制shell history所记录的命令:默认情况下,bash shell会在文件$HOME/.bash_history中存放多达1000条命令记录,攻击者可以根据这些命令来判断出主机的关键文件以及其他的关键信息,那就减少它所记录的命令或者关闭它:

 

[root@localhost ~]#vi /etc/profile
找到:HISTSIZE=1000
表示在文件$HOME/.bash_history中记录最近的1000条历史命令。将其修改为合适的值,如果将“HISTSIZE”设置为0,
则表示不记录历史命令,那么也就不能用键盘的上下键查找历史命令了。

4.删除系统默认的不必要用户和组:Linux提供了各种系统账户,在系统安装完毕,如果不需要某些用户或者组,就要立即删除它,因为账户越多,系统就越不安全,越容易受到攻击,具体的话根据实际情况,一般Linux系统中可以删除的默认用户和组分别为删除的用户,如adm,lp,sync,shutdown,halt,news,uucp,operator,games,gopher等。删除的组,如adm,lp,news,uucp,games,dip,pppusers,popusers,slipusers等。根据自己的需要进行操作。具体的命令为

[root@localhost ~]# userdel username
[root@localhost ~]# groupdel groupname

 

5.限制ssh访问IP:基于ssh的连接本质上来说是安全的,连接被监听是一般不用考虑的安全问题,但非法连接却是一个极大的安全隐患,但是我们可以于hosts.allow和hosts.deny文件允许或禁止ssh或telnet操作,降低系统被暴力破解的可能,具体的操作如下:

[root@localhost ~]#vi /etc/hosts.allow或者hosts.deny
ssh允许/禁止单个ip
sshd:192.168.220.1
ssh允许/禁止ip段
sshd:192.168.220.
telnet允许/禁止单个ip
in.telnetd:192.168.220.1
telnet允许/禁止ip段
in.telnetd:192.168.221.
值得一提的是,hosts.allow的优先级高于hosts.deny,所以呢,甚至可以将host.deny设置为ALL,拒绝所有ssh或telnet连接,在hosts.allow文件中配置业务IP,以实现最高的安全需求。

 

本条策略可以基于脚本来进行,可以使用脚本对安全日志进行过滤,将多次尝试进行ssh连接的IP信息写入hosts.deny文件中,直接拒绝它的请求,具体的操作方法如下:

#!/bin/bash 
num=10 #连接上限 
for i in `awk '/Failed/{print $(NF-3)}' /var/log/secure|sort|uniq -c|sort -rn|awk '{if ($1>$num){print $2}}'` 
do 
    echo "sshd:$i" >> /etc/hosts.deny
done

 

对secure文件做日志分割后,可以每天执行一次脚本,写入定时任务即可。如果觉得这样做比较麻烦,可以参照我的博客/系统安全/防止ssh暴力破解的小工具denyhosts中的介绍,使用denyhosts工具来进行防爆破安全加固,而且使用denyhosts可以更细致的根据需求完成拒绝请求。

6.修改ssh端口,禁止root用户远程登陆:所有的ssh非法连接都是基于指定端口与指定账户密码的,如果修改了默认的端口并禁止root用户远程登陆,那么安全性无疑是进一步的加强了:

PS:如果公司的上下班是非常规律的,甚至可以设置ssh服务的服务时间为9:00-18:00,这样的话,所有的问题都将不是问题,但同样的,如果在这个时间段之外需要远程处理,那就比较麻烦了,这条策略仅作参考。

 [root@localhost ~]#vi /etc/ssh/sshd_config
ssh默认的端口是22,修改的话,直接添加Port XXXX就可以了,这样就完成了修改,将其改为了XXXX(最好选择大于10000的不常用高位端口)
将sshd_config文件中PermitRootLogin yes改为PermitRootLogin no,这样root用户就不能远程登陆了(修改后,reload sshd服务,不要restart ssh服务,防止出现问题,无法远程连接,就尴尬了)

 

7.隐藏服务器的版本信息:这条策略主要针对的是web服务,如果对方访问了不存在资源,服务器404时,顺带给了对方web服务器的版本信息,这就相当危险了,对方拿着指定版本的服务器信息,就可以做针对性的攻击,十发九中。具体的隐藏办法根据服务器版本自行百度,不安全的设置如下图:

针对当前业界服务器集群化的应用场景,综合以上基本的安全策略,可以这样做:指定一台服务器做服务跳板机,将其端口映射到其他服务器的业务端口,其他服务器的只允许跳板机的数据包进来,然后对跳板机做全部的安全策略(毕竟ping的安全策略也不适合对所有的服务器做),还有就是关于堡垒机的问题,堡垒机的概念和这个方案的思想差不多,但堡垒机能够更细化的解决这些问题,而且还可以记录子账号的操作,方便查出导致问题的人。

8.至少设置一个复杂的密码:含有数字,大小写字母,特殊符号,尽可能的长,至少不少于10个字符。

结语:通用的基本安全策略就是这些,如果阅读中发现不够全面,欢迎指出补充,如果需要对指定功能的服务器做安全,那肯定需要在此基础上继续完善,但可以肯定的是:没有永远完备无患的安全策略,只有不断升级完善的安全策略,最好的安全策略就是多看安全日志,根据不同的应用场景制订出相应的安全策略,才能在日益严峻的安全环境下安全无虞。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章