这是一个关于 IPv6 和 NAT的规范问题
有关的:
所以我们的 ISP 最近设置了 IPv6,我一直在研究过渡应该包括什么,然后再加入竞争。
我注意到三个非常重要的问题:
我们办公室的 NAT 路由器(旧的 Linksys BEFSR41)不支持 IPv6。也没有任何更新的路由器,AFAICT。我正在阅读的有关 IPv6 的书告诉我,无论如何它都使 NAT 变得“不必要”。
如果我们应该摆脱这个路由器并将所有东西直接插入互联网,我开始恐慌。我绝对不可能把我们的账单数据库(有很多信用卡信息!)放在互联网上供大家查看。即使我提议在其上设置 Windows 的防火墙,只允许 6 个地址对其进行任何访问,我仍然会冒出一身冷汗。我不信任 Windows、Windows 的防火墙或足够大的网络,甚至无法远程适应。
有一些旧的硬件设备(即打印机)完全没有 IPv6 功能。并且可能是一长串可追溯到 1998 年左右的安全问题。而且可能无法以任何方式实际修补它们。并且没有新打印机的资金。
我听说 IPv6 和 IPSEC 应该以某种方式使这一切变得安全,但是如果没有使这些设备对 Internet 不可见的物理隔离网络,我真的不知道如何做到。我同样可以真正看到我创建的任何防御将如何在短时间内被超越。我多年来一直在 Internet 上运行服务器,我非常熟悉保护这些服务器所必需的东西,但是在网络上放置一些私有的东西(例如我们的计费数据库)一直是完全不可能的。
如果我们没有物理上独立的网络,我应该用什么来替换 NAT?
请注意:我不想把它变成一场火焰战争!我知道很多人对这个主题有着坚定的信念,这在很大程度上是因为他们在防火墙解决方案上付出了很多努力,也因为他们被灌输了相信自己的必要性的观念。
但是,我正在寻找安全专家的答案。我相信这是一个重要的问题,答案不仅对我自己和我工作的公司有益。我已经运行我们的服务器网络好几年了,没有任何妥协,根本没有任何防火墙。安全无妥协,我们也有可能被防止的防火墙。
我想我在这里工作的时间太长了,因为当我说“服务器”时,我总是指“向公众提供的服务”,而不是“秘密的内部计费数据库”。因此,我们的任何规则将在任何防火墙必须允许访问整个互联网。此外,我们的公共访问服务器都位于与我们办公室分开的专用数据中心。
别人问了类似的问题,我的回答被投为负数。这让我相信,要么投票否决它的人并没有真正理解我的答案,要么我对安全性的了解不足以做我目前正在做的事情。
这是我的服务器安全方法:
在将我的服务器连接到 Internet之前,请遵循我的操作系统的安全指南 。
使用 TCP 包装器将 SSH(和其他管理服务)的访问权限限制为少数 IP 地址。
使用Munin监视此服务器的状态。并修复 Munin-node 在其默认配置中固有的严重安全问题。
Nmap 我的新服务器(也是在将我的服务器连接到 Internet 之前)。如果我要为这台服务器设置防火墙,这应该是传入连接应该被限制到的确切端口集。
将服务器安装在机房,并给它一个公网IP地址。
使用我的操作系统的安全更新功能确保系统安全。
我的理念(以及问题的基础)是基于主机的强大安全性消除了防火墙的必要性。总体安全理念表明,即使您有防火墙,仍然需要基于主机的强大安全性(请参阅安全指南)。这样做的原因是,将公共服务转发到服务器的防火墙可以使攻击者与根本没有防火墙一样多。易受攻击的是服务本身,并且由于向整个 Internet 提供该服务是其运营的要求,因此限制对它的访问并不是重点。
如果是,并非需要由整个互联网的访问,请在服务器上的可用端口,然后该软件需要在步骤1中被关闭,并逐步4.如果验证的攻击者成功打入通过易受攻击的软件服务器并自己打开一个端口,攻击者可以(并且确实)通过在随机端口上建立出站连接来轻松击败任何防火墙。安全的重点不是在成功攻击后保护自己——这已经被证明是不可能的——而是首先将攻击者拒之门外。
有人建议除了开放端口之外还有其他安全考虑因素 - 但对我来说这听起来像是在捍卫自己的信仰。无论是否存在防火墙,任何操作系统/TCP 堆栈漏洞都应该同样容易受到攻击——基于端口被直接转发到该操作系统/TCP 堆栈这一事实。同样,在服务器上运行防火墙而不是在路由器上运行(或者更糟,在两个地方)似乎增加了不必要的复杂层。我理解“安全层出不穷”的理念,但有一点就像通过将 X 层胶合板堆叠在一起然后在所有层上钻孔来建造屋顶一样。另一层胶合板不会阻止通过你的那个洞的泄漏
老实说,我认为防火墙对服务器有任何用处的唯一方法是它是否具有防止已知攻击者与所有服务器的所有连接的动态规则 - 就像垃圾邮件的 RBL(巧合的是,这几乎就是我们的邮件服务器所做的) . 不幸的是,我找不到任何可以做到这一点的防火墙。下一个最好的东西是 IDS 服务器,但它假设攻击者不会首先攻击您的真实服务器,并且攻击者在攻击之前会费心探测您的整个网络。此外,众所周知,这些会产生大量误报。
不要误会我的意思,我很高兴这件事发生了。但是,我想确保它发生的原因是合理的——而不是我们的方法有问题。我想用图表说明这里发生了什么:

(来源:lightspeed.ca)
此处的亮绿色线显示了我们的服务器在过去 12 个月内拒绝来自实时黑名单中列出的 IP 地址的邮件的比率。去年 5 月,仅使用此过滤器,我们平均每 5 分钟拒绝约 175 条消息,或每分钟 35 条。很明显,自 10 月以来,它逐渐减少到其中的一小部分——我们现在在这个过滤器上平均每分钟大约有 8 条被拒绝的消息:

(来源:lightspeed.ca)
由于我们没有看到 Spamassassin 捕获的消息数量相应增加(图底部的青色线在很大程度上被淹没了)或任何其他过滤器,因此我可以根据这些统计数据得出两个结论之一:
1) 我们所有的过滤器都失效了。
或者
2) 垃圾邮件发送者不像过去那样频繁地发送垃圾邮件。
从历史上看,我觉得1是多大的可能性比2。但是,从经验和客户投诉(更确切地说,它们的缺乏),因为我们没有看到在我们的收件箱的垃圾邮件了,1是不正确的。那么这里到底发生了什么?我无法理解垃圾邮件不知何故变得无利可图。他们是否已转向更温和的目标?我在 Facebook 或 Twitter 或任何 HTTP 论坛上几乎看不到垃圾邮件。是否曾大规模逮捕、清除垃圾邮件发送者并阻止新犯罪分子进入?
不管是什么原因,对我来说,这听起来像是一场艰苦奋斗的胜利。但我仍然想确保现在是开香槟或开始磨砺我们的剑的时候了。
我们在 Debian 的稳定版本(每周更新)上使用 BIND 9.7.3,我们看到某个特定域的一些非常奇怪的行为。我们主持了几百人,但这是我们的。
基本上,辅助 DNS 服务器正在尝试从主服务器传输域。根据日志,每次都可以成功转移域名,但总是把序列号弄错!因此,它会抓住每一个机会不断地重新进行传输。我什至不确定它从哪里获取序列号,因为主服务器会返回正确的序列号。
这是我们从辅助服务器获得的日志(IP 192.168.0.130 是主服务器,192.168.0.4 是辅助服务器。当然,它们不是真实的。):
Aug 23 03:01:08 ns2 named[4242]: transfer of 'mydomain.ca/IN/external' from 192.168.0.130#53: connected using 192.168.0.4#60959
Aug 23 03:01:08 ns2 named[4242]: transfer of 'mydomain.ca/IN/external' from 192.168.0.130#53: Transfer completed: 0 messages, 1 records, 0 bytes, 0.001 secs (0 bytes/sec)
Run Code Online (Sandbox Code Playgroud)
这看起来很正常,虽然两台主机都设置了 IPv6 地址并且从技术上讲他们应该使用它们,但这是另一天的问题(我认为)。
所以让我们从辅助服务器查询主服务器,看看它说了什么:
$ host -4 -t any mydomain.ca 192.168.0.130
Using domain server:
Name: 192.168.0.130
Address: 192.168.0.130#53
Aliases:
mydomain.ca has IPv6 address fc00:::31
mydomain.ca has SOA record ns1.mydomain.bc.ca. hostmaster.mydomain.ca. 2011082201 …Run Code Online (Sandbox Code Playgroud) 目前,我们有一个功能齐全的 POP/IMAP/Webmail 系统(使用 Dovecot 和 Roundcube),它的预期设计是一座闪闪发光的完美之塔。我们有数以千计的客户属于“默认”域(我将其称为 ourdomain.com),并使用用户名和密码成功登录。我们还有几千人拥有我们托管的域,他们使用完整的电子邮件地址和密码(称为 customerdomain.com)成功登录。自 1990 年代以来就是这种方式,有很多根深蒂固的客户配置。
现在的问题是,人们习惯于使用完整的电子邮件地址登录 Web 表单,必须提醒使用 ourdomain.com 的人仅使用其用户名登录 Webmail 。这是我们的技术支持部门每周接到几次的电话(即使我这样做也很内疚,我只是不打电话给技术支持),可能应该通过某种软件解决方案来消除。
那么我们如何让 Roundcube 或 Dovecot 将“username@ourdomain.com”识别为“username”,而不必更改系统中每个人的实际用户名?但只有在域是“ourdomain.com”而不是“customerdomain.com”时才这样做。请记住,每次我们进行安全升级时,我们所做的任何自定义编码都必须重新实现,我们只会将该选项视为最后可能的选择。
特尔;博士:
我们需要这样的逻辑:
if $email contains @ourdomain.com
{
remove @ourdomain.com;
submit to roundcube;
} else {
submit to roundcube;
}
Run Code Online (Sandbox Code Playgroud) 今天早上我们将 Debian 网络服务器升级到 Wheezy,在其他一切正常之后,Apache 似乎已经失去了执行 PHP 脚本的能力,而在升级之前它可以这样做。现在我们只看到 PHP 代码,就好像没有启用 PHP 模块一样。
我已经检查了所有常见的问题,确保 PHP 模块已加载并安装,并确保 /etc/apache2/mods-enabled/php5.conf 设置了“SetHandler application/x-httpd-php”选项。我还遵循了在 Apache 上安装 PHP5 的最新文档,一切似乎都已检查完毕。Apache 错误日志中也没有任何表明存在问题的错误。
有什么我错过了吗?
'apachectl -t -D DUMP_MODULES |grep php' 的输出:
Syntax OK
php5_module (shared)
Run Code Online (Sandbox Code Playgroud)
'www3:/etc/apache2# apache2 -v' 的输出:
Server version: Apache/2.2.22 (Debian)
Server built: Jan 31 2014 18:55:37
Run Code Online (Sandbox Code Playgroud)
/etc/apache2/mods-enabled/php5.conf 的内容:
<IfModule libphp5.so>
# <FilesMatch "\.ph(p3?|tml)$">
# </FilesMatch>
<FilesMatch "\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
# To re-enable php in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do …Run Code Online (Sandbox Code Playgroud) 因此,我们为其中一台老化的服务器购买了一些硬件。
而且,无论出于何种原因让我感到非常困惑,随附的 CD 上不存在驱动程序文件。相反,它们存在于 CD 上的软盘映像文件中,首先必须将其写入软盘,然后从中复制文件。不幸的是,我们拥有的每张软盘都因老化而损坏。所以我需要一种方法来从该图像中提取文件。
请注意,我们不只是更换服务器完全的原因(这肯定是原因),是因为这是不是在预算现在。
编辑:磁盘映像显然是 UFS 格式。Windows 程序将无法运行!
我们有两个 Asterisk 服务器。一个是热故障转移(即,如果第一个失败,我们必须手动使其工作,但它会定期更新配置,因此它始终准备好上线),另一个是实时服务器。它们都有 Digium Wildcard TE405P,硬件和软件在其他方面完全相同,但上次我们需要使用故障转移服务器时,当它插入 PRI 线路时,情况变得很糟糕。现在,我们将故障转移盒升级到 Asterisk 1.6 并将其投入使用。
我真的需要一种在我们需要之前彻底测试(包括负载测试)TE405 硬件和配置的方法。我不能仅仅设置和拆除 PRI 线路来测试一小时或一天,而且线路的费用使我们无法获得完整的备份。同样,仅将电缆从一台服务器切换到另一台服务器也是非常具有破坏性的。
我们使用 Virtualmin 来完成我们大部分的数据库管理,但显然它有一个错误,在某些情况下设置用户的权限过于宽泛。此外,MySQL 手册没有提到限制用户使用“show databases”命令查看其他数据库的能力。
当我运行“show grants for 'user'@'localhost';” 我明白了:
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for user@localhost |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, CREATE TEMPORARY TABLES ON *.* TO 'user'@'localhost' IDENTIFIED BY PASSWORD 'ENCRYPTED' |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE ON `database`.* TO 'user'@'localhost' WITH GRANT OPTION |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
这甚至在我运行“GRANT SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER、CREATE TEMPORARY TABLES ON database.* to 'user'@'localhost';”之后