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

服务器安全问题是每个运维从事人员不可或缺的一部分工作,在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文件做日志分割后,可以每天执行一次脚本,写入定时任务即可。

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的安全策略也不适合对所有的服务器做)

结语:没有永远完备无患的安全策略,只有不断升级完善的安全策略,最好的安全策略就是多看安全日志,根据不同的应用场景制订出相应的安全策略,才能在日益严峻的安全环境下安全无虞。

猜你喜欢

转载自www.cnblogs.com/xiaoyuxixi/p/11374071.html