⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 securing-freebsd.html

📁 这是很好的学习嵌入式LINUX的文章
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<p>这一节将介绍拒绝服务攻击。 DoS 攻击通常是基于数据包的攻击,尽管几乎没有任何办法来阻止大量的伪造数据包耗尽网络资源,但通常可以通过一些手段来限制这类攻击的损害,使它们无法击垮服务器。</p><ol type="1"><li><p>限制服务进程 fork.</p></li><li><p>限制 springboard 攻击 (ICMP 响应攻击, ping 广播,等等)。</p></li><li><p>内核路由缓存</p></li></ol><p>对于通过复制进程 (fork) 来进行服务的服务器的一种很常见的攻击是想办法耗尽其进程、文件描述符或者内存, 直到机器彻底死掉。 <b class="APPLICATION">inetd</b> (参见 <spanclass="CITEREFENTRY"><span class="REFENTRYTITLE">inetd</span>(8)</span>)提供了许多选项来限制这类攻击。 需要注意的是, 尽管能够阻止一台机器彻底垮掉,但通常无法防止服务本身被击垮。 请仔细阅读 <b class="APPLICATION">inetd</b> 的联机手册,特别是它的 <var class="OPTION">-c</var>、 <var class="OPTION">-C</var> 以及 <varclass="OPTION">-R</var> 这三个选项。 伪造 IP 攻击能够绕过 <bclass="APPLICATION">inetd</b> 的 <var class="OPTION">-C</var> 选项, 因此,这些选项需要配合使用。 某些独立的服务器也有类似的限制参数。</p><p>例如, <b class="APPLICATION">Sendmail</b> 就提供了自己的 <varclass="OPTION">-OMaxDaemonChildren</var> 选项, 它通常比 sendmail的负载限制选项更为有效, 因为服务器负载的计算有滞后性。 您可以在启动 <bclass="APPLICATION">sendmail</b> 时指定一个 <var class="LITERAL">MaxDaemonChildren</var>参数, 把它设的足够高以便承载您所需要的负荷, 当然, 不要高到足以让运行 <bclass="APPLICATION">sendmails</b> 的机器死掉。 此外, 以队列模式 (<varclass="OPTION">-ODeliveryMode=queued</var>) 并把服务程序 (<tt class="COMMAND">sendmail-bd</tt>) 和队列执行程序分别执行 (<tt class="COMMAND">sendmail -q15m</tt>)也是一个好主意。 如果您希望保证队列的实时性, 可以考虑使用更短的间隔, 例如 <varclass="OPTION">-q1m</var>, 但同时也需要指定一个合理的子进程数, 也就是通过 <varclass="LITERAL">MaxDaemonChildren</var> 选项以免 <span class="emphasis"><iclass="EMPHASIS">那个</i></span> sendmail 造成重叠的故障。</p><p><b class="APPLICATION">Syslogd</b> 可以被直接地攻击,因此,强烈建议只要可行,就在启动它的时候加上 <var class="OPTION">-s</var> 参数,其他情况下,则至少应该加上 <var class="OPTION">-a</var>。</p><p>对于基于连接的服务,例如 <b class="APPLICATION">tcpwrapper</b> 的 reverse-identd,都应该格外的小心, 因为它们都可能直接遭受攻击。 一般情况下, 基于安全考虑, 不应使用 <bclass="APPLICATION">tcpwrappers</b> 所提供的 reverse-ident 这样的功能。</p><p>此外, 将内部服务保护起来, 阻止来自其他主机的访问也十分重要,这些工作可以通过设置边界路由器来完成。 主要的想法, 是阻止来自您的 LAN 以外的访问,这有助于避免 <tt class="USERNAME">root</tt> 受到攻击。 尽可能配置排他式的防火墙, 例如,``用防火墙阻止所有的网络流量 <span class="emphasis"><i class="EMPHASIS">除了</i></span>端口 A、B、 C、D,以及 M-Z''。 通过采用这种方法, 您可以很容易地将低端口的访问阻止在外,而又不难配置使防火墙放过那些明确需要开放的服务, 例如 <b class="APPLICATION">named</b>(如果您的机器准备作为域的主要解析服务器), <b class="APPLICATION">ntalkd</b>, <bclass="APPLICATION">sendmail</b>,以及其他可以从 Internet 访问的服务。如果您尝试以其他方式配置防火墙 -- 采用比较宽松的策略, 那么您将很有可能忘记 ``关掉''一两个服务, 或者在增加了一些服务之后忘记更新防火墙策略。 尽管如此,仍然可以考虑允许段口号较高的那一部分端口进入数据,这将保证那些需要这样特性的服务能够正常工作, 而又不影响低端口服务的安全性。 此外,还应注意到 FreeBSD 允许您来控制动态绑定的端口的范围, 即一系列 <varclass="VARNAME">net.inet.ip.portrange</var> 变量,通过 <tt class="COMMAND">sysctl</tt>来完成设置。 (<tt class="COMMAND">sysctl -a | fgrep portrange</tt>)。这使得您完成较复杂的防火墙策略变得易如反掌。 例如, 您可能希望普通的高段端口的起止范围是4000 到 5000, 而更高范围则是 49152 到 65535, 随后在防火墙中阻止低于 4000 的所有端口(当然, 除了那些特地为 Internet 访问而开设的端口)。</p><p>另一种常被称作 springboard 的攻击也是非常常见的 DoS 攻击 --它通过使服务器产生其无法处理的响应来达到目的。 最常见的攻击就是 <span class="emphasis"><iclass="EMPHASIS">ICMP ping 广播攻击</i></span>。 攻击者通过伪造 ping 包, 将其源 IP设置为希望攻击的机器的 IP。 如果您的边界路由器没有进行禁止 ping 广播地址的设置,则您的网络将最终陷于响应伪造的 ping 之中, 特别是当攻击者同时使用了多个不同的网络时。广播攻击能够产生超过 120 兆位的瞬时流量。 另一种常见的针对 ICMP 错误报告系统的springboard 攻击, 通过建立可以生成 ICMP 出错响应的包,攻击者能够攻击服务器的网络下行资源, 并导致其上行资源耗尽。 这种类型的攻击也可以通过耗尽mbuf 来使得使得被攻击的服务器崩溃,特别是当这些服务器无法足够快地完成 ICPM 响应的时候。可以通过为 FreeBSD 内核配置称为 <var class="OPTION">ICMP_BANDLIM</var>的编译时选项来使这类攻击变得不那么有效。 最后一类主要的 springboard 是针对某些 <bclass="APPLICATION">inetd</b> 的内部服务, 例如 udp echo 服务进行的。攻击者简单地伪造一个来自服务器 A 的 echo 口的 UDP 包, 然后将这个包发到 B 的 echo 口。于是, 两台服务器将不停地将包弹给对方。 攻击者能够将两台服务器的这种服务都耗竭,并且通过这种方式, 之需要很少的包就可以让 LAN 超载。 类似的问题对 <bclass="APPLICATION">chargen</b> 口也是存在的。 好的系统管理员应该关闭这些 inetd的测试服务。</p><p>伪造的包攻击也可以用来使内核的路由缓存过载。 请参考 <varclass="VARNAME">net.inet.ip.rtexpire</var>, <var class="VARNAME">rtminexpire</var>,以及 <var class="VARNAME">rtmaxcache</var> <tt class="COMMAND">sysctl</tt> 参数。伪造的包可以用随机的源 IP 攻击, 使得内核在路由表中产生一个临时的缓存项, 它可以通过 <ttclass="COMMAND">netstat -rna | fgrep W3</tt> 看到。 这些路由通常需要 1600 秒才会过期。如果内核发现路由表变得太大, 它会动态地降低 <var class="VARNAME">rtexpire</var> 但以 <varclass="VARNAME">rtminexpire</var> 为限。 这引发了两个问题:</p><ol type="1"><li><p>在访问量不大的服务器上, 内核对于突然袭击的反应不够快。</p></li><li><p><var class="VARNAME">rtminexpire</var>的值没有低到让内核在此类攻击时活下去的程度。</p></li></ol><p>如果您的服务器通过 T3 或更快的线路接入 Internet, 那么通过 <spanclass="CITEREFENTRY"><span class="REFENTRYTITLE">sysctl</span>(8)</span> 来手动地降低<var class="VARNAME">rtexpire</var> 和 <var class="VARNAME">rtminexpire</var>就非常必要。 当然,绝不要把它们设置为零 (除非您想让机器崩溃) 将这两个参数设置为 2通常已经足以抵御这类攻击了。</p></div><div class="SECT2"><h2 class="SECT2"><a id="AEN18951" name="AEN18951">14.3.9. Kerberos 和 SSH的访问问题</a></h2><p>如果您打算使用, 那么 Kerberos 和 ssh 都有一些需要解决的问题。 Kerberos V是一个很棒的验证协议, 但使用了它的 <b class="APPLICATION">telnet</b> 和 <bclass="APPLICATION">rlogin</b> 应用程序有一些 bug, 使得它们不适合处理二进制流。 而且,除非使用了 <var class="OPTION">-x</var> 选项, 否则默认情况下 Kerberos 并不加密会话。 <bclass="APPLICATION">ssh</b> 在默认时加密所有的会话内容。</p><p>除了默认转发加密密钥, ssh 在所有的其他方面都做得很好。这意味着如果您持有供您访问系统其他部分密钥的工作站作了很好的安全防护,而您连到了一台不安全的机器上, 则您的密钥可能被别人获得。 尽管实际的密钥并没有被泄漏,但由于 ssh 会在您登录的过程中启用一个转发端口, 如果攻击者拿到那台不安全的机器上的 <ttclass="USERNAME">root</tt> 那么他将能够利用那个端口来使用您的密钥,从而访问您能够访问的那些机器。</p><p>我们建议您在使用 ssh 时配合 Kerberos 来完成工作人员的登录过程。 <bclass="APPLICATION">ssh</b> 在编译时可以加入 Kerberos 支持。 在减少了潜在地暴露 ssh密钥的机会的同时, 它还能够通过 Kerberos 来保护口令。 ssh密钥只有在做过安全防护的机器上执行自动操作时才应使用 (这是 Kerberos 不适合的情形)。此外,我们还建议您要么在 ssh 配置中关闭密钥转发, 要么在 <ttclass="FILENAME">authorized_keys</tt> 中增加 <var class="LITERAL">from=IP/DOMAIN</var>选项, 来限制这些密钥能够登录的来源机器。</p></div></div><div class="NAVFOOTER"><hr align="LEFT" width="100%" /><table summary="Footer navigation table" width="100%" border="0" cellpadding="0"cellspacing="0"><tr><td width="33%" align="left" valign="top"><a href="security-intro.html"accesskey="P">后退</a></td><td width="34%" align="center" valign="top"><a href="index.html"accesskey="H">起点</a></td><td width="33%" align="right" valign="top"><a href="crypt.html"accesskey="N">前进</a></td></tr><tr><td width="33%" align="left" valign="top">介绍</td><td width="34%" align="center" valign="top"><a href="security.html"accesskey="U">上一级</a></td><td width="33%" align="right" valign="top">DES,MD5,以及Crypt</td></tr></table></div></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -