12一个Linux的Apache PHP和MySQL Web服务器根灯的措施,确保
黑客攻击的频率在最近几个月急剧增加。 尤其是大量的数据被拾起的Web服务器上的黑客。 甚至索尼PSN的黑客利用未打补丁的Apache Web服务器漏洞。 所以在这里我提高服务器可以拥有对来自外部的攻击多了一点安全的措施。 当然,这还不能提供100%的保护,但最好是有点难度的游戏,使坏人。 一些措施,只需要一个最小的安装和维护。 其他需要很多的时间和知识的PHP赶上。 你应该始终注意在选择安全措施的成本效益比。 这是没有意义的,以保护小,像联邦储备银行的私人网站。 然而,该系统的一些具体变化已经有一个大意味着更安全。 你应该治疗,即使之前已经太晚了....
所有的技巧和Codesnips是指当前的Debian中。
第一 防火墙-禁止一旦一切
他们的默认安装中的大多数Linux发行版是完全没有必要向外界打开任何端口。 可以迅速改变这种情况,但是,即使在服务器
玩弄和尝试的事情。 突然,甚至有媒体服务器在互联网上或数据库正在听
接受来自Internet的连接。 因此,它是没有错的自律,并在一个非常严格的防火墙,基本上一旦禁止从外部的所有连接,并允许只(自)选定的化合物。 幸运的是,这是迅速完成使用iptables。 这种方式可以不再提供服务,使世界上有没有业务访问。 不幸的是,你付出一点点安慰 - 防火墙必须调整的时候,你要提供新的服务。 尽管如此,这种努力是小的好处大。
#/斌/庆典 #删除现有的表 iptables的 - F #禁止所有传入连接。 iptables的磷输入降 iptables的磷正向压降 #允许所有传出 iptables的P输出接受 #允许SSH 的iptables-A INPUT-J ACCEPT-P的TCP - dport 22 #允许HTTP 的iptables-A INPUT-J ACCEPT-P的TCP - dport 80 #延伸服务(UDP)允许,例如,游戏服务器 的iptables-A INPUT-J ACCEPT-P的TCP - dport 4534 #允许从本地主机的一切。 (为了让畅通无阻的访问服务器本身,它的服务, #例如,在本地数据库的PHP 的iptables-A INPUT-S 127.0.0.1-J接受 #已经建立的连接将被接受,在每个端口 #(某些守护进程需要) 建立的iptables-A INPUT-M的状态 - 状态,相关-J接受
这个小骨干,我们可以简单地继续扩大,并添加自己的服务。 防火墙工作时,你应该总是作出规定的情况下,锁定了自己。 特别是对于远程服务器,您没有物理访问,这是很烦人失去统治自己获得一个失败的防火墙。 为了避免这一问题的方式,你可以离开工作,开始在防火墙暂时只是一个cron作业,重置防火墙每隔几分钟或重新启动服务器。 规则后测试和喜爱,将被停用的cronjob和新的规则永久保持活跃。
为了找出哪些服务只是在听自己的服务器,可以使用netstat:
#TCP套接字: NETSTAT-LPN | grep的TCP #同样为UDP: NETSTAT-LPN | grep的UDP
为了检验防火墙,如果确实有效,你可以端口扫描自己的服务器,从另一台计算机。 一切工作,它应该导致中唯一的,甚至是开放港口:
#TCP: nmap的-P1-65 535 meinserver.de #UDP: 使用nmap-SU-P1-65 535 meinserver.de
第二 SSH登录的禁令
对自己的根服务器,你有充分的SSH访问。 这是很方便,你可以从任何SSH客户端服务器时代只是工作。 这个缺点是任何人谁不幸的是某种程度上采取了自己的密码,当然可以。 它更安全,只允许有一个有效的密钥文件的SSH登录。 因此,服务器和复制的交互式登录的客户端公共密钥被禁用,输入密码。
#在客户端,创建一个公钥 #如果指定产生密码时,需要 #日志文件后,钥匙和密码。 否则 #只需要关键。 的ssh-keygen-T RSA #复制到服务器生成的关键 ssh拷贝的ID-I〜/。SSH / id_rsa.pub root@meinserver.de的 #现在调整sshd_config文件服务器上的/ etc / ssh目录/ 。 。 PasswordAuthentication没有 。 。 然后重新启动RearBBpos / etc / init.d下/ SSH重新启动
即使在这里,应该采取预防措施,不拒之门外的东西,即使不起作用。
公钥相应的密码在你的脑袋上的一个USB棒使坏人更难获得一个shell。
第三 SSH的暴力破解防止denyhosts
如果建议是不实际的2,你不放弃基于密码的登录要方便,至少可以防止攻击者在服务器上自动密码率。 很多在互联网上的机器人整天什么也不做,而不是SSH服务器,并尝试在你的各种密码。 有了一个合理的安全密码是不是一个大问题,但有一个更好的感觉,不,即使这是可能的。 此外,它也可以保护它的用户,如果有服务器和用户帐户。 在这里,你可以不依靠对用户的使用安全的密码。 的denyhosts不断检讨和ssh登录用户对于那些已经进入他们的密码不正确,反复而锁定。 用户的IP地址的暂时进入/ etc / hosts.deny文件,从而使他们不再有访问是可能的。 今年的SSH暴力破解一个非常漫长的,而不是非常有前途的任务。
apt-get的安装denyhosts #Denyhosts工作后安装。 它可以是 #在文件/ etc / denyhosts.conf微调
4 黑名单用来阻止已知的问题IPS
在各种互联网黑名单维护,大量的犯罪/碎/垃圾/欺诈服务器列表。 这些IP列表,可以直接进入到防火墙,所以,从这个被称为不信任的计算机无法连接到它自己的服务器。 所以,你可以减少自己的服务器上的垃圾邮件数量急剧一个或其他脚本小子锁定了,因为他的俄罗斯代理突然停止工作。 怎么办,我一直在另一篇博客文章描述了黑名单的Infiltrated.net的例子。
5 不使用FTP服务器上的工作
FTP是一个更好的时间上网的时候,仍然值得信赖的一个小村庄的遗迹。 许多网站管理员仍然可以使用FTP将文件传输到服务器,或工作在自己的网站上。 不幸的是,这是非常不确定的,因为FTP传输所有的数据不安全。 口令和数据,可以读取没有任何问题,在每个服务器和客户端之间的一跳。 更安全与sshfs的。 让您安装在远程服务器上的本地文件系统通过ssh目录。 然后,您可以在服务器上工作,如果他是在本地计算机上。 所有的文件访问服务器上的文件是完全透明的,因此与当地的图形程序可以打开直接编辑服务器上的图像,然后保存。 毫不费力地更加舒适和安全。
#安装SSHFS的 apt-get的安装sshfs的 #创建本地文件系统的挂载点 MKDIR /媒体/ MYSERVER #服务器到本地文件系统的挂载 sshfs的www-data@mein-server.de :/ var / www下面/媒体/ MYSERVER #现在的目录是/ var / WWW对我的本地服务器/媒体/ myserver的可用
6 安装更新
一个超级安全的系统将不利于如果系统本身是有缺陷的和可以利用已知的漏洞。 在大多数情况下,迅速关闭这些漏洞,但常常被人遗忘的管理系统,使定期更新。 是否应该在Linux服务器上启用自动更新,或者是一个有争议的问题。 有些人永远不会做,因为它自然有很多运气不好,可能是更新,使系统无法使用。 这在Debian系统工作10年以上发生在我身上,但从来没有和我很欣赏的及时和定期更新的好处,比所产生的风险高出很多。
#这行,在/ etc / crontab中更新系统时钟,每天上午6时 0 6 ***根apt-get的更新&& apt-get的-Y升级
这些快速和肮脏的方法为我工作至今总是好的。 最近,我读,无人值守的升级在Debian仓库和包存在,解决问题可能更优雅,但我没有测试过。
即使这些vollautomtischen系统更新,它是不完全打爆。 如果一个内核更新已交付,你有尚未手再次引导系统,否则修改将不会被激活。
如果我们使用一个开源的CMS或论坛,如服务器,第三方的PHP代码,当然,这是绝对必要的,这个代码与新版本的最新。 由于Debian不更新其修改在覆盖此体力劳动的规则的应用程序是必需的。 阅读你的邮件列表与相应的产品,以始终保持最新最好的办法。
7 用open_basedir PHP的监禁
许多黑客的基础,在PHP代码中的一个漏洞被用来访问文件的文件系统访问,我不属于网站的事实,但系统本身,你为什么要锁定的PHP,以便它读在专门指定的目录只和写不允许的。 对于这一点,在php.ini中的open_basedir配置选项。 PHP的选项,将只允许访问目录。 如/ etc / passwd中的文件是遥不可及。 一台服务器上托管多个网站,你应该设置在每个虚拟主机的配置,每边的open_basedir。
#全球的php.ini通过: #/ Etc/php5/apache2/php.ini 的open_basedir = / var / www下面/ :/ tmp目录/ #每个站点的虚拟主机配置: php_value的open_basedir / var / www下面/网站/ :/ tmp目录/
重要的是要考虑所有的网站是否已被添加到脚本通常需要访问的,否则它可能是你是残疾人和合法的PHP应用程序的功能。
8 MySQL用户创建自己的网站
使用自己的PHP-MySQL应用程序,你绝对应该创建Apllikation自己的MySQL用户在任何情况下使用MySQL root用户的请求。 你也应该限制用户的权利,到目前为止,实际上只允许操作,这需要PHP脚本。 的CREATE TABLE和DROP TABLE是常见的SQL注入,并在大多数PHP应用程序从未要求。 它承载多个数据库服务器上的多个网站,你应该为所有用户创建自己的数据库。 因此,一次成功的攻击后,攻击者只访问一个数据库,而不是直接在所有。 如果你不想尝试在命令行来管理MySQL的用户帐户,用户管理功能也很容易与“权利”选项卡下的phpMyAdmin。
9 PHP的错误消息关闭
PHP的错误信息,攻击者可以揭示了很多关于自己的服务器目录结构,数据库结构,配置错误等,他们也非常不专业的用户寻找。 为此,他们应该是一个活的Web服务器,一定要关闭,因为你只是要继续在日志中看到。
#全球的php.ini通过: #/ Etc/php5/apache2/php.ini 的display_errors =关 #每个站点的虚拟主机配置: php_flag的display_errors关闭 #错误消息读也无妨: CAT / var/log/apache2/error.log的| grep的PHP
10 目标为SQL注射用ModSecurity的限制
SQL注射是最常用的Web服务器上的攻击方法。 通过Web应用程序的直接访问,它满足了浏览器来执行他们。 这里传送内置SQL查询发送到数据库的用户都将删除其数据库读取或编辑它们的特权的用户变量。 一个真正的防止SQL注入真正的保护是存在的,只有当PHP代码编写有关这些攻击的网站。 每个用户输入的变量,这可能会进入一个SQL查询,它必须测试和逃脱。 PHP提供的功能real_mysql_escape_string()。
如果你不知道,如果代码是干净的,可以适用于Apache的mod_security帮助关闭这些攻击大量的病房反正。 mod_security的不断检讨所有Web服务器的请求和响应预模式可以阻止许多SQL注入攻击。 不幸的是,只有行之有效mod_security的手动工作。 后往往还需要一个全新的安装mod_security的块(定期)的功能,你的PHP代码,使一个有没有其他选择,作为完整的应用程序,再次安装测试。 只有那么一个找出是否mod_security的,甚至可能不希望阻塞功能。 如果是的话,然后进行调整的过滤器列表中消失,使假阳性。
mod_security的配置有点复杂,已经超出了本文的范围,但也有好的教程在互联网上的mod_security吨。
11日 检查身份证- Apache不知道他是谁
这是不是真的对黑客攻击的有效方法,它使服务器版本的自动化脚本,但稍重。 通常Apache的错误消息(如404未找到)服务器签名页。
apache/2.2.16(UNIX)服务器在80端口www.daniel-ritter.de
它消除任何潜在的侵略者会前收到有关eigesetzten Web服务器和版本级别至少一次。 签名服务器被迅速关闭:
#/ Etc/apache2/conf.d/security ServerSignature关闭
12 不要使用禁用Apache模块
默认情况下,Apache已经载入了一些,几乎从来不需要的模块。 在Debian中,你可以找到加载的模块
作为一个软链接/ etc/apache2/mods-enabled。
几乎总是可以被删除:
mod_cgi的
用来运行CGI脚本。 这种技术可以追溯到黎明网络和现代脚本语言允许动态网站的鼻祖。 mod_cgi的PHP网站的99%是不必要的,和一个错误的Apache config是一个潜在的安全漏洞
a2dismod CGI
mod_status的
让浏览器读取状态信息,在Apache。 它几乎从来没有使用“正常”的网站,提供有关袭击者但Apache的状态信息。
a2dismod状态
mod_autoindex
mod_autoindex确保在Web服务器上,可以列出目录,如果没有相应的目录中的有效索引页。 如果不想要这个功能,你应该禁用它,因为它在Web服务器上的整个目录树可以是外部可见。
a2dismod autoindex
