| SUPPORT |
| |
SUPPORT
-> 技术文章-> 一些FreeBSD 相关的安全问题 2
|
系统安全实务
-
一些FreeBSD 相关的安全问题
-
-
Crontab、at
问题
- crontab 是一个比较强大的服务,有不少漏洞在 cron 发现过,普通用户最起码也可以浪费资源等操作,这里建议
'www'、'nobody'、'bind' 不能使用 crontab。
建立 /var/cron/allow 文件并把需要使用的用户放进去,如∶
# echo root > /var/cron/allow
# chmod 600 /var/cron/allow
并设置权限 crontab 不能由其他用户任意观看∶
# chmod 600 /etc/crontab
如果不需要使用 'at' 命令,就关闭这个服务,因为安全的原则始终是 "你不用它,就丢掉它",在 /etc/crontab
文件中 mark 掉下面一行∶
# */5 * * * * root /usr/libexec/atrun
-
inetd、rate
限制问题
- Inetd 预设情况下是启用的,它控制了不少不安全的服务,如∶telnet、ntalk、finger。检查你所有
/etc/inetd.conf 中的服务,关闭任何你不需要的服务。如果没有一个用户需要,请在 /etc/rc.conf
中关闭 inetd∶
inetd_enable="NO"
如果你要使用 FreeBSD 的inetd。可以经由 ident 请求来控制 rate 的资源,如∶
auth stream tcp nowait/10/10 root internal auth -r -f -n -o UNKNOWN -t 30
第一个 10 表示我们允许的最大子进程数量 第二个值是每一个 IP 每一分钟连接的最大数量,一般 10/10 的值是较佳的
一般情况下不要使用这个 ident,我们一般也只在 IRC 里看到这个服务。
-
Securelevel
问题
- FreeBSD 核心有一个安全等级(securelevel)的概念,这是指系统核心运作使用的安全等级,不同的等级具备不同的保护和检查机制。一般工作站运行在
securelevel 0 等级,因为他们可能需要运行 X11,而服务一般运行在 2 或者 1 等级上。
如果你要改变级别系统为 2,你可以在 /etc/rc.conf 中增加如下项目∶
kern_securelevel_enable="YES"
kern_securelevel="2"
你可以重新去启动,或者使用
# sysctl -w kern.securelevel=2
来启动
-
一些本地安全技巧
- 1. 编辑 /etc/ttys,把下面的一行的 secure 改为 insecure∶
console none unknown off secure
这样用户进入 single user mode 时会要求输入 ROOT 密码,当然这样也使你忘记 ROOT 密码时的恢复存在一定难度了。
2. 修改一些电脑相关设定,如 BIOS,不允许软碟启动,CDROM 启动等,即在硬碟驱动以前不允许其他媒介启动。并设定
BIOS 密码。
3. 关於虚拟终端和虚拟终端缓冲,虚拟终端缓冲中的内容在你登出以後并不清除,所有你在机器的操作活动可以被复查。你可以重新设定核心参数如∶
SC_NO_HISTORY # 取消历史记录
SC_DISABLE_DDBKEY # 取消 debug 键
SC_DISABLE_REBOOT # 取消 clt-alt-del 键
4. 对 /bin, /sbin 进行安全保护。
#chflags schg /bin/*
#chflags schg /sbin/*
-
讯息过滤问题
- FreeBSD 的封包过滤工具拥有强大的设定规则来过滤你想阻挡的讯息,你可以使用 ipfw 来达成封包过滤,不过你需要在核心中有一定的选项设置,如∶
需要在编译核心时打开下面选项重新编译核心。
options IPFIREWALL
options IPFIREWALL_VERBOSE
options “IPFIREWALL_VERBOSE_LIMIT=100”
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPDIVERT
其中第一项 IPFIREWALL 设定是用於开启基本的封包过滤功能,只有使用它才能在核心支援封包过滤。IPFIREWALL_VERBOSE
和 IPFIREWALL_VERBOSE_LIMIT 是设定记录过滤日及日记录的限制。IPFIREWALL_DEFAULT_TO_ACCEPT
是设定 IPFIREWALL 的例外状况,在封包不符合所有的过滤规则的情况下进行转送,显然这是一种宽松的限制,此时系统主要用於阻挡特定位址和特定服务,而提供其他的例外网路功能。如果没有定义这个选项,系统就只能允许符合已定义规则的封包通过,而阻挡其他任何封包,这样在没有定义过滤规则的情况下,系统不能和其他电脑相互通信。最後一个选项 IPDIVERT 是用於定义 IPFIREWALL 与 natd 的 port。
建立 /etc/firewall.rules 建立自己的规则,并把文件设为 600 属性,下面的规则仅供参考∶
ipfw -q -f flush
ipfw -q add 00100 allow ip from any to any via lo0
ipfw -q add 00220 deny log ip from me to any in
#syn fin 封包,一般来说是 nmap 和 queso 扫描器使用,所以过滤
ipfw -q add 00225 deny log tcp from any to any in tcpflags syn,fin
# 检查通信状态
ipfw -q add 00230 check-state
ipfw -q add 00235 deny tcp from any to any in established
ipfw -q add 00240 allow ip from any to any out keep-state
# 控制 icmp 封包,只能通过 icmp 类型来限制
ipfw -q add 00300 allow icmp from any to any icmptype 3
ipfw -q add 00301 allow icmp from any to any icmptype 4
ipfw -q add 00302 allow icmp from any to any icmptype 11
# 允许 DHCP 通过
ipfw -q add 00401 allow udp from 192.168.2.1 67 to any 68
ipfw -q add 00402 allow udp from 192.168.1.1 67 to any 68
# allow ident requests
ipfw -q add 00500 allow tcp from any to any 113 keep-state setup
# log anything that falls through
ipfw -q add 09000 deny log ip from any to any
可以使用下面命令马上启动规则∶
# sh /etc/firewall.rules
如果你要在你日里查看有关丢弃封包的记录,你需要如下设置∶
# sysctl -w net.inet.ip.fw.verbose=1
如果你要所有这些设置在机器启动时候执行,编辑 /etc/rc.conf 增加下列项目∶
firewall_enable="YES"
firewall_logging="YES"
firewall_script="/etc/firewall.rules"
如果要记录这些讯息进行测试,不要忘了在 /etc/syslog.conf 中增加下列项目∶
!ipfw
*.* /var/log/ipfw.log
记得在 /etc/newsyslog.conf 中设置下列选项∶
/var/log/ipfw.log 600 3 100 * Z
|
|
|