|
内容来源于PPPCloud官网教程
介绍
本文将展示如何在Ubuntu VPS上创建一个简单的防火墙。它仅仅开放我们所需要的端口并禁用其他的服务。我还将展示如何进行简单的防攻击。
本教程很简单,仅仅展示了怎样为Apache、SSH和email开启一些入向端口并关闭所有其他端口。我们将不会阻断任何出向流量,仅仅创建一些常见的规则来阻止通常用来寻找VPS漏洞的脚本和程序。
关于Iptables
我们将一步一步的创建防火墙规则。简单点说就是:防火墙是一个规则列表,所以当一个入向链接打开的时候,如果该链接能够匹配上任何一个规则,这个规则可以设置允许这个链接通过或拒绝该链接。如果没有规则被匹配,我们将会使用默认规则。
注意:本教程介绍的是IPv4网络安全。在Linux中,IPv6安全是和IPv4安全相互独立的。例如,iptables仅仅支持基于IPv4地址的防火墙规则,但是它也有IPv6的版本,被称为ip6tables,ip6tables可以被用来支持基于IPv6网络地址的防火墙规则。
决定哪些端口和服务开放
首先,我们需要让SSH端口开放,那样我们就可以远程连接到VPS上,而SSH对应的端口是22.
同时,我们也需要80和443(SSL端口)开放。发送邮件,我们需要25(常规SMTP)和465(安全SMTP)端口开放。为了让用户收到邮件,我们需要打开常用端口110(POP3)和995(安全POP3端口)。
另外,我们也需要开放IMAP端口,如果我们已经安装完成:IMAP(143)和SSL IMAP(993)。注意:如果我们不能让邮箱用户改变他们的邮件客户端的话,建议只允许安全协议。
阻止常见攻击
一般VPS的配置通常是空的:所有的流量都是被允许的。为了确保配置为空,我们会删除所有的规则:
iptables -F
然后我们可以添加一些简单的防火墙规则去防御常见的攻击,保护我们的VPS免受脚本小子的攻击。不能指望iptables能独立的保护我们免受大规模的DDOS攻击或者类似的攻击。但是我们至少能够避免常见的网络扫描机器人发现我们的VPS并找出VPS的安全漏洞加以利用。首先,我们阻止空包。
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
我们告诉防火墙将所有入向的带有NONE TCP标签的数据包统统阻拦。空包,简单的说,就是侦察包。一个攻击模式是使用空包尝试发现我们是怎么配置VPS的并由此找出VPS的漏洞。另一个模式是syn洪泛攻击。
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
Syn洪泛攻击是指攻击者打开一个新的链接,但是不声明他们想要的(如SYN、ACK等)。他们仅仅是想消耗我们服务器的资源。我们不接受这样的数据包。现在我们来看一个常见的例子:XMAS数据包,也是一个侦察包。
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
通过上述的配置,我们至少已经排除了一些常见的能发现我们VPS漏洞的模式。
打开选定的服务端口
现在我们可以向我们的防火墙过滤器添加选定的服务。第一件事情就是localhost接口:
iptables -A INPUT -i lo -j ACCEPT
我们告诉iptables添加(-A)一个规则进入(INPUT)过滤表中,任何进入localhost接口(-i lo)流量都会被允许(-j ACCEPT)。Localhost是经常使用的。比如与你的网站或email服务器交换数据的数据库就是在localhost安装的。这样,我们的VPS就能够使用数据库了,但是数据库是和互联网隔离的。
现在,我们可以允许web服务器流量通过:
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
我们添加两个端口(http的80和https的443)到ACCEPT链中,允许流量通过这些端口。现在,我们允许用户使用我们的SMTP服务器:
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
就像我之前说的一样,如果我们可以影响我们的用户,我们应该使用更安全的版本,但是通常情况下我们不能控制条款以及命令客户使用25端口进行连接,毕竟使用密码更容易。现在,我们继续允许用户在我们的服务器上读取邮件:
iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT
那两个规则是允许通过POP3流量的。其次,我们应该通过使用服务的安全版本来提升我们的email服务器的安全性。现在我们同样需要允许IMAP邮件协议的流量通过:
iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
限制SSH访问
我们也应该允许SSH流量通过,这样我们才可以远程连接到VPS上。实行该操作最简单的方法就是使用下述命令:
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
我们现在告诉iptables添加一个规则允许通过22端口的tcp流量(默认的SSH端口)。建议将SSH服务配置到不同的端口,且防火墙过滤也应该相应的进行改变,但是配置SSH服务不是这篇文章要论述的内容。
但是,我们可以利用防火墙做更多的事情。如果我们的办公室有一个永久的IP地址,我们可以仅仅允许从这个IP地址过来的连接,这将只允许我们办公室的人连接。
首先,找到你的外网IP地址。要确保它不是你的内网IP,否则将无**常工作。你可以简单通过访问whatismyip.com网站。另一种找出它的方法是:
w
从终端上可以看到我们的登陆信息(如果我是唯一的一个登陆用户)
如下所示:
root@iptables# w
11:42:59 up 60 days, 11:21, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0213.191.xxx.xxx 09:270.00s 0.05s 0.00s w
现在,你可以创建一个防火墙规则仅仅允许SSH端口的流量通过,而且这个流量的来源是:你的IP地址:
iptables -A INPUT -p tcp -s YOUR_IP_ADDRESS -m tcp --dport 22 -j ACCEPT
用实际IP替换YOUR_IP_ADDRESS
我们可以随着需求在我们的防火墙上开放更多的端口。这样,我们的防火墙将仅仅允许访问我们想要开放的服务。现在,我们需要添加一个规则来允许我们使用出向连接(即ping VPS服务器或更新软件)
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
这将允许任何已建立的出向连接,接收VPS另一侧的答复。当我们完成所有设置的时候,将会阻止一切,并允许所有出向连接。
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP
现在,我们已经拥有了自己的防火墙规则了。
保存配置
现在,我们已配置好,我们可以列出所有规则,看看是否有遗漏的:
iptables -L -n
-n在这里,是因为我们仅仅需要IP地址,而不是域名。即如果有一个像这样的IP地址:69.55.48.43。我们不需要,我们要的只是地址本身。现在我们可以保存我们的防火墙配置了:
iptables-save > /etc/iptables.up.rules
在/etc/network/interfaces 末尾添加一行,在网络启动时应用防火墙规则:
pre-up iptables-restore < /etc/iptables.up.rules
即使我们重启VPS上述保存的规则仍然是存在的。
原文链接:https://www.pppcloud.cn/community_courseInfo.html?id=800023
|
|