科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道Unix高级安全设置(4)

Unix高级安全设置(4)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

没有绝对安全的网络系统,网络信息对抗是一个长期的研究课题,安全问题是多种多样,且随着时间技术的变化而变化,而黑客的侵入手段也随之不断变化.

作者:中国IT实验室 2007年8月21日

关键字: free BSD unix 权限 Unix系统 安全隐患

  • 评论
  • 分享微博
  • 分享邮件

  第四部分 总结

  没有绝对安全的网络系统,网络信息对抗是一个长期的研究课题,安全问题是多种多样,且随着时间技术的变化而变化,而黑客的侵入手段也随之不断变化,所以安全防护也是非常重要的,保持清醒正确的认识,同时掌握最新的安全问题情况,再加上完善有效的安全策略,是可以阻止大部分的网络入侵,从而保持最小程度的经济损失。   

  第五部分 附录   

  5.1 Free BSD系列   

  FreeBSD 是一个非常安全的操作系统。也正因为它的 source code 是可以免费的取得,这个 OS 长久以来不断的有人改进加强。尽管 FreeBSD 一出厂就非常安全, 但是仍然有更多加强安全性的措施,这份 HOW-TO 会教你一些步骤, 以更加强你机器的整体安全。

  5.1.1 网络

  5.1.1.1 inetd (Inet Daemon)

  网络在系统安全上扮演了一个很重要的角色。FreeBSD 的根基是有着内建网络功能, 且具有最稳最快的 TCP/IP stacks 的 4.4BSD。这个 stack 支持了非常多的协议像是telnet, ftp , talk, rsh 等... 这些 service 的的主设定档便是 /etc/inetd.conf。要编辑这个档, 请输入 "vi /etc/inetd.conf" (在这个例子里, 我使用 vi 。你可以使用其它你较为上手的编辑器。或许你可以试试 pico)。如果你要使用 pico, 请在启动它时加上 -w 选项:

  -w 关掉自动断行。(因此可以容许超过 80 字符的行存在)

  这选项在编辑 /etc/inetd.conf 时非常有用。

  当然了, 你也可以使用 ee - 它随着 FreeBSD 一起 "出厂" 的, 而且也是 root 预设的编辑器。不过, 请再 "echo $EDITOR" 确认一次。 开启了这个档案后, 你可以看到里面怎么描述每个 service 怎么激活, 要以那位使用者执行等等的信息。(man 5 inetd.conf)既然这个  档案是许多 internet service 的主要设定档, 好好的设定它便是一件十分重要的事。你要  关掉一个 service的话,只消在那一行前面加个 "#" 符号。基本的概念是, 关掉些你不熟悉的 services - 如果你不知道那个 service 是啥, 或者不知道它可以干啥。理想状态下, 你不须要把所有的 service 都打开。例如, 你的器只是要跑 web server。这种情况下, 你只要激活 ssh 和 httpd 便够了。关于啥是ssh, 下面会说明。如果你啥 service 都不想跑, 最直接干脆的方法是-关掉 inetd。做法很简单, 只要编辑 /etc/rc.conf 并且把inetd_enable="YES"改成inetd_enable="NO"就可以了。

  如此一来没人可以 telnet, rlogin, 或 ftp 到计算机中。如果你决定要激活你的 inetd 的

话, 记得激活 log 选项, 并提高一个 service 每分钟激活的上限数目。(默认值是 256, 我

建议提高到 1024-自行参照下面解说调整吧!)为什么要这么做呢...? 就 modem user 或是低

速专线用户是没什么差别。但高速线路的人, 上限值太低会蹦出一个 DoS attack(Denial o

f Service)。某个坏心的人可以简单的用一个 shell script 同时搞出超过 256 个 connec

tions, 这么一来你的 inetd会很不幸的阵亡。换句话说, 如果你想让每分钟每个 service

可接受的connection 数多点, 记得做如下的设定, 不然来个坏心的人就可以搞垮你的计算机

。因此, 在这行inetd_enable="YES"

  下面的:

  inetd_flags=""

  要改成:

  inetd_flags="-l -R 1024"

  这会将联机的动作都 log 下来(-l 参数)而且将同时最大联机数从预设的 256 增加到1024。你还须要对你的 /etc/syslog.conf 作些修改, 这些等会儿会提到。

  5.1.1.2 SSH

  在以下提到的案例中, 你完全不须要 run inetd。例如, 如果你只有跑 web, news, 或是 nfs server, 那么就没有必要在你的机器上再跑其它的services。但是你一定会问,"我要怎么 控制我的机器啊!?" 嗯嗯, 所以现在要介绍 SSH。你可以透过 SSH (SecureShell) 来登入你 的机器。Secure Shell 当初便是设计来取代 rsh, rlogin 等其它的Berkeley r* 命令。相信你很快就会了解 SSH 是如何有用,而且开始使用它,来代替其它的程序像是 telnet 和 ft p。SSH 具有很多功能,但是最为人知的是, 它的加密通讯方式, 也就是防止你的密码和资料以明码的方式在网络上传输。如果你使用 telnet,你的通讯内容可能会被"窃听": 传输中的资料被改变, 通讯内容被看到。(不是有 S/Key可以解决吗? 很不幸的, 它还是有着插入资料和连接时被破解的问题) 我希望你可以完全的关掉 inetd 而使用 SSH。如果你认为完全不靠inetd 来激活某些 services,是完完全全不可能的事, 那么希望你至少激活 log 功能, 而且要增加每分钟同一个 servi-ce 可激活的次数。 (原因上面有提到)

  你可以从 ftp://ftp.funet.fi/pub/unix/security/login/ssh 下载 SSH。

  若你想要更简单的方法:

  # cd /usr/ports/security/ssh

  # make install

  5.1.1.3 inetd (part II)

  好吧, 你仍然执意要使用 inetd。那么我们来看看在 inetd.conf 有那些选项, 可以增进你的系统安全。在攻击某系统之前, 攻击者都会先收集该系统的相关信息。就 telnetd 而言, 你可以试试在 telnetd 那行后面加个 -h:

  telnet stream tcp nowait root /usr/libexec/telnetd telnetd -h

  从 telnetd 的 man page 可以知道:

  -h Disable the printing of host-specific information before login

  has been completed.

  当有很多管道可以获得系统信息的同时, 这招和下面的那招是个不错的解决方案。如果你认为跑 telnet daemon 是没有必要的, 那么只消加个 "#" 在该行的最前面就行了:

  #telnet stream tcp nowait root /usr/libexec/telnetd telnetd

  有个极不错的措施是, 你可以拒绝没有完整 FQDN 的人来联机。要做到这点, 也只要加个 - U 选项到 telnetd 后面:

  telnet stream tcp nowait root /usr/libexec/telnetd telnetd -h -U

  这是个小动作, 但是对你的系统安全有莫大的助益。

  5.1.1.4 ftpd

  现在来看看 ftp。 对于 ftp FreeBSD 已经做了一些 log 的动作 。 可以看到在/etc

  /inetd.conf 里面 ftpd 那一行已经加了 "-l"。然而, 你还是要设定你的syslogd, 使它可

  以接受 ftp daemon 产生的 log。从 man page 可以得知:

  每个成功或是失败的 ftp 登入尝试, 都会以 LOG_FTP 机制纪录起来。如果这个选项被指定了两次, 所有的下载 (get), 上载(put), 新增, 删除,建立目录, 及更名的动作和文件名字 都会被纪录下来。 又: LOG_FTP 讯息预设是不会被 syslogd(8) 纪录下来的。你还要在 s yslogd(8) 的设定文件里面激活这个功能才行。

  让我们开启 syslogd 纪录 ftpd log 的功能吧~ 这个档案是 /etc/syslog.conf (别忘了顺

  便看看 man 5 syslog.conf)。把下面这一行加到这个设定档里:

  ftp.* /var/log/ftpd

  也不要忘了执行这个指令 "touch /var/log/ftpdlog", 因为 syslogd 不能写入到一个没有

  被开启过的档案。如果你想要你的 ftpd 提供你更多的 log 讯息, 那么就在 ftp那一行多加个 "-l" 吧:

  ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l -l

  如果你想要确定你的使用者们都用 scp (Secure Copy, 附属在 SSH 里面), 但是又想要提供anonymous ftp 服务, 也只消加个 "-A" 在 ftp 那行后面就行了:

  ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l -A

  你也可以编辑 /etc/ftpwelcome, 说明目前接受 anonymous ftp 登入, 但是系统内的使用者就得使用 rcp 了。如果你有提供 anonymous ftp, 你可以使用 -S 选项来记录传输的情形:

  ftp stream tcp nowait root /usr/libexec/ftpd ftpd -A -S

  5.1.1.5 fingerd

  Finger 服务默认值还算安全: 它不容许不带 user name 的 query。这是一件不错的事(tm) 。然而, 就是有些人无论如何也不想 run fingerd。这种情形下, 你只要简单的给它加个 " #" 在这行的最前面就可以了。又, 你想要 log 住谁来 finger 的话, 加个"-l" 也就行了:

  finger stream tcp nowait nobody /usr/libexec/fingerd fingerd -s -l

  Fingerd 产生的 log 信息预设是写到 /var/log/messages。如果你想要这些信息写入到特定的档案里去, 那么就在 /etc/syslog.conf 加入这一行:

  daemon.notice /var/log/fingerd

  /* !fingerd anyone? */

  $ man 5 syslog.conf

  除了 ftp, telnet 和 finger 之外, 你实在不须要在 /etc/inetd.conf 中再多激活任何东

  西了。通常我都会关掉 talk 及 comsat等我个人不须要的东西。如同我之前讲的,如果你不知到某个 servcie 是干嘛用的, 而且你也不须要它, 那么就关掉它。一些和网络有关而且很有用的 man page 是: inetd, ftpd, telnetd, fingerd, syslogd,comsat, talkd, rshd,rlogind, inetd.conf。并且记得要看 man page 的"SEE ALSO"部份, 以获得更多的相关信息 。

  5.1.1.6 ipfw (IP FrewWall)

  IP FireWall 做的是 packet 过滤的工作。没错, 就是只有这样。然而, 你要考虑的事是,

  你的 kernel 要有支持 ipfw。 通常在我管的机器上, 我都会重编核心使其支持ipfw。大概看起来是这样:

  options IPFIREWALL #finger the net

  options IPFIREWALL_VERBOSE #log the net   

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章