2安装
2.1
使系统处于单独(或隔离)的网络中。以防止未受保护的系统连接到其它网络或互联网中受到可能的攻击
安装完成后将下面软件卸载
pumpapmdlsapnptoolsredhat-logos
mt-stkernel-pcmcia-csSetserialredhat-relese
ejectlinuxconfkudzugd
bcgetty_psraidtoolspciutils
mailcapsetconsolegnupg
用下面的命令卸载这些软件:
[root@deep]#rpm–esoftwarename
卸载它们之前最好停掉三个进程:
[root@deep]#/etc/rc.d/init.d/apmd stop
[root@deep]#/etc/rc.d/init.d/sendmail stop
[root@deep]#/etc/rc.d/init.d/kudzu stop
在进行系统规划时,总的原则是将不需要的服务一律去掉。默认的linux就是一个强大的系统,运行了很多的服务。但有许多服务是不需要的,很容易引起安全风险。这个文件就是/etc/inetd.conf,它制定了/usr/sbin/inetd将要监听的服务,你可能只需要其中的两个:telnet和ftp,其它的类如shell、login、exec、talk、ntalk、imap、pop-2、pop-3、finger、auth等,除非你真的想用它,否则统统关闭。
3.用户帐号安全3.1密码安全策略
l口令至少为6位,并且包括特殊字符
l口令不要太简单,不要以你或者有关人的相关信息构成的密码,比如生日、电话、姓名的拼音或者缩写、单位的拼音或者英文简称等等。
l口令必须有有效期
l发现有人长时间猜测口令,需要更换口令
3.2检查密码是否安全
可以使用以下几种工具检查自己的密码是否安全:
lJOHN,crack等暴力猜测密码工具
l在线穷举工具,包括Emailcrk、流光等
3.3 PasswordShadowing
l使用shadow来隐藏密文(现在已经是默认配置)
l定期检查shadow文件,如口令长度是否为空。
#awk -F: length($2)==0 {print $1} /etc/shadow
3.4管理密码
l设置服务器口令有效期为3个月(编辑/etc/login.defs文件)
l口令长度至少8位 (如linux默认为5,可以通过编辑/etc/login.defs修改)
l禁用root登录服务器;
l只允许服务器管理人员使用su命令成为root。
编辑/etc/pam.d/su文件,在文件头部加上:
authsufficient /lib/security/pam_rootok.so debug
auth required/lib/security/pam_wheel.so group=wheel
Red hat 7.0中su文件已做了修改,直接去掉头两行的注释符就可以了
[root@deep]#usermod -G10 admin来将用户加入wheel组
3.5修改SSH端口
修改ssh端口改成10000以上,降低网络工具扫描到端口的机率
修改方法:
#编辑 /etc/ssh/ssh_configvi /etc/ssh/ssh_config#在 Host *下 ,加入新的 Port值。以 18439为例(下同):Port 22Port
18439#编辑 /etc/ssh/sshd_configvi /etc/ssh/sshd_config#加入新的 Port 值Port 22Port 18439#保存后,重启 SSH服务:servicesshd restart
3.6限制IP登录
3.6.1
编辑 /etc/hosts.allowvi /etc/hosts.allow#例如只允许123.45.67.89登录sshd:123.45.67.89
3.6.2
针对极重要的服务器可考虑采用SSH证书登录验证,具体配置方式可参考相关资料
3.7其它
缺省账号是攻击者入侵的常用入口
l清除不必要的系统帐户
[root@deep]#userdel lp
[root@deep]# userdel sync
[root@deep]# userdel shutdown
[root@deep]# userdel halt
[root@deep]# userdel news
[root@deep]# userdel uucp
[root@deep]# userdel operator
[root@deep]# userdel games(如果不使用 X Window,则删除)
[root@deep]# userdel gopher
[root@deep]# userdel ftp(如果不使用ftp服务则删除)
bin/daemon/adm/nobody帐号不要删除
l禁止在passwd文件中包含个人信息,防止被finger之类程序泄露。
l修改shadow,passwd,gshadow文件不可改变位
[root@deep]# chattr +i /etc/passwd
[root@deep]# chattr +i /etc/shadow
[root@deep]# chattr +i /etc/group
[root@deep]# chattr +i /etc/gshadow
4网络服务安全
遵循以下两个基本原则:
l只对外开放所需要的服务,关闭所有不需要的服务。对外提供的服务越少,所面临的外部威胁越小。
l将所需的不同服务分布在不同的主机上,这样不仅提高系统的性能,同时便于配置和管理,减小系统的安全风险。
在上述两个基本原则下,还要进一步检查系统服务的功能和安全漏洞。
4.1服务过滤Filtering
l在SERVER上禁止这些服务
l如果一定要开放这些服务,通过防火墙、路由指定信任IP访问。
l要确保只有真正需要的服务才被允许外部访问,并合法地通过用户的路由器过滤检查。尤其在下面的服务不是用户真正需要时候,要从路由器上将其过滤掉
NAMEPORTPROTOCOL
echo7TCP/UDP
systat11TCP
netstat15TCP
bootp67UDP
tftp69UDP
link87TCP
supdup95TCP
sunrpc111TCP/UDP
news144TCP
snmp161UDP
xdmcp177UDP
exec512TCP
login513TCP
shell514TCP
printer515TCP
biff512UDP
who513UDP
syslog514UDP
uucp540TCP
route520UDP
openwin2000TCP
nfs2049UDP/TCP
x116000 to 6000+nTCP
注意:有些UDP服务可以导致DOS攻击和远程溢出,如
rpc.ypupdated
rpcbind
rpc.cmsd100068
rpc.statd100024
rpc.ttdbserver100083
sadmind 100232/10
l配置完成以后,利用网络扫描器模拟入侵者从外部进行扫描测试。如利用nmap
l使用ssh来代替telnetd,ftpd.pop等通用服务。传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据。
4.2/etc/inetd.conf
l确保文件权限设置为600
l确保文件属主设置为root
l注释掉所有不需要的服务,需要重新启动inetd进程
l使用netstat –an命令,查看本机所提供的服务。确保已经停掉不需要的服务
4.3R服务
不必使用R服务
l关闭R服务,Red hat 6.2在/etc/inetd.conf文件中注释以下服务,并且重新启动inetd服务。Red hat 7.0在/etc/xinetd.d目录中删除
exec512TCP
Rlogin 513 TCP
Rshell 514 TCP
l预先生成$HOME/.rhosts,/etc/hosts.equiv文件,并且设置为0000,防止被写入”+ +”。(攻击者经常使用类似符号链接或者利用ROOTSHELL写入,并且远程打开受保护主机的R服务)
必须使用R服务
l使用更安全版本的r服务。如WietseVenema的logdaemon程序等。
l在路由或者防火墙上禁止外部网络访问受保护主机的512,513 and 514 (TCP)端口。
l使用TCP WRAPPERS设置可访问受保护主机R服务的信任机器。
4.4Tcp_wrapper
该软件的作用是在Unix平台上过滤TCP/UDP服务,它目前已被广泛用于监视并过滤发生在主机上的ftp、telnet、rsh、rlogin、tftp、finger等标准TCP/UDP服务。
当系统安装TCP_wrapper之后,in.conf文件中 /usr/sbin/in.telnetd的in.telnetd会被TCP_wrapper附带的tcpd程序取代。该程序截获来自客户端的服务请求、记录请求发生的时间和IP地址,并按访问控制进行检查。当本次连接的用户、请求源的IP等信息符合管理员的预设值时,才将该次请求传递给系统in.telnetd,由系统in.telnetd完成后续工作;若连接不符合要求,该连接请求将被拒绝。同样,ftp、 rsh等TCP/UDP服务均可被tcpd取代,由tcpd充当二传手。
l使用PARANOID模式,用此参数后需要在/etc/hosts文件中加上允许使用telnet或ftp服务的客户端的名字和IP地址
l在/etc/hosts.deny中设置为all:all,默认所有不允许
Access is denied by default.
# Deny access to everyone.
ALL: ALL@ALL, PARANOID#Matches any host whose name does notmatch its address, see
bellow.
l在/etc/hosts.allow中设置允许的服务和地址
如:sshd: 208.164.186.1 gate.openarch.com
l使用tcpdchk检查
lUDP服务使用tcpwrapper时要使用/etc/inetd.conf中的nowait选项。
4.5/etc/hosts.equiv文件
不必使用/etc/hosts.equiv文件
l从系统中删除此文件
l预先生成/etc/hosts.equiv文件,并且设置为0000,防止被写入”+ +”。(攻击者经常使用类似符号链接或者利用ROOTSHELL写入,并且远程打开受保护主机的R服务)
必须使用/etc/hosts.equiv文件
l确保此文件中可信赖主机为必须的。
l预先生成/etc/hosts.equiv文件,并且设置为0000,防止被写入”+ +”。(攻击者经常使用类似符号链接或者利用ROOTSHELL写入,并且远程打开受保护主机的R服务)
l如果使用NIS或者NIS+的话,此文件中的组应该是容易管理的。
l信赖主机必须确保可靠
l信赖主机使用全名,如例如 hostname.domainname.cn
l任何时候都不应该出现”+”字符,因为这样会使任何一台主机上的任何用户都可以不加口令地访问系统
l文件中不要使用’!’和’#’符号,因为在该文件中那并不表示注释信息
l文件开始字符不应该为’-‘.,请查阅C8
l确保该文件的访问权限被设置成600。
l文件属主确保为ROOT。
l在每次安装补丁程序或操作系统之后,都应该重新检查该文件夹的设置情况
4.6 /etc/services
l确保文件权限设置为600
l确保文件属主设置为root
l如果需要提供一些常见服务,如telnetd等,可以在此修改端口
此文件为端口号和服务的对应关系,给此文件加上保护,避免没有授权的修改和删除
[root@deep]# chattr +i/etc/services
4.7/etc/aliases
l修改/etc/aliases文件,注释掉"decode" "games,ingress,system,toor,manager,….”.等
l使用/usr/bin/newaliases命令激活新配置
l确保文件权限设置为755
l确保文件属主设置为root
4.8 NFS
NFS文件系统应注意以下几方面的安全
l在外部路由上过滤端口111、2049(TCP/UDP),不允许外部访问。
l检查PATCH更新情况。
l检查 /etc/exports 输出路径的权限,确定只有root能修改,all user只能read
l用exportfs去增加或删除directories
exportfs -o access=engineering,ro=dancer /usr
exportfs -u /usr
l假如你的机器没有NIS(YP server)的服务,当更改资料时记得修改
/etc/passwd/etc/group/etc/hosts/etc/ethers
l不允许export出去包含本地入口的目录
l确定对方机器是完全可信赖的。使用全名
l确保输出列表没有超过256个字符。
l使用showmount –e命令查看自己的export设置
l将/etc/exports权限设置为644,属主为root
l使用noexec,nodev.nosuid等选项控制mount的文件系统,在/etc/fstab中设置。
4.9Trivial ftp (tftp)
无论何种情况下都不应该启动这个服务进程。
4.10卸载Sendmail4.11屏蔽finger命令4.12World Wide Web (WWW) – httpd
l使用你选择的WEBSERVER的最新版本
l不要使用ROOT用户运行httpd
l在chroot环境中运行httpd
l尽量不要使用CGI脚本
l对CGI脚本进行安全审计
l链接使用静态库
l过滤危险字符,如\n \r (.,/;~!)>|^&$`< 等
l使用https进行关键业务传送。
4.13FTP安全问题
使用最新的FTP软件
配置Configuration
l检查所有的默认配置选项
l确定没有SITE EXEC问题
l设置/etc/ftpusers确定禁止使用ftp的用户
l使用chroot环境运行ftpd
l使用自己的ls等命令
l加入对quota,pam等支持
l配置/etc/ftpaccess文件,禁止系统信息泄露和设置最大连接数
l配置/etc/ftphosts,设置允许使用FTP的HOST和USER
l针对不同用户设置不同权限
l经常查看LOG记录 /var/log/xferlog
l配置文件属性改为600
Anonymous ftp
l编译时打开允许匿名选项
l如果使用分布式passwords (e.g., NIS, NIS+),需要设置好密码文件。
l匿名用户只给读权限(在/etc/ftpaccess中设置)
4.16禁止缺省路由
在服务器中,应该严格禁止设置缺省路由,即default route
5系统设置安全5.1限制控制台的使用
禁止使用控制台程序:删除/etc/security/console.apps中的服务
[root@deep]# rm -f/etc/security/console.apps/servicename,
比如:[root@deep]# rm -f/etc/security/console.apps/halt
[root@deep]# rm-f /etc/security/console.apps/poweroff
[root@deep]# rm-f /etc/security/console.apps/reboot
[root@deep]# rm-f /etc/security/console.apps/shutdown
[root@deep]# rm -f/etc/security/console.apps/xserver(如删除,只有root能启动Xserver)
禁止控制台的访问:在/etc/pam.d中的所有文件中,给包含pam_console.so的行加上注释
5.2系统关闭Ping
5.2.1
关闭ping,使系统对ping不做反应,对网络安全大有好处。
可以使用如下命令:
[root@deep]#echo1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
可以将这一行加到/etc/rc.d/rc.local文件中去,这样系统重启动后会自动执行
恢复系统的Ping响应:
[root@deep]#echo0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
5.2.2
避免被扫描到,除了必要的端口,例如 Web、
FTP、SSH等,其他的都应关闭。关闭 icmp 端口,并设置规则,丢弃icmp包。
丢弃 icmp包可在 iptables中, 加入下面这样一条:
-A INPUT -p icmp -j DROP
5.3关闭或更改系统信息
关闭telnet系统信息
Red Hat 6.2中,编辑/etc/inetd.conf
telnet stream tcp nowait root/usr/sbin/tcpd in.telnetd –h
加上参数-h可以关闭telnet信息
Red Hat 7.0中,编辑/etc/xinetd.d/telnet
加上server_args= -h,可以关闭telnet信息
/etc/rc.d/rc.local中关闭或修改系统信息
/etc/issue和/etc/issue.net中包含本地登录和网络登录时提示的系统信息,对它们进行更改可以改变系统信息,或直接删除,并在/etc/rc.d/rc.local文件中注释相关行:
#echo "" > /etc/issue
#echo "$R" >> /etc/issue
#echo "Kernel $(uname -r) on $a$(uname -m)" >> /etc/issue
#cp -f /etc/issue /etc/issue.net
#echo >>/etc/issue
5.4/etc/securetty文件
/etc/securetty文件规定root从哪个TTY设备登录,列出的是允许的tty设备,将不允许的tty设备行注释掉.
5.5 /etc/host.conf文件
/etc/host.conf定义主机名怎样解析,使用什么服务,什么顺序解析
# Lookup names via DNSfirst then fall back to /etc/hosts.
order bind,hosts
# We have machines withmultiple IP addresses.
multi on
# Check for IP addressspoofing.
nospoof on
order指定选择服务的顺序
multi指定主机能不能有多个IP地址,ON代表允许
nospoof指定不允许IP伪装,此参数必须设置为ON
5.6禁止IP源路径路由
允许IP源路径路由(IP source routing)会使得黑客能够欺骗你的计算机,截取信息包.强烈建议禁止,使用如下命令:
for f in/proc/sys/net/ipv4/conf/*/accept_source_route; do
echo 0 > $f
done
将accept_source_route设置为0,并将上述命令加到/etc/rc.d/rc.local中去,每次重启动将自动执行
5.7资源限制
为了避免拒绝服务攻击,需要对系统资源的使用做一些限制。
首先,编辑/etc/security/limits.conf,加入或改变如下
* hard core 0(禁止创建core文件)
* hard rss 5000(除root外,其他用户最多使用5M内存)
* hard nproc 20(最多进程数限制为20)
编辑/etc/pam.d/login,在文件末尾加上:
session required /lib/security/pam_limits.so
对TCP SYN Cookie的保护:(防止SYN Flood攻击)
[root@deep]# echo 1 > /proc/sys/net/ipv4/tcp_syncookies
5.8 LILO安全
在“/etc/lilo.conf”文件中添加3个参数:time-out、restricted和 password。这些选项会在启动时间(如“linux single”
步骤1
编辑lilo.conf文件(/etc/lilo.conf),添加和更改这三个选项:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
time-out=00 #change this line to 00
prompt
Default=linux
restricted #add this line
password= #add this line and put yourpassword
image=/boot/vmlinuz-2.2.14-12
label=linux
initrd=/boot/initrd-2.2.14-12.img
root=/dev/hda6
read-only
步骤2
由于其中的密码未加密,“/etc/lilo.conf”文件只对根用户为可读。
[root@kapil /]# chmod 600 /etc/lilo.conf(不再为全局可读)
步骤3
作了上述修改后,更新配置文件“/etc/lilo.conf”。
[Root@kapil /]# /sbin/lilo -v(更新lilo.conf文件)
步骤4
还有一个方法使“/etc/lilo.conf”更安全,那就是用chattr命令将其设为不可:
[root@kapil /]# chattr +i /etc/lilo.conf
它将阻止任何对“lilo.conf”文件的更改,无论是否故意。
5.9禁止Control-Alt-Delete键盘关机命令
编辑“/etc/inittab”文件,只要在下面行前面加“#”,改为注释行。
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
改为:
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
然后,为使更改生效,在提示符下输入:
[root@kapil /]# /sbin/init q
5.10日志系统安全
为了保证日志系统的完整性,防止黑客删除日志,需要对日志系统进行安全配置。本专题将有专门文档来讲述日志系统的安全。
5.11修正脚本文件在“/etc/rc.d/init.d”目录下的权限
对脚本文件的权限进行修正,脚本文件用以决定启动时需要运行的所有正常过程的开启和停止。添加:[root@kapil/]# chmod -R 700 /etc/rc.d/init.d/*
这句指的是,只有根用户允许在该目录下使用 Read、Write,和 Execute 脚本文件。
5.12/etc/passwd和/etc/shadow文件
确保这两个文件只有管理员(即root)可以访问到,下载npasswd工具对/etc/shadows进行穷尽攻击,确保为帐号设置的密码是安全不易被破解的
5.13禁止一般用户访问/var/log使用chmod修改其权限为只有root才可以访问5.13缓冲区溢出漏洞的防范
攻击方式:攻击root程序,然后利用缓冲区溢出发生的内存错误来执行类似exec(sh)的代码,从而获得root的一个shell
防范措施:
l安装操作系统时候将记录日志的目录/var、/home单独分出来,禁止以root记录日志、邮件信息,这样可以避免大量的拒绝服务,导致产生大量的日志,避免分区溢出的漏洞攻击
l禁止Ping服务,5.2已经介绍方法
lchattr +i /etc/services 将此文件定义为不可修改,提高此文件的安全性
l禁止远程登录用户看到系统的提示信息,方法是改变/etc/inetd.conf中telnet设置,在telnetstreamtcp nowait root /usr/sbin/tcpd in.telnetd –h末尾加-h参数
l屏蔽登录服务器的提示内核、操作系统版本信息
l禁止finger服务,删除或改名、或修改finger命令只可以root执行,具体视情况而定
l修改/etc/rc.d/init.d下文件的访问权限,设置只有root有权限
chmod –R 700/etc/rc.d/init.d/*
5.13 root密码破解的防范
安装DenyHosts-2.6.tar.gz,DenyHosts会分析sshd的日志文件(/var/log/secure),当发现重复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能,可在配置文件中设置邮件提醒
6文件系统安全6.1文件权限
l去掉不必要的suid程序,可以通过脚本查看
[root@deep]# find / -type f \( -perm -04000 -o -perm -02000 \)\-exec ls –lg {}\;
通过下面的命令来去掉不需要的程序的‘s’位
[root@deep]# chmod a-s/usr/bin/commandname
l重要的配置文件如/etc/passwd,/etc/shadow,/etc/inetd.conf等设置为0755,并设置为不可更改
l/etc, /usr/etc, /bin, /usr/bin,/sbin, /usr/sbin, /tmp and/var/tmp的属主是root,并且设置粘滞。
l/dev目录下没有特殊文件。
l查找任何人可写的文件和目录
[root@deep]# find / -type f \( -perm -2 -o -perm -20 \) -exec ls -lg{} \;
[root@deep]# find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ldg{} \;
l查找异常文件,如..文件,…文件等
find / -name".. " -print –xdev
find / -name".*" -print -xdev | cat -v
l检查没有属主的文件。
Find / -nouser–o –nogroup
l检查在/dev目录以外还有没有特殊的块文件
find / \( -typeb -o -type c \) -print | grep -v ‘^/dev/’
l使用checksummd5 或者PGP来效验文件
6.2控制mount上的文件系统
可以使用noexec, nodev, nosuid来控制mount上的文件系统.在/etc/fstab中设置,比如:
将/dev/sda11 /tmp ext2 defaults 1 2
/dev/sda6 /home ext2 defaults 1 2
改为:/dev/sda11 /tmp ext2nosuid,nodev,noexec 1 2
/dev/sda6 /home ext2 nosuid,nodev 1 2
noexec表示不允许可执行,nodev表示不允许块设备,nosuid表示不允许suid位
6.3备份与恢复
对以下内容进行本地和远程备份
SVN代码库备份
数据库备份(Mysql)
应用服务器(Tomcat等)
Web服务器(Nginx)
确保服务器硬件意外损坏后,能即时进行恢复
7其它7.1使用防火墙
防火墙要正常开启,通过iptables开放必须的Web服务端口,比如常用的8080/443/25等
7.2使用sudo
安装第三方软件建立相应的用户和组,启动的时候在对应的用户下启动,如需要root权限,使用sudo启动
人生才会更有意义。如果没有梦想,那就托做庸人。