作为管理员,安全性始终是第一位的。本页主要包含系统和服务的安全漏洞相关内容,数据备份在另外的章节描述。
Contents
|
1. 禁止 root 帐号登录 SSH
某个客户服务器接入互联网,允许root登录,虽然设置了长达 9 个字母的口令保护,仍在在 3 天之内被黑客通过暴力口令破解。
原因分析:
Unix 服务器上, root 帐号是最知名,权力最大的帐号,一般系统都默认允许 root 帐号远程登录。一些管理员图方便,也喜欢用 root 帐号直接登录系统;
黑客常用的暴力口令破解工具通过口令字典对 root 帐号进行尝试登录;
如果服务器允许 root 登录,很容易被黑客突破;
解决方案: 禁止 root 用户登录。通常有两种设置方法:
方法一: 在 /etc/ssh/sshd_config 中如下设置,禁止 root 用户登录
PermitRootLogin no
优点:
设置简单。root 帐号直接被禁止登录
其他用户帐号不受影响,可以登录
缺点:
当需要以 root 身份远程执行某些操作(如同步某些数据),而又不能执行 sudo 命令时,则无法实现
SSH 的 22 端口仍然可见
方法二: 在 /etc/ssh/sshd_config 中如下设置,只允许属于某个用户组(如 ssh)的用户登录,而 root 用户不属于该用户组。
PermitRootLogin yes AllowGroups ssh
优点:
root 帐号因不属于该用户组,被禁止登录
如果需要具有 root 权限帐号的用户登录(同步敏感数据的需要),可以为 root 用户创建别名(id 为 0),并属于可登录的用户组
缺点:
系统中原有帐号都不能登录了,需要手动为需要登录的帐号添加到新用户组
SSH 的 22 端口仍然可见
其他可选方案:
通过公钥登录 SSH
安装 ossxp-secure-opensesame 软件包,动态打开 ssh 的 22 端口
2. 禁用 22 端口,通过 Web 认证授权,动态打开 ssh 端口
前面介绍的限制 root 登录系统,仍然做不到限制对 22 端口访问。黑客仍然可以使用口令字典尝试对已知帐号进行暴力口令破解。
最根本的解决之道,应该是禁止 22 端口的访问。
难道说将 22 端口改到其他端口么?
决不是。因为黑客可以通过 nmap 或者类似工具对服务器进行端口扫描,可以很快知道你的 SSH 登录的自定义端口!
难道说 SSH 登录,必须在可信网络或者只能在机房的控制台进行登录么?
也不是。失去了方便性的安全性,牺牲了可用性,最终会被抛弃,重回不安全的老路。
解决方案
安装群英汇软件包 ossxp-secure-opensesame
opensesame 芝麻开门之意
使用群英汇用户管理平台,为需要访问 ssh 服务的用户进行授权
即在用户的授权服务页中,添加名为 ssh 的服务。
用户登录步骤
用浏览器打开页面,如: https://servername/opensesame/
输入用户管理系统中为您注册的用户名和口令
注意:如果用户名口令连续输入错误超过预设值,整个 IP 地址会被拒绝服务(10分钟)
在打开的 web 页面中选择 ssh 服务,并点击提交按钮
在 5 分钟(0-5分钟)之内,用 ssh 客户端登录服务器
50000_Admin(2f)00010_Security(2f)00020_opensesame/attachments/opensesame2.png?ts=1267406615.0)
注意登录服务器的用户帐号,由该服务器的管理员分配,和集中管理平台的用户名不同
登录成功后,会一直保持链接,直到退出登录或者服务超时。
如果想重新建立新的 SSH 登录,需要重复步骤 1-3。
3. 普通用户帐号登录,如何成为 root ?
在设置了禁止 root 用户登录后,管理员都需要使用自己的普通权限的帐号进行登录。
有的管理员使用 su 命令成为 root 用户,去执行高授权要求的命令。但是不建议用这个方法。因为:
管理员会倾向于为 root 用户分配弱口令
任何登录用户只要知道 root 口令,都可以成为 root
为登录用户通过口令字典破解 root 口令打开了方便之门
解决方案:
简单的说,解决方案就是使用命令: sudo
建议:将 root 口令取消,或者设置为只有一个人知道的口令。
以 root 身份执行下面的命令,将取消 root 口令,root 用户将无法口令登录。
# usermod -p '*' root
安装 sudo 软件包
# aptitude install sudo
编辑配置文件 /etc/sudoers,增加下面的一条记录,使得只允许 sudo 组的用户能够执行 sudo 命令
%sudo ALL=NOPASSWD: ALL
以普通用户帐号(属于 sudo 用户组)登录后,执行下面的命令,即可成为 root 用户
$ sudo su
安装 ossxp-linux-base 软件包,将会自动完成相关安全性配置。 # aptitude install ossxp-linux-base # python /opt/ossxp/install/base.py install # python /opt/ossxp/install/base.py config
4. 架设防火墙
群英汇缺省使用 shorewall 为客户的服务器架设防火墙。
4.1. 安装
安装 ossxp-secure-fw-shorewall 软件包。
$ sudo aptitude install ossxp-secure-fw-shorewall
ossxp-secure-fw-firestarter 是另外一款适合桌面系统的防火墙软件,有图形界面,但不适合服务器安装。
4.2. 配置注意事项
编辑配置文件 /etc/default/shorewall, 启用 shorewall 防火墙
startup=1
确认网卡数目和网络拓扑,并编辑配置文件 /etc/shorewall/interfaces
该配置文件缺省是按照一块网卡准备的。下面的配置,是两块网卡的情况
net eth0 detect dhcp,tcpflags,routefilter,nosmurfs,logmartians=0,arp_ignore=8 net eth1 detect dhcp,tcpflags,routefilter,nosmurfs,logmartians=0,arp_ignore=8
缺省策略说明
群英汇系统平台间访问策略
编辑 /etc/hosts 文件,设置下列主机名对应的 IP 地址
# open tcp/22 to host: backup-host1, ... 127.0.0.2 backup-host1 127.0.0.3 backup-host2 # open tcp/389,636 to host: ldap-mirror1, ... 127.0.0.2 ldap-mirror1 127.0.0.3 ldap-mirror2 # open tcp/6663 to host: cosign-client1, ... 127.0.0.3 cosign-client1 127.0.0.4 cosign-client2
shorewall 重新启动会自动扫描以上的主机名,更新相关的宏(/etc/shorewall/macro.HOST_XXXXXX.in),为在 /etc/hosts 文件中出现的上述主机设置缺省策略
$ sudo /etc/init.d/shorewall restart
用户自定义策略
编辑文件 /etc/shorewall/rules,添加自定义策略。如:
DNS/ACCEPT net $FW HTTP/ACCEPT net $FW HTTPS/ACCEPT net $FW SMTP/ACCEPT net $FW SMTPS/ACCEPT net $FW POP3/ACCEPT net $FW POP3S/ACCEPT net $FW IMAP/ACCEPT net $FW IMAPS/ACCEPT net $FW # SSH service SSH/ACCEPT net:192.168.0.1/24 $FW # apt cache ACCEPT net $FW tcp 9999 # vmware server ACCEPT net $FW tcp 902,8222,8333 # git service ACCEPT net $FW tcp 9418 # git service ACCEPT net $FW udp 69 # cosign daemon HOST_cosign-clients/ACCEPT net $FW
4.3. 参考
shorewall 的帮助信息,参考:
5. LDAP 服务安全性
可以使用下面任意方法,加强 LDAP 的安全性。方法一(通过防火墙设置)较为简单。
5.1. 通过防火墙限制客户端IP
在 LDAP 服务器上架设防火墙,安装群英汇软件包: ossxp-secure-fw-shorewall。详见本帮助文档相关章节。
编辑文件 /etc/hosts,为需要访问 LDAP 服务器的客户端设置相应的 host 条目。格式示例:
# open tcp/389,636 to host: ldap-mirror1, ... 192.168.0.101 ldap-mirror1 192.168.0.105 ldap-mirror2 10.0.0.50 ldap-mirror3
重启 shorewall 防火墙后,自动为上述主机开放 389 和 636 端口。
5.2. 禁止 LDAP 匿名查询
Debian 和 Ubuntu 的 openldap 的默认配置文件格式不相同。Debian 使用传统的配置文件方式, 而 Ubuntu 使用 LDAP数据库(LDIF 文件)格式进行配置。
对于使用 /etc/ldap/slapd.conf 配置文件的 openldap 服务。修改配置文件中关于授权的指令:
缺省的授权策略
口令相关字段,允许用户查看和更改自己口令,允许管理员(cn=admin,dc=foo,dc=bar)查看和更改所有人口令,匿名用户禁止访问
access to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=foo,dc=bar" write by anonymous auth by self write by * none
其他字段,允许任何用户读取,但只有管理员(cn=admin,dc=foo,dc=bar)有权更改
access to * by dn="cn=admin,dc=foo,dc=bar" write by * read
关闭匿名查看之后的授权策略
在缺省配置的基础上,增加了一个只读口令字段的帐号。即允许一个帐号(cn=sniffer,dc=foo,dc=bar)查看所有人口令
access to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=foo,dc=bar" write by dn="cn=sniffer,dc=foo,dc=bar" read by anonymous auth by self write by * none
其他字段的访问,关闭匿名查看,只允许登录的用户访问,只有管理员(cn=admin,dc=foo,dc=bar)有权更改
access to * by dn="cn=admin,dc=foo,dc=bar" write by anonymous auth by * none
如果有软件只需要一个访问非口令字段的 LDAP 帐号,直接在 LDAP 中添加一个专用帐号,例如: cn=reader,dc=foo,dc=bar
如果有软件需要一个能够读取口令字段的只读用户,就需要在 LDAP 中添加帐号 cn=sniffer,dc=foo,dc=bar,并为其设置复杂一些的口令
注意: 很对软件是通过先在 LDAP 中搜索 dn,然后在用检索到的 dn 和用户提供的口令进行和 LDAP 的绑定,之后利用再访问该用户的口令字段。因此对于这些软件,只需要提供一个能够访问非口令字段的只读帐号即可。
如果确实需要设置一个具有读取口令字段的只读帐号,还需要修改 slapd.conf 配置文件,增添授权策略,设置该用户对口令字段拥有只读权限
对于在目录 /etc/ldap/slapd.d/下,用LDAP格式文件进行设置的 openldap 服务,在阅读上面相关内容后,参考下面的链接文档:
6. HTTP 服务安全性
如何限制对某些 http 服务的IP地址访问范围?
群英汇的每个web应用,都对应于一个 IP 地址授权设置。这些 IP 地址授权配置文件在目录 /etc/apache2/include/authz_host/ 下。
只需要修改 /etc/apache2/include/authz_host/ 下对应的配置文件,就可以完成对该服务的授权。
例如:
$ cat /etc/apache2/include/authz_host/wiki ################################################################### # Example: # Order Allow,Deny # Allow from 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 # # Order Deny,Allow # Deny from all # Allow from 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 ################################################################### Order Allow,Deny Allow from all
如何防止针对 web 应用的口令攻击?
安装 ossxp-secure-fail2ban 软件包。
50000_Admin(2f)00010_Security(2f)00020_opensesame/attachments/opensesame1.png?ts=1267406615.0)