|
FreeBSD基本安全加固:
1.修改 /etc/rc.conf:
sendmail_enable="NONE" //关闭sendmail
syslogd_enable="YES" //开户syslogd
syslogd_flags="-ss" //禁止syskogd接受来自远程主机的记录并关闭端口,但仍然允许 localhost 进行日志记录
tcp_drop_synfin="YES" //阻止OS指纹识别的企图,需在内核中加入"options TCP_DROP_SYNFIN "
log_in_vain="YES" //记录每一个到关闭端口的连接企图,这个最好是在启用了防火墙功能之后再打开.
accounting_enable="YES" //打开系统审计功能
clear_tmp_enable="YES" //在系统启动时将清空 /tmp
icmp_drop_redirect="YES" //丢弃ICMP重定向。可以防止DOS攻击或劫持进程
icmp_log_redirect="YES" //记录ICMP重定向
fsck_y_enable="YES" //计算机启动时候发现文件系统失效,将以-y参数运行fsck
update_motd="NO" //防止系统自动加入信息到motd
修改/etc/sysctl.conf文件,调整IP堆栈
net.inet.icmp.bmcastecho=0 #关闭对广播类型的响应,过滤ICMP响应后,服务器无法ping 通,可以提高部分安全性能
net.inet.udp.checksum=1 #对UDP包的校验和进行计算,防止不正确的UDP包的攻击
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
#在默认情况下,操作系统在关闭的端口上接受到TCP SYN段的时候,会发送RST信息包,告诉攻击者这个端口关闭了,导致攻击者继续扫描下一个端口,使端口扫描简单化,浪费了本机CPU时间在DOS上。我们可以使用blackhole来控制对没有socket监听的TCP或者UDP端口接受到连接请求时的行为。
#当设置这个选项后,系统将马上丢弃这个包而不发RST包,连接端将看到"Connectionreset by peer."
2.限制远程登录的终端数量:
修改 /etc/ttys,如果不想打开太多的终端,请把对应的 "on" 改为 "off" ,当然,只是一部分 ttys .保持至少1个 "on," 否则会无法登录,这将导致系统无法使用.ttyv8 默认情况下是"off" .
3.限制远程登录地址和用户:
限制远程登录,可以通过编辑 /etc/login.access 实现的:
如果禁止一切远程登录(这意味着必须物理地坐在机器前面),删除下面这一行前面的#号:
#-:wheel:ALLEXCEPT LOCAL .win.tue.nl
并把 .win.tue.nl 去掉,于是它看起来将像这样:
-:wheel:ALLEXCEPT LOCAL
如果你需要从远程登录,那么把.win.tue.nl 替换为相应的IP或域名。如果有多个地址,用空格分开。
如果只有一两个用户的话,那么可以拒绝其他人登录:
-:ALLEXCEPT user1 user2:ttyv0 ttyv1 ttyv2 ttyv3 ttyv4
用具体的用户名替换掉 user1 user2 。如果需要的话,增加相应的tty。
4.升级源码:
创建stable-supfile:
*defaulthost=cvsup4.freebsdchina.org
*defaultbase=/usr
*defaultprefix=/usr
*defaultrelease=cvs tag=RELENG_4
*defaultdelete use-rel-suffix
src-all
ports-alltag=.
执行:
cvsup -g-L 2 stable-supfile
完成后在/usr/src中执行:
makeworld
完成后,再编译内核,如果发生错误:
执行:
mergemaster-p
makeworld
mergemaster-i
5.内核编译:
加入:
options IPFILTER #ipfilter support
options IPFILTER_LOG #ipfilter logging
options TCP_DROP_SYNFIN #drop TCP packets with SYN+FIN 丢弃SYNFIN包,需要在rc.conf中打开
options SC_NO_HISTORY #取消历史记录,在登出系统后刷新虚拟终端缓冲中的内容
options SC_DISABLE_DDBKEY # disable `debug' key 取消debug键
options SC_DISABLE_REBOOT # disable reboot keysequence 取消ctl+alt+del键
6.修改/etc/sysctl.conf文件,调整IP堆栈
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
在默认情况下,操作系统在关闭的端口上接受到TCP SYN段的时候,会发送RST信息包,告诉攻击者这个端口关闭了,导致攻击者继续扫描下一个端口,使端口扫描简单化,浪费了本机CPU时间在DOS上。我们可以使用blackhole来控制对没有socket监听的TCP或者UDP端口接受到连接请求时的行为。
当设置这个选项后,系统将马上丢弃这个包而不发RST包,连接端将看到"Connectionreset by peer."
7.使用 tcp wrapper (/etc/hosts.allow)允许/拒绝访问特定的TCP服务。
tcp_wrappers 可以在访问者要求服务前先检查/etc/hosts.allow 文件中设定的规则,符合放行规则的才会去启动服务程序,可以达到有条件开放系统服务的目的。
在/etc/host.allow文件中,注释掉"ALL:ALL:allow",去掉其他无关服务访问,增加如下内容:
sshd:localhost : allow
sshd:friendlycomputer : allow
sshd: all: deny
另外需要注意的是:
注意规则的先后顺序,因为tcp_wrappers的规则有first match 的特性,最好把放行的规则写在前面,然后在后面加一条全部禁止的规则;
为避免DNS 欺骗,规则尽量使用IP表示;
FreeBSD缺省的/etc/hosts.allow中第一条规则是 ALL : ALL : allow,自己的规则一定要放在他前面才有效。
8.登录环境:
freebsd#rm -rf /etc/motd
freebsd#ee /etc/motd
I amadministrator , Who are you ?
freebsd#touch /etc/COPYRIGHT
freebsd#ee /etc/gettytab
default:下面一行改为:
:cb:ce:ck:lc#1000:im=\r\Thisis
!\n\r\n:sp#1200:\
9、配置SSH
修改/etc/ssh/ssh_config文件
1)使用protocol 2代替protocol 1,SSH2更加安全,可以防止攻击者通过修改携带的版本banner来劫持(hijacking)启动会话进程并降低到protocol 1。注释掉protocol 2,1 改用下面语句代替:
protocol2
2)合理设置最大连接数量, 防止DOS攻击
MaxStartups5:50:10
3)禁止远程root和空密码登录,建议关闭X11forwording
X11Forwardingno
10、检视系统记录:
在 /var/log 中,记录了许多系统的信息,我们应该要时常检视它们:
adduser 使用 adduser 的记录。
cron 定时排程的记录。
maillog 邮件记录。
messages 系统讯息记录。
security 安全性记录,如防火墙。
FreeBSD 预设每天定时执行一些分析的工作,并将结果寄给 root,建议你最好每天阅读它们。我们可以在 /etc/mail/aliases 的开头中加入下面这一行:
freebsd#ee /etc/mail/aliases
加入:
root:
freebsd# newaliases //让设定生效
这样,所有寄给 root 的信件,都会自动转给所设定的信箱。root 每天会收到 "daily run output" 及 "security check output" 这二封信,这是依照我们在/etc/defaults/periodic.conf 中所设定的定时执行工作输出的结果。
11、漏洞修补:
FreeBSD 总部会不定期公布己知的安全漏洞,并提供修补方式,我们必须时常到 FreeBSD 的网站注意关于安全性的消息,该网站的位置是
http://www.freebsd.org/security/index.html
。
例如:
FreeBSD-SA-05:17.devfs.asc
FreeBSD-SA-05:16.zlib.asc
FreeBSD-SA-05:15.tcp.asc
FreeBSD-SA-05:14.bzip2.asc
FreeBSD-SA-05:13.ipfw.asc
FreeBSD-SA-05:12.bind9.asc
FreeBSD-SA-05:11.gzip.asc
FreeBSD-SA-05:10.tcpdump.asc
FreeBSD-SA-05:09.htt.asc
Solution:
Performone of the following:
1)Upgrade your vulnerable system to 5-STABLE, or to the RELENG_5_4,
orRELENG_5_3 security branch dated after the correction date.
2) Topatch your present system:
Thefollowing patches have been verified to apply to FreeBSD 5.3, and
5.4systems.
a)Download the relevant patch from the location below, and verify the
detachedPGP signature using your PGP utility.
freebsd#fetch
ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-05:17/devfs.patch
freebsd#fetch
ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-05:17/devfs.patch.asc
b) Applythe patch.
freebsd#cd /usr/src
freebsd#patch
c)Recompile your kernel as described in
andreboot the
system.
我们可以选择下列二种方式其中之一来进行修补,第一种方式是将您的 FreeBSD 升级至 5-STABLE、RELENG_5_4、或 RELENG_5_3。第二种方式是我们最常用的方法,也就是下载修补的原始码。通常我们必须依照所使用的 FreeBSD 系统来下载不同版本所使用的补丁。上述范例中,其修补文件分别供 FreeBSD 5.3 及 5.4 使用。
我们以 FreeBSD 5.4 为例,首先,我们必须下载更新档,请使用下列指令下载:
freebsd#cd /usr/src
freebsd#fetch
ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-05:17/devfs.patch
我们将档案下载到 /usr/src 目录下,这个档案是修补的档案,而 devfs.patch.asc 是用来检查 pgp 签名的签名档,如果您不使用 pgp 检查所下载的档案是否正确,您可以忽略这个档案。
我们所下载的 patch 档是将漏洞修补前及修补后的原始码差异存成一个档案,接下来我们必须将这个差异和我们系统中的原始码合并。因此,我们系统中一定要安装 FreeBSD 的原始码,也就是/usr/src 这个目录下有原始码的数据,如果您在安装 FreeBSD 时并未安装原始码,您可以使用 sysinstall 来安装原始码套件。接下来我们就可以将所下载的档案合并到系统中:
freebsd#cd /usr/src
freebsd#patch
12.FreeBSD下,IP与MAC绑定命令:
arp-s
如
arp -s99:de:dd:88:od:cc 192.168.1.5
arp -s99:de:d4:68:od:cc 192.168.1.8