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

首先将linux系统尽量伪装成windows服务器,这样对一些只会用工具来扫描的菜鸟来说,误扫到密码的可能性将缩小很多。 毕竟机器处公网环境,也没完全的把握不中招,禁止掉ping,修改web服务器的一些信息,当然也可以用iptabales限制ssh登录地址的ip,可有时候也显得不方便。
我的服务器远程端口修改的是3389端口,这样貌似具有诱惑力些。当你把端口修改成3389后,用工具扫描端口的话,在安全日志中会出现这样的错误信息,

这样就可以针对这样的错误信息来处理,具体脚本如下,然后做个计划任务定时来运行脚本:

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

一.SSH的安全设置:
1. 禁用ROOT用户登录:

2.更改远程端口:

3.一个好的办法是用iptables来限制22或者已改后的端口的SSH登录,让非授权的IP扫描不到TCP 22或者 3389 端口的存在:

利用iptables,将本机的TCP 3389端口转移到其它开有3389端口的计算机上,给Linux系统伪装出一个提供服务的TCP 3389端口。命令如下:

4.针对netcraft这种扫描工具,可用iptables进行系统伪装,使netcraft错误判断操作系统,从而 "迷惑" 扫描工具:

5.更改默认的TTL值的基数,执行以下命令:

重启后就没效果了,若想使设置永久生效,可以修改 /etc/sysctl.conf 配置文件:

保存退出后,执行 sysctl -p,再 ping 123.123.123.123,TTL基数就变为128了。

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

2.隐藏nginx版本,和apache一样,编译的时候,可以修改含有版本信息头文件实现,也可以在编译安装好后,直接在nginx主配置文件中添加一些选项来实现。

3.隐藏PHP版本信息

重启apache(以Fast-CGI方式运行的话,只需要重启PHP-FPM)后,php版本在http头中隐藏了。

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