让FreeBSD更安全(Securing FreeBSD)

Linux系统的PAM模块认证文件含义说明总结 在Linux中执行有些程序时,这些程序在执行前首先要对启动它的用户进行认证,符合一定的要求之后才允许执行,例如login, su等。在Linux中进行身份或是状态的验证程序是由PAM来进行的,PAM(Pluggable Authentication Modules)可动态加载验证模块,因为可以按需要动态的对验证的内容进行变,所以可以大大提高验证的灵活性。 一、PAM模块介绍 Linux-P... 阅读详情
本文是一些关于使你的FreeBSD系统更安全的内容。
让FreeBSD更安全(Securing FreeBSD)

作者:Dru Lavigne
翻译:Delphij

摘自:  CNFUG期刊 ( China FreeBSD User Group)


前几天我整理了过去的一些笔记,以及近几年收集的一些安全建议。我认为这可能对您有帮助,所以本周我就暂停文档系列的文章,写一点关于使你的FreeBSD系统更安全的内容。

很明显,在这个领域我不可能用一篇文章全面地介绍所有的事情。另外,也不可能给出一个防止四海皆准的,保证任何系统都安全的方案。

在我整理笔记的过程中,我注意到很多都是关于如何让FreeBSD服务器(如,Web服务器,邮件服务器,等等)更安全的方法。如果你用FreeBSD做为个人系统,并希望完全的桌面功能的话,这就不太够用了。你肯定不愿意因为某些强化安全的设置,造成某些功能无法使用,并在此后的一周内孤立无援地与计算机进行搏斗,直到找到问题的所在。

因此,你将注意到,和许多其它安全教程不同,这份文档并不建议你修改FreeBSD系统中文件的权限。这是有意的。除非你正在强化一台生产服务器的安全性,并且十分明白自己在做什么,否则绝不要修改文件的权限。(如果你一定要做做实验的话,请在自己的home文件夹中作)。不然的话,一些东西可能就会停止工作,例如,电子邮件,X Window系统,声音。怪事会在不经意的时刻发生,让你头疼良久之后才意识到可能是一周前的某个权限设置造成的问题。

我们都知道Internet并不总是一个友好的地方,而且你可能也不想让另一个地方的人拥有与你一样的访问许可权限。这意味着你可能不希望在没有某种防火墙的前提下访问Internet。幸运的是,你的FreeBSD系统支持良种防火墙:ipfw 和 ipfilter。更令人振奋的是,通俗易懂的文档正在迅速增加。如果你不在防火墙后面,那么请花一个周六下午的时间读一读如何在你的系统上配置防火墙的文章,并操练一把。你将为此感到愉快,以下是一部分可用的资源:

man ipfw
FreeBSD Handbook: Section 10.7 -- Firewalls
Setting Up a Dual-Homed Host using IPFW and NATD

man ipf
IPFilter and PF resources

好的安全总是“层层设防”,这意味着如果一个机制失效了,仍然有备用的机制。即使你的系统已经受到了防火墙的保护,你仍然需要禁用所有服务,除了那些绝对需要的。在桌面系统中,不需要很多的服务。

用下面的命令可以查看哪些服务正在试图监听连接你的系统:
sockstat -4
输出的差别可能很大,这取决于在安装的最后阶段选择的软件,以及之后自行安装的port和package。

端口6000(X Window服务器)是输出中非常常见的;如果没看到它的话,启动一个X Window会话,然后重新运行 sockstat -4。不幸的是,在过去的几年中有很多针对X Window的攻击。幸运的是,使用X并不需要打开6000端口,不必担心,即使关闭了这个端口,仍然可以使用图形界面!

许多方法可以关掉这个端口。我发现的最简单的方法是成为超级用户,并编辑 /usr/X11R6/bin/startx。找到 serverargs 那一行,并把它改为类似下面的样子:
serverargs="-nolisten tcp"
保存修改之后,以普通用户身份运行X并执行 sockstat -4。如果没有打字错误,那么X会像往常那样启动,但 sockstat -4 输出中不会再出现端口6000。

如果想了解6000端口打开的后果,请阅读 Crash Course in X Window Security。

好了,现在 sockstat -4 输出中的服务少了一个。我们还需要处理一下邮件:端口 25 (smtp) 和 587 (submission)。收发邮件并不需要 587 端口,为了关闭它,我们需要修改 /etc/mail/sendmail.cf。查找这一行:
O DaemonPortOptions=Port=587, Name=MSA, M=E
然后在前面加上 # ,并告诉 sendmail 变化:
killall -HUP sendmail
-HUP 不会杀掉 sendmail,但他会告诉sendmail重新处理 /etc/mail/sendmail.cf。重复sockstat -4 ,它将不再显示 587。

那么端口25呢?你可能需要,也可能不需要打开这个端口,这取决于使用什么样的邮件程序来收发邮件。对于运行 FreeBSD 4.6-RELEASE 或更高版本的系统,在/etc/rc.conf中增加下面的行:
sendmail_enable="NO"
将告诉 sendmail 只监听 localhost,这允许所有的邮件客户程序发送邮件。如果你知道你的邮件客户程序带有内置的SMTP代理,或者喜欢冒险,那么可以尝试一下:
sendmail_enable="NONE"
这将彻底关闭25端口。检查一下这是否让你无法发送邮件是很重要的,确保已经关掉了所有应用程序,随后,以超级用户身份执行:
shutdown now
收到提示后按回车、exit。重新登录后给自己发一封邮件,如果收不到,那么把NONE改回NO。

如果你的"sockstat"显示端口111打开,那么把下面几行加到 /etc/rc.conf (或者,如果已经有这些行,把 YES 改为 NO):
nfs_server_enable="NO"
nfs_client_enable="NO"
portmap_enable="NO"
Portmap只有在运行NFS时才是必需的,而这往往不是FreeBSD桌面系统的需要。历史上它有过很多安全问题,因此除非你绝对需要它,否则就别用。

syslog (端口 514) 也可能出现在你的输出结果中。我们可能并不希望完全关掉 syslog ,因为它提供的消息记录是我们需要的。但我们并不需要为此打开端口。在 /etc/rc.conf 文件中增加下面的选项:
syslogd_enable="YES"
syslogd_flags="-ss"
标志中的ss (确认用了两个s,而不是一个) 将禁止来自远程主机的记录并关闭端口,但仍然允许 localhost 进行日志记录。

随后,确认 /etc/rc.conf 中inetd_enable不是YES。如果sockstat输出中有inetd,那么/etc/inetd.conf中肯定有什么项目没有被注释掉,如果不需要的话,那么把那一行前面加上#,并 killall inetd。

如果需要使用DHCP自动获取地址,那么请保持dhclient (udp 68)打开,否则将不能刷新地址。

如果在 sockstat 输出中发现了其他东西,那么请看看 man rc.conf 里面有没有关于如何关掉这些东西的提示。如果没有的话,那么很可能是某个启动脚本启动了一些服务程序,请执行:
cd /usr/local/etc/rc.d
来看看你的系统中的启动脚本。绝大多数 packages/ports 会安装一个扩展名为sample的示范脚本用于启动服务,这些脚本并不被执行;也有一些直接安装能够执行的脚本,它们会在计算机启动的时候加载。禁止某个脚本知性最简单的方法是把它的扩展名改为sample,随后杀掉守护程序,这样sockstat就不会再说什么了。 举例来说,我最近安装了 ethereal 结果发现 snmpd 出现在 sockstat -4 的输出中,这个程序在安全方面名声不佳,因此我把自己升级为root并执行了下面的命令:
cd /usr/local/etc/rc.d
mv snmpd.sh snmpd.sh.sample killall snmpd
你可能会希望把下面的选项加入 /etc/rc.conf :
tcp_drop_synfin="YES"
这个选项可以挫败诸如OS指纹识别的企图(译注:这个选项对最新的nmap无效)。如果你打算开启这个选项,那么,还需要在内核编译配置文件中加入:
options TCP_DROP_SYNFIN
还有两个相关的选项:
icmp_drop_redirect="YES"
icmp_log_redirect="YES"
ICMP 重定向可以被利用完成DoS攻击。这篇 ARP and ICMP redirection games article 介绍了具体的一些情况。

在打开 icmp_log_redirect 选项时请务必小心,因为它会记录每一个ICMP重定向 ,如果你遭到了这样的攻击,那么日志很可能会塞满记录。

建好防火墙之后,请考虑加入下面的选项:
log_in_vain="YES"
这个选项会记录每一个到关闭端口的连接企图。另一个比较有意思的选项是:
accounting_enable="YES"
这将打开系统审计功能,如果你不熟悉他们,那么请阅读 man sa 和 man lastcomm 。

最后,下面的选项可能非常有用:
clear_tmp_enable="YES"
因为它在系统启动时将清空 /tmp ,这永远是一件值得去做的事情。

让我们来研究一下其他能够加强安全的设置。我比较喜欢把默认的口令加密算法改为Blowfish,因为它在提供最佳安全性的前提下,也提供了最快的速度。这里有一份 comparison of algorithms[几种密码学算法的比较]。

当然,如果你对这类东西感兴趣的话,看看 Cryptogram newsletter ,它是Blowfish作者写的。

为了启用 Blowfish 散列,编辑 /etc/login.conf 并把 passwd_format 一行改成下面这样:
:passwd_format=blf:
保存设置,重新创建登录数据库:
cap_mkdb /etc/login.conf
随后需要修改每一个用户的口令,以便让这些口令都使用 Blowfish 散列值。以超级用户的身份执行下面的命令:
passwd username
需要修改所有用户的口令,包括root自己。

完成了这些操作之后,重新检查一下确认自己没有遗漏什么:
more /etc/master.passwd
所有用户的口令应该以$2.开始

最后,重新配置 adduser 程序,让它在以后使用Blowfish。修改 /etc/auth.conf,找到 crypt_default 一行,改为:
crypt_default=blf
你可能已经注意到,每次登录的时候FreeBSD都会提示你,你在用的那个系统是FreeBSD,以及它的版权信息,包括内核的编译时间,等等。这些信息可能有用,但相当烦人,特别是当别人可以登录的时候,它可能会暴露一些你不希望暴露的信息。

可以通过编辑 /etc/motd 来阻止计算机说出一些不该说的东西,或者宣扬你的一些想法,包括你喜欢看的 sci-fi 文摘,或者其他一些——总之你想写什么就写什么。

随后,删除版权信息:
touch /etc/COPYRIGHT
随后,还可以修改登录提示,编辑 /etc/gettytab. 找到 default: 小节,它以下面的文字开头:
:cb:ce:ck:lc
小心地修改 rn rnrnrn: 之间的文字来适应自己的需要。请仔细检查 r 和 n 的数量,并保存修改。例如,我的登录提示是这样的:
I'm a node in cyberspace. Who are you?
login:
可以在其他终端上尝试登录,以确认正确性。

最后,即使你已经修改了motd并从中删除了内核版本信息,默认情况下FreeBSD仍然会在启动之后把这些东西加入 /etc/motd 。因此需要修改 /etc/rc.conf 并加入下面的设置:
update_motd="NO"
这个设置需要重新启动才会生效。

此外,限制登录也是非常重要的。因为这些变动会改变 login 程序的行为,因此需要非常谨慎。比较好的习惯是保持一个以root身份登录的终端,用其他终端尝试。这样如果由于某种原因造成问题,你仍然可以改正。

包括你自己在内的任何人都不应该直接以root身份登录。修改 /etc/ttys。你将注意到 ttyv0 到 ttyv8的一系列设置。把后面的 secure 改为 insecure。注意,这个文件肯定是你不希望有任何错误的一个文件,因此请仔细地进行测试。如果设置正确,root登录将收到 "Login incorrect" 。

我个人倾向于使用所有的9个终端。如果你不打算这样,请把对应的 "on" 改为 "off" ,当然,只是一部分 ttys 。切记保持至少1个 "on," 否则你会无法登录,这将导致系统无法使用。ttyv8 默认情况下是 "off" ,这意味着你需要手动打开X,如果希望自动启动,那么把它改为"on."。

最后一个我想说的限制是阻止从其他地方登录,这是通过编辑 /etc/login.access 实现的。

你可能希望禁止一切远程登录(这意味着你必须物理地坐在机器前面),删除下面这一行前面的#号:
#-:wheel:ALL EXCEPT LOCAL .win.tue.nl
把 .win.tue.nl 去掉,于是它看起来将像这样:
-:wheel:ALL EXCEPT LOCAL
如果你需要从远程登录,那么把.win.tue.nl 替换为相应的IP或域名。如果有多个地址,用空格分开。

如果只有一两个用户的话,那么可以拒绝其他人登录:
-:ALL EXCEPT user1 user2:ttyv0 ttyv1 ttyv2 ttyv3 ttyv4
用具体的用户名替换掉 user1 user2 。如果需要的话,增加相应的tty。

另外,也可以把用户组方在这里。首先,编辑 /etc/group 并增加下面的行:
mygroup:*:100:genisis,dlavigne6,biko
当增加组时,需要保证GID的唯一性。

随后,修改 /etc/login.access :
-:ALL EXCEPT mygroup:ttyv0 ttyv1 ttyv2 ttyv3 ttyv4 ttyv5
测试它非常重要,一定要留一个终端。测试每一个终端上的登录,确认其效果。
Mythos:首个实现自主红队全流程的AI安全模型 大模型在网络安全领域的应用正从代码生成迈向自动化攻防闭环。其核心在于模型是否具备深度推理、符号执行感知与跨层漏洞迁移能力,而非单纯参数规模或微调程度。以Mythos为代表的前沿模型,通过强化学习对齐漏洞挖掘目标链路,结合推理时计算(test-time compute)实现多步自主规划,在真实内核级漏洞发现、POC构造与绕过防护机制等任务中展现出接近资深安全研究员的工程化能力。该技术显著推动‘安全左移’落地,支撑金融、政务、工控等关键场景的自动化渗透测试、开源组件风险扫描与AI原生安全协议构建,标志着AI从辅 阅读详情

相关推荐

Mythos安全大模型:攻击状态机与对抗强化学习驱动的漏洞发现革命

大语言模型在网络安全领域的应用正从基础代码生成迈向深度攻防推理。其核心在于对漏洞语义、操作系统机制与防护体系的联合建模能力,而不仅是参数规模或上下文长度的提升。Mythos通过分层状态缓存(HSC)实现长程攻击路径的稳定追踪,并依托对抗性强化学习(Adversarial RL)构建具备扰动鲁棒性的利用生成能力,显著突破传统fuzzing与静态分析的边界。这种技术范式升级,使模型能在真实企业环境中完成侦察、渗透、提权到持久化的全链路闭环,支撑自动化红队、深度风险评估与合规即代码等高价值场景。本文聚焦Mytho

dielucui7698的博客 416

FreeBSD中/etc下的文件简介

FreeBSD中/etc下的文件可以说是纷繁复杂,对熟悉它的人来讲不算什么,但对于一个新手来说就。。。太乱了,下面是一些经常用到的配置文件的作用和配置方法,但愿能给你一点帮助。  1. aliases  2. crontab  3. csh.cshrc  4. csh.login  5. csh.logout  6. daily  7. defaultdomain  8. exports  9.

逸天的Blog 1222

手机终端进网测试项目-CTA

详细列出了所有CTA测试项目和测试地点 涵盖了泰尔实验室 无委 TMC等测试要求

FreeBSD 6.0架设管理与应用-附录 A /etc目录下的档案介绍

/etc 是 FreeBSD 系统主要设定文件所在,了解这个目录下的档案及其格式,对于我们管理及使用 FreeBSD 将有深入的认识。因此,以下我们就分别说明一下这些档案。 一个个读这些设定档的说明也许有点枯燥,因此,我们将这个章节放在附录中,您可以在有需要时再来参考即可。 A.1 aliases:设定邮件收件者别名 /etc/aliases 是用以告知 sendma...

weixin_33985507的博客 713

FreeBSD 的启动登入与关闭重启

手打 FreeBSD-13.0 启动显示信息

燃吹 U 客帮 2574

如何让你的FreeBSD安全(Securing FreeBSD)

前几天我整理了过去的一些笔记,以及近几年收集的一些安全建议。我认为这可能对您有帮助,所以本周我就暂停文档系列的文章,写一点关于使你的FreeBSD系统安全的内容。 很明显,在这个领域我不可能用一篇文章全面地介绍所有的事情。另外,也不可能给出一个防止四海皆准的,保证任何系统都安全的方案。 在我整理笔记的过程中,我注意到很多都是关于如何让FreeBSD服务器(如,Web服务...

weixin_34102807的博客 235

Securing Apache: Step-by-Step

This article shows in a step-by-step fashion, how to install and configure the Apache 1.3.x Web server in order to mitigate or avoid successful break-in when new vulnerabilities in this softwa

821

Securing MySQL Server - setup root password

 Securing MySQL Server - setup root password<!--google_ad_client = "pub-7825705102693166";google_alternate_ad_url = "http://www.cyberciti.biz/noads.html";google_ad_width = 120;google_ad_

striker的专栏 1324

文件传输利器:LocalSend‌、Croc、在线工具

文件传输利器:概述、LocalSend、实战、Croc、实战、中继服务器、问题、securing channel. room not ready、衍生、Croc GUI、Croc Desktop、在线、

lonelymanontheway的博客 1274

FreeBSD常用命令110条

01.查看网络流量 a.systat -if 1 (1表示1s刷新屏幕一次) b.netstat 1 # Traffic 流量 peak 峰值 average 平均值 02.查看硬盘信息 diskinfo -vt /dev/ad0 disklable /dev/ad0 (分区信息) disklable /dev/ad0s2 03.查看核心信息 vmstat 1 04.查看进程

snrnjhna的博客 5941

FreeBSD committer 徐逸锋先生访谈

FreeBSD committer 徐逸锋先生访谈来自:www.freebsdchina.org发表: delphij时间: 2004/01/23 21:55:14-----------------------------------------------------------------------FreeBSDChina社区最近采访了徐逸锋(David XU),一位来自中国大陆的Fre

Fenng's Blog 2352

协作开发中的质量保证技术——并行版本控制、每日构建和交付工程

协作开发中的质量保证技术——并行版本控制、每日构建和交付工程 原创:司徒彦南 2003年10月29日 目录 摘要 问题的提出 并行版本控制——多人协作开发的有效保障 代码提交和同步 编码过程中的沟通纽带——commit mail 日常测试——每日构建 有效的版本控制——代码分支、版本标记 特性冻结与代码冻结 交付工程 总结 参考文献 作者简介 摘要

zfluo的专栏 1975

FreeBSD安装详细讲解-一步一步教你安装FreeBSD

freeBSD的下载地址:http://mirrors.163.com/FreeBSD/ISO-IMAGES-amd64/8.3/FreeBSD-8.3-RELEASE-amd64-dvd1.iso用迅雷下载即可, 虚拟机的硬盘设定为20G,内存512MB,分区情况如下: / 2048M swap 1024M /usr 17401M 下面详解freeBSD的安装...

weixin_34272308的博客 2625

[FreeBSD] 安全加固

一、安装操作系统 1.选择发行版本 安装生产服务器,应当尽量选择最新的稳定版本。本文将采用FreeBSD 4.8 RELEASE。 4.8-RELEASE是成文时候最新的-STABLE版本。5.0-RELEASE和即将推出的5.1-RELEASE都是-CURRENT分支的发行版本,其稳定性和性能可能不如-STABLE,仅适合于开发者和发烧友。对于生产服务器来说,miniinst或

唐僧没有肉的博客 1677
上一篇: CNFUG服务器实现过程
下一篇: Trac on FreeBSD实践
josonchen
博客等级 码龄27年 47粉丝 589原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值