Linux Web 服务器,SSH-PHP-MySQL-Nginx-Apache安全

首先将linux系统尽量伪装成windows服务器,这样对一些只会用工具来扫描的菜鸟来说,误扫到密码的可能性将缩小很多。 毕竟机器处公网环境,也没完全的把握不中招,禁止掉ping,修改web服务器的一些信息,当然也可以用iptabales限制ssh登录地址的ip,可有时候也显得不方便。
我的服务器远程端口修改的是3389端口,这样貌似具有诱惑力些。当你把端口修改成3389后,用工具扫描端口的话,在安全日志中会出现这样的错误信息,
Bad protocol version identification '\003' from 110.76.39.161
这样就可以针对这样的错误信息来处理,具体脚本如下,然后做个计划任务定时来运行脚本:
#!/bin/bash
#author libertyspy
#link http://www.lastme.com
#/sbin/iptables -F
for i in grep "Bad protocol" /var/log/secure | awk '{print $12}' | \
sort | uniq -c | sort -nr |awk '{print $2}'| head -20

do echo $i >> /etc/bash_script/log/drop-ip-address.log \
/sbin/iptables -I INPUT -p tcp --dport 3389 -s $i -j DROP done /sbin/iptables-save
/etc/init.d/iptables
restart /etc/init.d/sshd restart
exit

没学过shell脚本,都是用命令凑合而成,很多都没涉及到,比如有有时候会误杀自己的ip,也没判断重复的ip等等,也只能作为参考下了。当然也可以完全用iptables策略来防止。 🙂

一.SSH的安全设置:
1. 禁用ROOT用户登录:
root@localhost /# vim /etc/ssh/sshd_config //找到 #PermitRootLogin yes 这行,去掉前面的注释,将yes改为 no.
2.更改远程端口:
root@localhost /# vim /etc/ssh/sshd_config //找到 #Port 22 这行,将前面的#号去掉,并将 22 端口改成 3389(可按自己的需求改).
3.一个好的办法是用iptables来限制22或者已改后的端口的SSH登录,让非授权的IP扫描不到TCP 22或者 3389 端口的存在:
root@localhost /# iptables -I INPUT -s ! 123.123.123.123 -p tcp --dport 22 -j DROP
利用iptables,将本机的TCP 3389端口转移到其它开有3389端口的计算机上,给Linux系统伪装出一个提供服务的TCP 3389端口。命令如下:
root@localhost /# echo 1 > /proc/sys/net/ipv4/ip_forward
root@localhost /# iptables -t nat -I PREROUTING -p tcp --dport 3389 -j DNAT --to 123.123.123.123
root@localhost /# iptables -t nat -I POSTROUTING -p tcp --dport 3389 -j MASQUERADE

4.针对netcraft这种扫描工具,可用iptables进行系统伪装,使netcraft错误判断操作系统,从而 "迷惑" 扫描工具:
root@localhost /# iptables -t nat -I PREROUTING -s 195.92.95.0/24 -p tcp --dport 80 -j DNAT --to xx.xx.xx.xx
root@localhost /# iptables -t nat -I POSTROUTING -s 195.92.95.0/24 -p tcp --dport 80 -j MASQUERADE

5.更改默认的TTL值的基数,执行以下命令:
root@localhost /# echo 128 >> /proc/sys/net/ipv4/ip_default_ttl重启后就没效果了,若想使设置永久生效,可以修改 /etc/sysctl.conf 配置文件:
root@localhost /# echo "net.ipv4.ip_default_ttl = 128" >> /etc/sysctl.conf
保存退出后,执行 sysctl -p,再 ping 123.123.123.123,TTL基数就变为128了。

二.Apache/Nginx/PHP/MySQL的安全设置:
1.隐藏 Apache 版本信息,源码安装的话,可以在编译安装的时候,修改相应的头文件来改成任意的名字,也可以在apache配置文件最后面添加如下两行,重启 apache以后 http 头里面只看到:Server: Apache
root@localhost /# vim /PATHTO/apache2/conf/httpd.conf //你的apache安装路径,在最后添加如下两行
ServerTokens ProductOnly
ServerSignature Off

2.隐藏nginx版本,和apache一样,编译的时候,可以修改含有版本信息头文件实现,也可以在编译安装好后,直接在nginx主配置文件中添加一些选项来实现。
root@localhost /# vim /PATHTO/nginx/conf/nginx.conf //在http块中加上 server_tokens off; 也可以
3.隐藏PHP版本信息
root@localhost /# vim /PATHTO/php/etc/php.ini //expose_php On 改成 expose_php Off
重启apache(以Fast-CGI方式运行的话,只需要重启PHP-FPM)后,php版本在http头中隐藏了。

虽说对有经验的入侵者来说,这些都没特别大的用处,但对于那些只会拿着工具扫描工具的人来说,可以减少那些无聊的扫描 “碰巧” 的情况。
安全无绝对,重要的是每个安全的细节 🙂

No Comments