位置: 编程技术 - 正文
推荐整理分享FreeBSD下创建安全的Web服务器(freebsd 安装),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:freebsd创建文件夹,freebsd创建新用户,freebsd软件安装,freebsd怎么安装桌面,freebsd 安装,freebsd 安装,freebsd创建文件夹,freebsd创建文件夹,内容如对您有帮助,希望把文章链接给更多的朋友!
序言一、系统和服务程序的安装1. 系统安装2. 服务程序安装二、系统安全设置1. 用户控制2. 文件访问控制3. 系统服务和端口控制4. 日志管理和控制5. 文件指纹检测6. 系统指纹泄露和防范7. 系统内核安全8. 系统安全优化三、服务程序的安全设置1. Apache安全设置2. PHP安全设置3. Mysql安全设置4. vsFTPd安全设置5. SSH的安全设置四、防火墙的安装和设置1. 安装ipfw2. 配置ipfw五、Unix/Linux上的后门技术和防范1. 帐号后门2. shell后门3. cron服务后门4. rhosts后门5. Login后门6. Bind后门7. 服务后门8. rootkit后门9. 内核后门. 其他后门六、结束语附录序言在我们跑Web服务器的时候,大家可能都会一致认为使用Linux+Mysql+Apache+PHP整个开源的系统是比较好的选择,但是我个人认为这是不合理的,首先要根据你的应用来觉得你使用什么服务。假如你需要跑Oracle等大型应用的话,而且Oracle在Linux下是支持的比较好的,那么使用Linux是个好的选择,因为在FreeBSD下安装Oracle是个非常麻烦的事情。那么如果是跑普通的网站应用的话,我觉得使用FreeBSD+ Mysql+Apache+PHP是个好的选择,因为对于一个网站来讲,稳定安全是第一位的,否则你的网站什么时候被人修改了都不知道怎么回事,或者被黑客入侵,把数据修改或者删除,那就糟糕了,毕竟现在什么红客、黑客的一堆,不能不防。当然,不是说Linux不安全,但是在Linux下集成了很多不安全的程序,导致了它的不安全,但如果设置的好,Linux一样可以很安全。在中国网络应急响应中心( 系统安装为了保证系统的安全,我们系统准备采用最新的FreeBSD版本,首先是安全,系统兼容性也比较好,这个主要是个人习惯和需求,为了简单起见,这里我们选用了最新的FreeBSd5.3版本进行安装。整个安装过程我就不讲了,如果不清楚的朋友可以参考FreeBSD中文手册( Webmin等,还要把perl等包装上。系统文件拷贝完以后,会要求配置一些设置,比如把IP地址、名字服务器等设好,不要打开IPv6,不需要 DHCP等服务,不要系统默认的FTP服务,配置 /etc/inetd.conf 时把SSH服务打开,方便我们进行远程管理,如果不想使用inetd这个超级服务来管理的话,可以关闭它,在/etc/rc.conf中添加 inetd_enable="NO",然后设置sshd_enable="YES"一样可以打开SSH服务,后面我们会详细谈到SSH的设置。系统装完后,在 /etc/inetd.conf 中把除了ssh之外的服务全部关闭,特别是telnet和rlogin等服务,一定要慎重,否则很可能每几天系统就被入侵了。安装完系统后,建议对系统进行升级,比如使用 make world 或 cvsup 把系统内核和ports进行升级。这个步骤和Windows装完后打补丁差不多。2. 服务程序安装系统装完以后,就开始安装我们的应用软件,我们的方针还是最新的软件是最安全的,比如能够防止一些老版本中的溢出等等。我们基本就是要让我们的系统有数据库,同时能够处理Web服务,同时能够远程对网站进行文件管理的FTP服务。我们基本选择的程序都是比较通常的程序。另外,为了有个可视化的管理工具,我们同时也可以安装一个基于浏览器的管理工具Webmin,方便没有ssh客户端等等的时候进行管理。首先我们选用的Web服务是Apache httpd 2.0.,这是目前的最新版本,当然你也可以考虑1.3的版本,主要是看个人习惯。我们网站是PHP程序编写,所以要安装PHP,版本是 4.3.,也是最新的版本,如果你的网站程序需要PHP5的支持,那么可以下载php5.0.4。数据库还是最快速的Mysql,选择的版本是最新的 4.0.,如果你需要外键、事务、子查询、存储过程等的支持,那么你可以考虑4.1和5.0的版本。最后我们的FTP选择最安全的vsFTPd,因为它是最安全快速的,我在局域网中测试它的最高创数速率能够达到MB/S,proFTPd只有8MB/S,vsFTPd针对小型FTP服务器支持非常好,毕竟我用户不多,几个更新网站而已,当然,如果你喜欢简单方便,也可以考虑使用FreeBSD自带的FTPd,功能和易用性也是不错的。如果你用户比较多,并且功能要求比较高,建议使用proFTPd、pure-FTPd、wu-FTPd等,但有些FTPd不是非常安全,选择时候一定要慎重考虑。服务器程序列表:Apache 2.0. 下载地址: 4.3. 下载地址: 4.0. 下载地址: 2.0.2 下载地址: = 最大的安全,尽量能够不需要使用的服务就不要安装,比如telnetd、rlogind等,那么相反会对服务器安全构成威胁。安装以上程序你可以采用手工编译安装,也可以采用FreeBSD的ports 来进行安装,这看个人爱好,我个人比较喜欢使用手工安装,如果不明白具体安装的朋友可以参考我的Blog上关于安装Apache+PHP+Mysql的方法。二、系统安全设置1. 用户控制尽量少的用户,我们的FTP帐户是和系统帐户绑定在一起的,所以我们添加用户的时候先建立一个目录,然后把新建的用户主目录指向到该目录下。假设我需要一个用户能够管理我的网站,而我网站的目录是在 /usr/www 目录下,那么我们新建立的用户 www_user 的主目录就指向 /usr/www 目录,同时它的shell是没有的:/usr/sbin/nologin ,主要是为了防止它通过ssh登陆到系统。同时FTP的密码也要设置的非常复杂,防止黑客通过暴力破解获得FTP权限。另外还要说道我们的root用户的密码,我想最少应该不要少于位的数字+字母+字符的密码(我的密码是位),否则是非常不安全的,如果密码简单,那么黑客通过短时间的暴力破解 SSH中的root帐户,不用几天,系统就可能被攻破了,同时也建议最少一个月更改一次root用户的密码。(强烈建议一般帐户不要有登陆系统的权限,就是把shell设为/usr/sbin/nologin)一般如果要使用root权限建议建立一个属于wheel组的小用户,然后登陆后通过su命令提升为root用户进行管理,如果黑客通过破解了我们普通用户的权限后登陆系统,也不能直接通过root权限进行管理,这是一种安全防范的简单方法。2. 文件访问控制有时候被黑客入侵后拿到了小权限用户,比如传了一个WebShell到系统中,那么对方很可能会把 /etc/passwd 等内容直接读取出来,同时查看/etc/master.passwd中对加密后的root用户的密码hash进行破解,最后拿到密码进行登陆系统。那么我们就要控制部分文件只有root能够访问,其他用户无权访问。比如uname,gcc等,如果黑客拿到小权限用户后就会查看系统版本,然后找到该版本系统对应的溢出程序,使用gcc来进行编译,如果我们能够限制黑客访问uname和gcc等程序,能在一定程度上减缓黑客入侵的脚步。使用chmod来改变某个文件的权限信息,比如我要 /etc/passwd 和 /etc/master.passwd 文件只能允许root访问:使用八进制数字来设置# chmod /etc/passwd# chmod /etc/master.passwd使用字符标记来进行设置# chmod u+w+r+x,go-w-r-x /etc/passwd# chmod u+w+r+x,go-w-r-x /etc/master.passwd系统中有多个重要文件需要设置控制访问权限,一定要控制好,否则将会构成重要威胁。3. 系统服务和端口控制 端口开的越多就越给黑客多一个入侵的机会,服务越多,危险越大,因为你不知道那些服务是不是有潜在的漏洞或者又发现了新的漏洞,所以尽量少的服务,比如sendmail默认是打开的,那么些建议你把sendmail关闭,关闭防范是在 /etc/rc.conf中加上:sendmail_enable = "NONE",如果设为"NO"那么只能够关闭掉pop3服务,不能关闭smtp的服务,所以要设置为"NONE"。系统中最好除了我们能够看到的Apache、Mysql、vsFTPd、SSH之外不要打开其他任何端口和服务。基本的方式是使用netstat -a 查看打开的端口,然后从对应的端口来找相关的服务,比如我们这里应该只允许开的端口有 , , , 等,如果有其他端口,那么一定要仔细检查,很可能是黑客的后门或者是会对系统安全构成威胁的服务。同时有些服务不需要****网络连接的话,只是需要本地的连接,比如Mysql,那么就可以关闭Socket****,这个将在Mysql安全设置中讲解,另外,可以通过防火墙来控制部分端口访问和连接状况,比如Mysql的端口只允许..0.1访问,那么我们就在ipfw里添加规则:ipfw add allow tcp from ..0.1 to ...1 in这样就能够防止黑客来访问服务器上的Mysql服务。具体防火墙的设置将在下面“防火墙设置”中详细讲解。4. 日志管理和控制 (未完)5. 文件指纹检测文件指纹就是我们文件的基本信息,比如文件权限、文件所属用户/组、文件最后修改日期、文件大小等等,这些都是重要信息,一般黑客入侵后都可能修改文件,那么文件指纹就不一样了。另外,文件的md5校验值也属于文件的指纹的一种。为了防止黑客篡改系统中的部分核心文件,比如 /etc/passwd, /etc/shadow, /etc/inetd.conf 等等,那么我们就可以考虑把部分重要文件进行备份,同时做一份目前有的文件的一个指纹保留,比如把 /etc,/bin, /usr/bin 目录下的文件进行指纹保留:# ls -l /etc > /var/back/etc.txt# ls -l /bin > /var/back/bin.txt# ls -l /bin > /var/back/usrbin.txt当然,还有就是给每个重要的文件加上md5校验值,如果觉得不对劲的时候就进行匹配,保证文件的安全。你可以给你觉得需要做指纹备份的目录进行备份,一般这是为了以后被黑客入侵后的系统检测和系统恢复。比如可以通过文件被修改的时间来确定是不是被入侵,比如可以对比看 /etc/inetc.conf文件和备份的文件有什么不同来确定是不是安装了服务型后门等。6. 系统指纹泄漏和防范 (未完)一般黑客为了入侵某个系统,一定会先进行扫描等工作,扫描包括目标系统的端口开放情况和服务器使用服务程序和操作系统情况。比如很简单的手工检测Web服务的指纹:# telnet target.com 那么就很可能返回Apache和PHP的版本信息,那么同时也可能使用扫描工具对Mysql、vsFTPd、SSH等服务的端口进行扫描,获取这些服务的指纹。多暴露一份系统信息,那么系统就多一份危险。那么解决办法就是把服务器上服务程序的Banner全部修改掉,从而能够迷惑黑客。下面简单的说一些修改那些服务Banner的方法。* Apache修改httpd.conf文件,设置以下选项:ServerSignature Off ServerTokens Prod 上面的适用apache1***, apache 2.0这些都是默认 , 不过还是有server=Apache字样, 若要完全去掉需重新?译。彻底地去掉banner, 修改httpd.h:Include/httpd.h Define SERVER_BASEVENDOR "Apache Group" Define SERVER_PRODUCTVENDOR "Apache" Define SERVER_BASEVERSION "1.3."后从新编译Apache就能够完全去掉了。* PHP在php.ini中设置 expose_php = Off ,那么将无法在 http头信息中看到php的版本信息。* Mysql* vsFTPdvsFTPd基本上是无法获取到一些关于vsFTPd的banner信息的,不过因为vsFTPd默认的banner信息是"Welcome to FTP Server!"对于高手来说,还是能够猜测到一点,所以我们要彻底改掉。修改vsFTPd的配置文件 vsftpd.conf 中的下面选项:Ftpd_banner=xxxxx 把后面的xxxxx改为你想要的banner信息。* SSH好象FreeBSD下默认安装的SSH被telnet target.com 的时候会显示SSH和FreeBSD的信息,简直是个大祸害,什么都告诉别人了,但是目前为止我还不知道怎么修改,知道的高手请指点。7. 系统内核安全FreeBSD有个比较强的功能,就是能够定义系统内核的安全等级,主要是为了防止内核后门专门定制的,能通过不同的等级限制对内核的访问和对防火墙等的修改。我们首先要开启系统的安全等级,然后设定安全等级,我们打开 /etc/rc.conf:# ee /etc/rc.conf加入下面的内容:kern_securelevel_enable="YES"kern_securelevel="-1"第一句是打开安全等级,第二句是定义等级。它一共五个等级,下面说说不同之处。* kern_securelevel -1:这是系统默认级别,没有提供任何内核的保护错误;* kern_securelevel 0:基本上作用不多,当你的系统刚启动就是0级别的,当进入多用户模式的时候就自动变成1级了。* kern_securelevel 1:在这个级别上,有如下几个限制:a. 不能通过kldload或者kldunload加载或者卸载可加载内核模块;b. 应用程序不能通过/dev/mem或者/dev/kmem直接写内存;c. 不能直接往已经装在(mounted)的磁盘写东西,也就是不能格式化磁盘,但是可以通过标准的内核接口执行写操作;d. 不能启动X-windows,同时不能使用chflags来修改文件属性;* kern_securelevel 2:在 1 级别的基础上还不能写没装载的磁盘,而且不能在1秒之内制造多次警告,这个是防止DoS控制台的;* kern_securelevel 3:在 2 级别的级别上不允许修改IPFW防火墙的规则。如果你已经装了防火墙,并且把规则设好了,不轻易改动,那么建议使用3级别,如果你没有装防火墙,而且还准备装防火墙的话,不建议使用。我们这里推荐使用 2 级别,能够避免比较多对内核攻击。8. 系统安全优化一般优化系统主要是重新编译内核,去掉一些不要的驱动等等,你可以参考我在我Blog上写的关于编译内核的文章。我们这里对网络和内核一些选项进行优化和安全设置。编辑 /etc/sysctl.conf 文件,在里面加入如下内容:(有注释)#最大的待发送TCP数据缓冲区空间net.inet.tcp.sendspace=#最大的接受TCP缓冲区空间net.inet.tcp.recvspace=#最大的接受UDP缓冲区大小 net.inet.udp.sendspace=#最大的发送UDP数据缓冲区大小 net.inet.udp.maxdgram=#本地套接字连接的数据发送空间 net.local.stream.sendspace=#加快网络性能的协议net.inet.tcp.rfc=1net.inet.tcp.rfc=1net.inet.tcp.rfc=1net.inet.tcp.rfc=1#最大的套接字缓冲区kern.ipc.maxsockbuf=#系统中允许的最多文件数量kern.maxfiles=#每个进程能够同时打开的最大文件数量 kern.maxfilesperproc=#当一台计算机发起TCP连接请求时,系统会回应ACK应答数据包。该选项设置是否延迟ACK应答数据包,把它和包含数据的数据包一起发送,在高速网络和低负载的情况下会略微提高性能,但在网络连接较差的时候,对方计算机得不到应答会持续发起连接请求,反而会降低性能。 net.inet.tcp.delayed_ack=0#屏蔽ICMP重定向功能net.inet.icmp.drop_redirect=1net.inet.icmp.log_redirect=1net.inet.ip.redirect=0net.inet6.ip6.redirect=0#防止ICMP广播风暴net.inet.icmp.bmcastecho=0net.inet.icmp.maskrepl=0#限制系统发送ICMP速率 net.inet.icmp.icmplim=#安全参数,编译内核的时候加了options TCP_DROP_SYNFIN才可以用net.inet.icmp.icmplim_output=0 net.inet.tcp.drop_synfin=1 #设置为1会帮助系统清除没有正常断开的TCP连接,这增加了一些网络带宽的使用,但是一些死掉的连接最终能被识别并清除。死的TCP连接是被拨号用户存取的系统的一个特别的问题,因为用户经常断开modem而不正确的关闭活动的连接net.inet.tcp.always_keepalive=1 #若看到net.inet.ip.intr_queue_drops这个在增加,就要调大net.inet.ip.intr_queue_maxlen,为0最好 net.inet.ip.intr_queue_maxlen= #防止DOS攻击,默认为net.inet.tcp.msl=#接收到一个已经关闭的端口发来的所有包,直接drop,如果设置为1则是只针对TCP包net.inet.tcp.blackhole=2#接收到一个已经关闭的端口发来的所有UDP包直接dropnet.inet.udp.blackhole=1#为网络数据连接时提供缓冲net.inet.tcp.inflight.enable=1#如果打开的话每个目标地址一次转发成功以后它的数据都将被记录进路由表和arp数据表,节约路由的计算时间,但会需要大量的内核内存空间来保存路由表net.inet.ip.fastforwarding=0#kernel编译打开options POLLING功能,高负载情况下使用低负载不推荐SMP不能和polling一起用#kern.polling.enable=1#并发连接数,默认为,推荐在-之间,数字越大占用内存也越大kern.ipc.somaxconn=#禁止用户查看其他用户的进程security.bsd.see_other_uids=0#设置kernel安全级别kern.securelevel=0#记录下任何TCP连接net.inet.tcp.log_in_vain=1#记录下任何UDP连接net.inet.udp.log_in_vain=1 #防止不正确的udp包的攻击net.inet.udp.checksum=1 #防止DOS攻击net.inet.tcp.syncookies=1#仅为线程提供物理内存支持,需要兆以上内存kern.ipc.shm_use_phys=1# 线程可使用的最大共享内存kern.ipc.shmmax=# 最大线程数量kern.ipc.shmall=# 程序崩溃时不记录kern.coredump=0# lo本地数据流接收和发送空间net.local.stream.recvspace=net.local.dgram.maxdgram=net.local.dgram.recvspace=# 数据包数据段大小,ADSL为。net.inet.tcp.mssdflt=# 为网络数据连接时提供缓冲net.inet.tcp.inflight_enable=1# 数据包数据段最小值,ADSL为net.inet.tcp.minmss=# 本地数据最大数量net.inet.raw.maxdgram=# 本地数据流接收空间net.inet.raw.recvspace=#ipfw防火墙动态规则数量,默认为,增大该值可以防止某些病毒发送大量TCP连接,导致不能建立正常连接net.inet.ip.fw.dyn_max=#设置ipf防火墙TCP连接空闲保留时间,默认(小时)net.inet.ipf.fr_tcpidletimeout=三、 服务程序的安全设置到这里就是本文的重点所在了,我们将花费比较多的文字进行描述,当然,所以描述不一定是非常正确的,也希望能够对你有一些帮助。我们系统默认是运行了包括Apache、Mysql、vsFTPd,SSH等服务,我们以下进行一一讲解。1. Apache的安全设置Apache的核心设置就是在 httpd.conf 里面,我们安装的Apache的目录是在 /usr/local/apache2/ 下,那么我们的配置文件就是在 /usr/local/apache2/conf/httpd.conf ,如果你是使用ports等安装的,配置文件应该是在/etc或/usr/local/etc目录下。使用ee或者vi打开配置文件:# ee /usr/local/apache2/conf/httpd.conf下面我们就要进行比较多的安全设置了,基本的服务、端口、主目录等等设置就不说了,只讲与安全有关的设置。(1)指定运行Apache服务的用户和组这是比较重要的,因为权限是继承的,如果运行Apache服务的用户权限太高,那么很可能使得入侵者通过WebShell等就会对系统构成严重威胁。一般我们运行Apache的是nobody用户和nobody组。在httpd.conf的-行之间找到User和Group选项,比如我们默认设置如下(去掉了注释信息):User nobodyGroup #-1(2) Apache的日志文件Apache的日志文件是非常重要的,可以发现apache的运行状况和访问情况,对于判断入侵等有重要帮助。它的默认选项是:# 错误日志存放目录,默认是存放在apache安装目录的logs下ErrorLog logs/error_log# 日志记录的级别,级别有debug, info, notice, warn, error, crit等,默认是“warn”级别LogLevel warn# 访问日志记录的格式,每一种格式都有不同的内容,根据你的需要进行定制,以获取最多访问信息LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combinedLogFormat "%h %l %u %t "%r" %>s %b" commonLogFormat "%{Referer}i -> %U" refererLogFormat "%{User-agent}i" agent# 使用上面格式的那一种,默认是使用commonCustomLog logs/access_log common文件格式预定义的格式内容:%a 远程用户IP%A 本地httpd服务器的ip%f 传送的文件名%h 远程主机%m 请求方式%l identd给出的远程名%p 连接的httpd端口号%P 请求的httpd进程%t 时间%T 服务请求时间你可以定制自己的日志格式,然后通过CustomLog logs/access_log common来进行调用。注意,日志文件是由运行Apache的用户进行打开的,要注意该文件的安全,防止被黑客改写或者删除。(3) Apache服务信息显示控制在配置文件中有个选项是控制是否显示apache版本信息、主机名称、端口、支持的cgi等信息的:ServerSignature On默认为On,那么将显示所有信息:我故意访问一个不存在的文件: (Unix) PHP/4.3. Server at target.com Port 所有Apache和PHP的信息暴露无遗,这是很不安全的。当然同时还有Off和EMail选项,Off将不显示任何信息,EMail将显示管理员的邮箱地址,建议设为Off或者EMail,这样能够避免泄漏Apache服务器的信息给黑客。(4) 目录浏览在httpd.conf中可以设置apache能够对一些没有索引文件的网页目录进行目录浏览:Options Indexes FollowSymLinksAllowOverride None这是不合适也不安全的,建议不需要目录浏览:Options FollowSymLinksAllowOverride None(5) 用户主页设置httpd.conf中的:UserDir public_html能够使得每个使用系统的用户在自己的主目录下建立 public_html 目录后就能够把自己的网页放进该目录,然后通过: 就能够显示自己的网页,这是不安全的,而且对于我们服务器来讲,这没有必要,所以我们直接关闭该功能:UserDir disabled或者把该内容改名,改成 一个黑客比较不容易猜到的文件名,比如:UserDir webserver_public_htmlpath也可以只允许部分用户具有该功能:UserDir enabled user1 user2 user3(6) CGI执行目录如果你的apache要执行一些perl等cgi程序,那么就要设置一下选项:ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"但是这也给了黑客利用一些不安全的cgi程序来进行破坏,所以如果你不需要cgi的话,建议关闭该选项:#ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"(7) 控制PHP脚本只能访问指定目录在httpd.conf添加如下内容:php_admin_value open_basedir /usr/www后面的路径是你需要PHP脚本能够访问的目录,如果PHP脚本想要访问其他目录将出项错误提示
UNIX系统正确关机方法 UNIX操作系统是目前网络上用得最多的操作系统之一,使用UNIX系统,机器的关机要比使用DOS单用户机器的关机过程复杂得多。在UNIX下如不使用正确的关机
让OpenSoralis进入纯文本模式 在命令行中敲init1,其实是进入单用户模式。另外,使用ctrl+z可以暂停当前正在执行的进程,如vim,要想恢复使用%+1,其中1代表第一个被中止的进程。
freeBSD创建svn仓库 1:创建仓库svnadmincreate/home/svn/reins(reins为我的代码仓库)同时修改权限chown-Rsvn:svn/home/svn/reins2:修改配置文件,svn的配置文件在/home/svn/reins/conf/下,三个配
标签: freebsd 安装
本文链接地址:https://www.jiuchutong.com/biancheng/353971.html 转载请保留说明!上一篇:Freebsd 下运行 QQ For Linux 的方法(freebsd怎么安装)
友情链接: 武汉网站建设