这篇翻译linux安全技术的文章为 ubuntu 12.04.2 LTS 而写,你也可以在任何其他 Linux 分发版上做相同的事情。
如果服务器已经有了一个公有IP,你会希望立即锁定 root 访问。事实上,你得锁定整个ssh访问,并确保只有你可以访问。增加一个新用户,把它加入admin组(在/etc/sudoers预配置以拥有sudo访问权限)。
代码如下 | 复制代码 |
$ sudo addgroup admin
|
你也将希望在你电脑上创建一个私有key,并且在服务器上禁用讨厌的密码验证。
代码如下 | 复制代码 |
$ mkdir ~/.ssh $ echo "ssh-rsa [your public key]" > ~/.ssh/authorized_keys
PermitRootLogin no |
重新加载SSH,使用修改生效,之后尝试在一个新会话中登陆来确保所有事情正常工作。如果你不能登陆,你将仍然拥有你的原始会话来做修改。
代码如下 | 复制代码 |
ssh stop/waiting ssh start/running, process 1599 |
更新服务器
既然你是访问服务器的唯一用户,你就不用担心黑客鬼鬼祟祟进入,再次正常呼吸。当有一些针对你服务器的更新时,正是修补的机会,所以动手吧,就现在。
代码如下 | 复制代码 |
sudo apt-get update sudo apt-get upgrade |
安装防火墙
安装现在正最流行的防火墙软件?好,行动吧。那就配置一个防火墙。之后你总是可以增加另一个异常,几分钟额外的工作并不会折腾死你。Iptables在Ubuntu里预装了,所以去设置一些规则吧。
代码如下 | 复制代码 |
$ sudo mkdir /etc/iptables
|
通过 iptables-apply 命令为规则集生效。如果你丢失连接,修补你的规则,在继续之前再试一下
代码如下 | 复制代码 |
$ sudo iptables-apply /etc/iptables/rules |
创建文件 /etc/network/if-pre-up.d/iptables,然后写入下面内容。当你启动服务器的时候,将自动载入你的iptables规则。
代码如下 | 复制代码 |
/etc/network/if-pre-up.d/iptables
iptables-restore < /etc/iptables/rules |
现在给它执行权限,执行文件,以确保它正常载入
代码如下 | 复制代码 |
$ sudo chmod +x /etc/network/if-pre-up.d/iptables $ sudo /etc/network/if-pre-up.d/iptables |
用 Fail2ban 处理潜在黑客
当谈到安全的时,Fail2ban 是我最喜欢的工具之一,它将监控你的日志文件,并且可以临时禁止那些正在滥用你资源,或者正在强制肆虐你的SSH连接,或者正在dos攻击你web服务器的用户。
代码如下 | 复制代码 |
Install Fail2ban sudo apt-get install fail2ban |
虽然 Fail2ban 安装一个默认配置(/etc/fail2ban/jail.conf),但我们希望在 /etc/fail2ban/jail.local 写配置,所以把它拷贝到那儿。
代码如下 | 复制代码 |
sudo cp /etc/fail2ban/jail.{conf,local} |
配置
把 ignoreip 行修改为你的ip,并且可以设置禁止恶意用户的时间量(默认是10分钟)。你也将希望设置一个destemail,这里我通常输入我自已的email地址:
代码如下 | 复制代码 |
/etc/fail2ban/jail.local
|
这有一些其他的你想检查的配置,尽管缺省配置已经相当不错了,所以,快速浏览这些,直到你读到Actions章节。
Actions
Actions 允许你对恶意行为作出反应,然而当我们想要它禁止和发邮件的时候,默认是禁用了 iptables。值得感谢的是,有一个预配置文件 action_wml,它恰恰是做这个的。
代码如下 | 复制代码 |
/etc/fail2ban/jail.local |
Jails 监控
为了让Fail2ban工作,需要了解要监控哪些东西。这些已在Jails部分的配置文件,并且这有一些预载入而未启用的例子。既然到目前为止,你仅仅在服务器上启用了SSH访问,那我们就只启用SSH和SSH-DDos 监控,然而你还是会想给安装在这台服务器上的公共访问服务增加新的监控。
代码如下 | 复制代码 |
/etc/fail2ban/jail.local [ssh] |
让变化生效
既然我们已经配置了Fail2ban,你将希望重新载入它,并且确保向iptables增加了合适的规则。
代码如下 | 复制代码 |
$ sudo service fail2ban restart * Restarting authentication failure monitor fail2ban ...done. $ sudo iptables -L Chain INPUT (policy DROP) target prot opt source destination fail2ban-ssh-ddos tcp -- anywhere anywhere multiport dports ssh fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh ... Chain fail2ban-ssh (1 references) target prot opt source destination RETURN all -- anywhere anywhere Chain fail2ban-ssh-ddos (1 references) target prot opt source destination RETURN all -- anywhere anywhere |
在任何时间,你都可以使用sudo iptables -L 来列出你的规则,随后列出所有当前禁止的 IP。此时,Fail2ban正在处理两个恶意的用户。
代码如下 | 复制代码 |
Banned IPs DROP all -- 204.50.33.22 anywhere |
保持最新更新
你可能现在拥有一个已经锁定并且准备投入使用的服务器,然而这并不是你安全之旅的终点。保持最新更新(并且总是首先在非产品环境下测试),总是关闭你不需要的端口,定期检查你的日志,并且由内而外了解你的服务器。
后再我再把lamp新手配置也介绍一下
安装的网站软件环境中将使用Apache2网页服务软件、MySQL5网站后台数据库软件、以及PHP5角本解释语言软件,配置成的系统也可提供FTP服务。
1. LAMP 的安装
1.sudo apt-get install apache2 mysql-server mysql-client php5 php5-gd php5-mysql
由于LAMP大部分操作与/var/www目录相关,为了方便,修改该目录的权限为普通用户可访问。
1.sudo chmod 777 /var/www/
2. phpmyadmin 安装
1.sudo apt-get install phpmyadmin
在安装过程中会要求选择Web server:apache2或lighttpd,选择apache2,按tab键然后确定。然后会要求输入设置的Mysql数据库密码连接密码 Password of the database's administrative user。
然后将phpmyadmin与apache2建立连接,以我的为例:www目录在/var/www,phpmyadmin在/usr/share /phpmyadmin目录,所以就用命令:sudo ln -s /usr/share/phpmyadmin /var/www 建立连接。
phpmyadmin测试:在浏览器地址栏中打开http://localhost/phpmyadmin。
3. Apache 配置
(1)启用 mod_rewrite 模块
终端命令:sudo a2enmod rewrite
(2)重启Apache服务器:sudo /etc/init.d/apache2 restart
Apache重启后可以测试一下,在/var/www目录下新建文件test.php,写入代码: 保存,在地址栏输入http://127.0.0.1/test.php 或 http://localhost/test.php ,如果正确出现了Mysql已经正确配置,表明Apache和mysql都正常了。(记得重启Apache服务器后再测试)。
test.php
代码如下 | 复制代码 |
1. 2. $link = mysql_connect("localhost","root","mysql密码"); 3. 4. if (!$link) 5. 6. { 7. 8. die('Could not connect: ' . mysql_error()); 9. 10. } 11. 12. else echo "Mysql已经正确配置"; 13. 14. mysql_close($link); 15. 16. ?> |
4. 浏览器PHP中文乱码问题
上面在FireFox浏览器中打开test.php测试时,如果出现了中文乱码,则是默认语言设置问题,解决方法如下:
打开apache配置文件: udo gedit /etc/apache2/apache2.conf,在最后面加上:AddDefaultCharset UTF-8,如果还是乱码的,再将UTF-8改用gb2312。
重启Apache:sudo /etc/init.d/apache2 restart 再刷新test.php 中文乱码没有了