Techyou labs
真正的爱应该超越生命的长度、心灵的宽度、 灵魂的深度
常用标签
January 1, 2010

1 ssh 安全化

如果您仍然使用 telnet, 而不是 ssh, 则需要改变对本手册的阅读方式. 应当用 ssh 来取代所有的 telnet 远程登录. 任何时候通过嗅探互联网通讯来获取明文密码都是相当简单的, 您应该采用使用加密算法的协议. 那么, 现在在你的系统上执行 apt-get install ssh .

鼓励您系统上的所有用户使用 ssh 取代 telnet, 或者更进一步, 卸载 telnet/telnetd. 另外您应该避免使用 ssh 以 root 身份登录, 其替代的方法是使用 su 或 sudo 转换成 root 用户. 最后, /etc/ssh 目录下的 sshd_config 文件, 应当作如下修改, 以增强安全性:

*

ListenAddress 192.168.0.1

使得 ssh 只监听一个指定的接口, 如果你有多个(并不想在其上边获得 ssh 服务)接口, 或者将来会增加一块新网卡(但并不想通过它连接ssh服务).

*

PermitRootLogin no

尝试任何情况先都不允许 Root 登录. 如果有人想通过 ssh 成为 root, 需要两次登录, 并且root的密码现在仍不可能通过SSH暴力破解.

*

Listen 666 或 ListenAddress 192.168.0.1:666

改变监听端口, 这样入侵者不能完全确定是否运行了sshd守护进程(事先警告,这是模糊安全的).

*

PermitEmptyPasswords no

空密码是对系统安全的嘲弄.

*

AllowUsers alex ref me@somewhere

只允许某些用户通过 ssh 访问主机. user@host 也可用于限制指定用户通过指定主机访问.

*

AllowGroups wheel admin

仅允许某个组的成员通过 ssh 访问主机. AllowGroups 和 AllowUsers 对于拒绝访问主机有同样的效果. 当称它们为 "DenyUsers" 和 "DenyGroups" 时不要觉得奇怪.

*

PasswordAuthentication yes

这完全取决于您的选择. 仅仅允许用户使用置于 ~/.ssh/authorized_keys 文件中的 ssh-keys 登录主机将更加安全. 如果要达到这种效果,将其设为 "no".

*

禁用所有的您不需要的认证方式, 如果您用不到, 例如 RhostsRSAAuthentication, HostbasedAuthentication, KerberosAuthentication 或 RhostsAuthentication(例如), 您应该将其禁用, 即使它们是缺省设置(参阅联机帮助 sshd_config(5)).

*

Protocol 2

禁用版本1协议, 因为其设计缺陷, 很容易使密码被黑掉. 更多信息, 参阅 ssh协议问题报告 或 Xforce 通告.

*

Banner /etc/some_file

为用户连接到 ssh 服务器增加一个标题(它将从文件读取), 在一些国家, 登入给定系统前, 给出未经授权或者用户监视警告信息, 将会受到法律的保护.

您也可以在限制 ssh 登录的 PAM 控制文件中使用 pam_listfile 或 pam_wheel 来限制对 ssh 服务器的访问. 例如, 您可以使某人没有列入 /etc/loginusers 文件, 并在 /etc/pam.d/ssh 中增加如下行:

auth required pam_listfile.so sense=allow onerr=fail item=user file=/etc/loginusers

最后, 应当注意那些存放 OpenSSH 配置文件的目录. 现在, 有三种常用的 SSH 守护进程, ssh1, ssh2, 和 OpenBSD 用户使用的 OpenSSH. ssh1 是第一个可以使用的 ssh 守护进程, 并且仍然有很大的用户群(甚至谣传有windows版本). ssh2 和 ssh1 相比有更多高级特性, 但是它是基于保留源代码协议的. OpenSSH 是完全自由的 ssh 守护进程, 它支持 ssh1, 和 ssh2. OpenSSH 是在 Debian 系统中选择安装的 ssh 软件包.

更多有于如何设定带有 PAM 支持的 SSH 的信息,请查阅安全邮件列表文档.
5.1.1 Chrooting ssh

当前的 OpenSSH 没有提供用户连接后自动完成 chroot 的方法(商业版本提供这种功能). 但是有个项目为 OpenSSH 提供这种功能,参见http://chrootssh.sourceforge.net, 尽管它不在当前 Debian 的软件包中. 然而, 您可以使用 pam_chroot 模块,如限制用户访问, 第 4.10.8 节 所述.

在 SSH 的 chroot 环境, 附录 G 中有几个选项用于设置SSH的chroot环境.
5.1.2 ssh 客户端

如果您使用的 SSH 客户端不能访问 SSH 服务器, 则需要确认是否支持在服务器端被强制执行的协议. 例如, 如果您使用了只支持 version 1 协议的 mindterm 软件包. 但是 sshd 服务器默认配置为只接受 version 2 协议(基于安全的原因).
5.1.3 禁止文件传送

如果您不想用户将文件传送到 ssh 服务器和从服务器向外传送文件, 则需要限制对 sftp-server 和 scp 的访问. 您可以通过适当的配置 /etc/ssh/sshd_config 来限制sftp-server. 但是, 要限制 scp 访问, 则必需做以下两者之一:

*

禁止用户通过 login 登录 ssh 服务器(如上所述或通过配置文件或PAM 配置).

*

不要赋予不允许安全传送用户以合法的 shell。 然而提供 shell 对于连接到 ssh 服务器的根本需求, 比如程序的菜单栏(ala BBS) . 否则前边的选项更好.

5.2 Squid 安全化

Squid 是一款非常流行的 proxy/cache 服务器, 并且涉及一些应该被考虑的安全问题. Squid 的默认配置文件拒绝所有的用户请求. 但是 Debian 的软件包, 允许源自 'localhost' 的访问, 您只需要正确的配置您的浏览器就可以了. 您应当通过在 /etc/squid/squid.conf 中定义一个访问控制, 来配置 squid, 以允许可信任的用户, 主机, 网络访问, 有关定义ACL规则的更多信息参见 Squid 用户指南. 注意, debian 提供了 Squid 的最小化配置, 其只允许 localhost 使用您的代理服务器(使用默认端口3128), 您需要根据需求定制 /etc/squid.conf 文件. 推荐的最小化配置(在软件包中提供)如下:

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
(...)
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager
# Only allow purge requests from localhost
http_access allow purge localhost
http_access deny purge
# Deny requests to unknown ports
http_access deny !Safe_ports
# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
http_access allow localhost
# And finally deny all other access to this proxy
http_access deny all
#Default:
# icp_access deny all
#
#Allow ICP queries from eveyone
icp_access allow all

您还应当基于系统资源来配置 Squid, 包括高速缓存(cache_mem项), 本地缓存文件, 及其占用的空间大小(cache_dir项).

注意, 如果配置不当, 某些人也许可以通过 Squid 传递邮件消息, 因为HTTP和SMTP协议设计的非常相似. Squid 的默认配置文件拒绝访问 25 端口. 如果您希望允许连接 25 端口, 仅需要将其加入 Safe_ports 列表即可. 但是, 这里推荐 NOT.

只有正确的设定和配置 proxy/cache 服务器才能保证您的站点安全. 其它必要的任务是分析 Squid 的日志, 以确保所有的都正常运转. 在 Debian GNU/Linux 中有一些软件包帮助管理员完成这些工作. 在 woody(Debian 3.0) 或更高发行版中提供以下软件包:

*

calamaris - Squid 或 Oops 代理的日志分析工具.

*

modlogan - 日志分析工具组件.

*

squidtaild - Squid 日志监控程序.

当以加速方式使用 Squid 时, 它又象一个web服务器. 这里的选项代码越复杂, 则越不可靠. 默认 Squid 不是被配作 web 服务器的, 所以这一点您不需要担心. 注意, 如果您要使用这一特性, 则需要确认这是真正必要的. 也可以从Squid 用户指南第9章查询关于加速模式的更多信息.
5.3 FTP 安全化

如果您真的必须使用 FTP(没有使用 sslwarp 或插入 SSL 或使用 SSH 通道), 则应当 chroot ftp 为 ftp 用户的主目录, 这样用户就不会看到其目录以外的东西. 否则他们就可以遍历您的文件系统, 就象他们拥有这样的 shell 一样. 您应当在 proftpd.conf 中的global 部分增加以下行以启用 chroot 的这个特点:

DefaultRoot ~

通过 /etc/init.d/proftpd restart 重起 proftpd, 然后检查您是否能从您的主目录逃出来.

使用 ../../.. 以防止 Proftp DoS 攻击, 增加以下行到 /etc/proftpd.conf 文件: DenyFilter \*.*/

要记住, FTP 使用明码传送登录和认证密码(如果你提供的是匿名公共服务, 那么这不算什么问题), 不过在 Debian 中于此有更好的选择. 例如, sftp(ssh提供). 也有一些基于其它系统的有关 SSH 的自由软件: 例如 putty 和 cygwin.

但是, 当您维护一个用户通过 SSH 访问的 FTP 服务器时, 您可能会碰到一个典型问题. 用户在 SSH-secured 系统里访问匿名 FTP 服务器时可能会试图登入 FTP服务器. 当访问被拒绝时, 密码则会以明码的方式在网络上传送. 为了避免这一点, ProFTPd 的开发者 TJ Saunders, 创建了阻止拥有合法 SSH 账号的用户访问匿名 FTP. 可以从 ProFTPD Patches 获取更多信息和补丁. Debian 中也提交了这个补丁, 参见 Bug #145669.

暂无评论

添加新评论