★Linux系统深度安全加固author:ayazerodrdos@163.comPersonalweb--://ph4nt0m.net注:以下内容可能不适用于某些场合,请对号入座1.安装和升级尽量选用最新的Linux发行版本,安装前拔掉网线,断开物理连接,安装时建议用custom自定义方式安装软件包,数量以少为好,一般来说服务器没有必要安装X-windows,在lilo/grub引导器中加入口令限制,防止能够物理接触的恶意用户因为Linux安装光盘的rescue模式可以跳过这个限制,所以还要给bios加上密码或服务器机箱上锁/var,/home,/usr,/root等目录用独立的物理分区,防止垃圾数据和日志填满硬盘而导致D.o.S攻击.root账号给予强壮的口令.安装完毕立即用up2date或apt升级系统软件,有时升级内核也是必要的,因为内核出现问题同样会给攻击者提供机会Apt是DebianGNULinux下的一个强大的包管理工具,也可用于其他版本的Linux.2.账号如果系统中的用户比较多,可以编辑/etc/login.defs,更改密码策略删除系统中不必要帐户和组,[root@ayazero/]#userdel-rusername如果不开匿名ftp则可以把ftp账号也删了最安全的方式是本地维护,可惜不太现实,但还是需要限制root的远程访问,管理员可以用普通账户远程登录,然后su到root,我们可以把使用su的用户加到wheel组来提高安全性在/etc/pam.d/su文件的头部加入下面两行:authsufficient/lib/security/pam_rootok.sodebugauthrequired/lib/security/pam_wheel.sogroup=wheel然后把可以执行su的用户放入wheel组[root@ayazero/]#usermod-G10admin编辑/etc/securetty,注释掉所有允许root远程登录的控制台,然后禁止使用所有的控制台程序,[root@ayazero/]#rm-f/etc/security/console.apps/servicename登录采用加密的ssh,如果管理员只从固定的终端登陆,还应限制合法ssh客户端的范围防止嗅探及中间人攻击将命令历史纪录归为零,尽可能的隐藏你做过的事情[root@ayazero/]#unsetHISTFILESIZE3.服务最少服务原则,凡是不需要的服务一律注释掉在/etc/inetd.conf中不需要的服务前加#,较高版本中已经没有inetd而换成了Xinetd;取消开机自动运行服务,把/etc/rc.d/rc3.d下不需要运行的服务第一个字母大写改称小写,或者由setup命令启动的GUI界面中的service更改如果你希望简单一点,可以使用/etc/host.allow,/etc/host.deny这两个文件,但是本文计划用iptables防火墙,所以不在此详述.4.文件系统权限找出系统中所有含s位的程序,把不必要得s位去掉,或者把根本不用的直接删除[root@ayazero/]#find/-typef(-perm-04000-o-perm-02000)-execls-lg{}[root@ayazero/]#chmoda-sfilename防止用户滥用及提升权限的可能性把重要文件加上不可改变属性[root@ayazero/]#chattr+i/etc/passwd[root@ayazero/]#chattr+i/etc/shadow[root@ayazero/]#chattr+i/etc/gshadow[root@ayazero/]#chattr+i/etc/group[root@ayazero/]#chattr+i/etc/inetd.conf[root@ayazero/]#chattr+i/etc/httpd.conf...............................具体视需要而定,我怀疑现在的入侵者都知道这个命令,有些exploit溢出后往inetd.conf写一条语句绑定shell在一个端口监听,此时这条命令就起了作用,浅薄的入侵者会以为溢出不成功.找出系统中没有属主的文件:[root@ayazero/]#find/-nouser-o-nogroup找出任何人都有写权限的文件和目录:[root@ayazero/]#find/-typef(-perm-2-o-perm-20)-execls-lg{}[root@ayazero/]#find/-typed(-perm-2-o-perm-20)-execls-ldg{}防止入侵者向其中写入木马语句(诸如一个shell的拷贝)或继承属主权限而非法访问找出并加固那些历来被入侵者利用的文件,比如.rhosts编辑/etc/security/limits.conf,加入或改变如下行:*hardcore0*hardrss5000*hardnproc205.Banner伪装入侵者通常通过操作系统,服务及应用程序版本来攻击,漏洞列表和攻击程序也是按此来分类,所以我们有必要作点手脚来加大入侵的难度更改/etc/issue,因为reboot后重新加载,所以编辑/ect/rc.d/rc.local#Thiswilloverwrite/etc/issueateveryboot.So,makeanychangesyou#wanttomaketo/etc/issuehereoryouwilllosethemwhenyoureboot.#echo/etc/issue#echo$R/etc/issue#echoKernel$(uname-r)on$a$(uname-m)/etc/issue##cp-f/etc/issue/etc/issue.net#echo/etc/issue把以上行前的#去掉Apache不回显版本:apache的配置文件,找到ServerTokens和ServerSignature两个directive,修改默认属性:#ServerTokensFullServerTokensProd----------#ServerSignatureOnServerSignatureOff----------修改uname拿出uname.c的源码,找到如下行print_element(PRINT_SYSNAME,name.sysname);//操作系统名如linuxprint_element(PRINT_NODENAME,name.nodename);//主机名print_element(PRINT_RELEASE,name.release);//发行版本,如:2.4.20-18print_element(PRINT_VERSION,name.version);//print_element(PRINT_MACHINE,name.machine);//机器类型,如i686print_element(PRINT_PROCESSOR,processor);//处理器类型可以修改为print_element(PRINT_SYSNAME,HP-UX);.......编译后替换/bin/uname其他服务及程序的修改可以查看其配置文件或者源码不要改太多,否则会给系统管理带来大麻烦。6.Iptales防火墙规则假设我们的服务器server1运行apache,sshd(sshd可以不运行在标准端口,配置文件中能修改)eth0网卡接Internet,eth1连接LAN,管理员在家中拨号登陆到server2(其私用网络IP为192.168.0.12),再登陆server1[roor@ayazeroroot]#iptables-AINPUT-ieth1-s192.168.0.12-ptcp--dport22-jACCEPT为防止IPspoofing的可能,还可以绑定server2的网卡地址:sh-2.05b#iptables-AINPUT-ieth1-s192.168.0.12--mac-source01:68:4B:91:CC:B7-ptcp--dport22-jACCEPT不过好像也很少有入侵者能够做到这种地步,而且没什么利用的价值[root@ayazeroroot]#iptables-AINPUT-ieth0-ptcp--dport80-jACCEPT[root@ayazeroroot]#iptables-AINPUT-mstate--stateESTABLISHED,RELATED-jACCEPT[root@ayazeroroot]#iptables-AINPUT-jDROP对攻击有所了解的人都知道“端口重定向+反向管道”的美妙结合来穿越防火墙的例子吧这种技巧已经运用太广,而危害很大为了对抗这种难以防御的攻击,我们必须以牺牲一定的易用性为代价[root@ayazeroroot]#iptables-AOUTPUT-oeth0-ptcp--syn-jDROP以上规则将阻止由内而外的TCP主动连接另外,用tftp或其他客户端反向攫取文件的攻击行为也很普遍,由于tftp以及其他一些工具依赖UDP,所以现在要把它彻底抹煞掉[root@ayazeroroot]#iptables-AOUTPUT-oeth0-pudp-jDROPPS:在更新系统和调试网络时需要把这两条规则临时去掉因为入侵的本质就是通过文本或图形界面在标准或非标准端口得到目标操作系统的shell,所以,这不仅能阻止反向管道本身,还能免疫很多入侵技巧不过对一般的系统管理员而言,这太苛刻了!iptables的一些攻击对策Syn-floodprotection:[root@ayazerofoo]#iptables-AFORWARD-ptcp--syn-mlimit--limit1/s-jACCEPTFurtiveportscanner:[root@ayazerofoo]#iptables-AFORWARD-ptcp--tcp-flagsSYN,ACK,FIN,RSTRST-mlimit--limit1/s-jACCEPTPingofdeath:[root@ayazerofoo]#iptables-AFORWARD-picmp--icmp-typeecho-request-mlimit--limit1/s-jACCEPT此外,iptables还能配置出让一些扫描行为比如nmap失效的规则,应当注意:防火墙不是万能的,当一个攻击者足够疯狂时,不要指望你的防火墙能抵挡得住DDoS的洪水。关于iptables得更多细节,请参阅RustyRussell的PacketFilteringHOWTO7.完整性校验tripwire是一个比较有名的工具,它能帮你判断出一些重要系统文件是否被修改过现在的linux发行版中一般都带有他的开源版本,在默认的校验对象配置文件中加入一些敏感文件就可以使用RPMMD5校验[root@ayazerorpm]#rpm-V用manrpm查看命令帮助,-V参数用于MD5校验,注意要把rpm校验产生的二进制数据文件作一个硬备份,以防止其本身被修改8.自行扫描普通的安全加固基本上是做完了,现在让我们来对自己做的系统做一个风险评估,推荐使用nessuslatestversion[homepage:](既然从头到尾用的都是开源的东西,这里也继续节约成本,呵呵)也许你觉得自己的系统没有问题了,但有时nessus还是能报告出一些问题,比如一个第三方的webmail有某些安全缺陷,如果没有问题最好,有问题我们再回去修补9.高级技巧以上的措施已经足以让大多数入侵者望而却步,接下来的部分给那些对安全极度敏感的偏执狂缓冲区溢出对策中有:stackgurad,stackshield,formatguard,h