linux系统维护:Linux系统维护人员的必备参考书

  我评价:
  本书讲述了linux安全方方面面并且以方式介绍思路清晰文中提供了很
  多有益安全提示是Linux系统维护人员必备参考书通过本书你能了解到linux安
  全整体概念从系统安全到应用安全从单机安全到网络安全但安全问题是个不断变
  化不断更新过程而不是个解决方案所以本书只是提到当时为人所发现安全问题
  绍新出现安全问题可参考该书网站WebSite更新和网上安全警告
  第章    linux安全问题概述
  粘着位(Sticky bit)
  如果用户对目录有写权限则可以删除其中文件和子目录即使该用户不是这些文件
  有者而且也没有读或写许可粘着位出现执行许可位置上用t表示设置了该位后
  其它用户就不以删除不属于他文件和目录但是该目录下目录不继承该权限要再设置
  才可使用
  # chmod 1770 xxx
  文件属性
  chattr命令修改
  lsattr命令列出文件属性
  文件属性定义
  A    不要更新atime文件当在笔记本电脑或NFS上限制磁盘I/0流量时很有用除2.0
  系列外属性不被其它内核支持
  a    文件仅能以追加方式打开只有root才能设置这个属性
  c    文件保存在磁盘时内核将自动压缩该文件
  d    文件标记使其不能被转储
  i     文件不能被修改删除或重命名不能创建任何指向它链接并不能写入任何数据
  s    删除文件时相应磁盘存储块清零
  S    修改文件时对其写入进行同步
  u    删除文件时保存其内容
  Ulimit命令
  设置限制     可以把命令加到profile文件里也可以在/etc/security/limits.conf文件中定义
  限制
  命令参数
  -a      显示所有限制
  -c      core文件大小上限
  -d      进程数据段大小上限
  -f      shell所能创建文件大小上限
  -m     驻留内存大小上限
  -s      堆栈大小上限
  -t      每秒可占用CPU时间上限
  -p     管道大小
  -n     打开文件数上限
  -u     进程数上限
  -v     虚拟内存上限
  除可用Ulimit命令设置外也可以在/etc/security/limits.conf文件中定义限制
  domino    type    item    value
  domino是以符号@开头用户名或组名*表示所有用户type设置为hard or softitem指
  定想限制资源如cpu,core nproc or maxlogins
  value是相应限制值
  信号
  # kill -TERM XXXX       终止信号
  # kill -HUP HTTPD       重读配置信号
  特权端口
  root用户是可绑定端口小于1024用户可以信任来自于远程机器端口小于1024
  接
  第 2章 预防措施和从入侵中恢复
  系统安全
  简单FIND命令
  # find / \(-perm -02000 -o -perm -4000 \) -ls   可以找出系统中所有userid and groupid
  
  在最严格情况下可以去掉除/bin/su外所有已安装Xid位
  系统安全扫描工具   cops   tiger   Nabou
  扫描检测器
  黑客入侵系统前所做件事就是从网络上扫描系统扫描检测器能及时获知个良
  好入侵检测系统(IDS)
  Klaxon   Courtney   Scanlogd    PortSentry
  加固系统
  Bastille项目创建了组模块来加固新近发布REDHAT在安装完系统后可运行该补丁
  在什么时候都可运行不必要定是刚安装完系统
  加固思路方法是:1、下载源代码到/root目录并解包以root身份动行InteractiveBastille.pl脚
  本在回答完问题后将做出相应改动配置完成后该工具把其保存在BackEnd.pl
  中如果希望加固同样配置服务器将它复制到新服务器并运行AutomatedBastille.pl即可
  Openwall Linux补丁
  它是个内核补丁要这些补丁起作用用户必须重新编译和安装新打上补丁内核
  某些情况下这些内核补丁和标准linux不完全兼容因此在决定使用前必须确信理解其含
  义
  LIDS
  它包括内核级端口扫描检测和安全警告是内核补丁(现在适用于2.2.X和2.4.X
  但以后将不再支持2.2)和系统管理工具其特性包括:
  1、高级文件保护甚至root也不能发现和处置受LIDS保护文件
  2、进程保护内核拒绝向受保护进程发送信号(例如SIGKILL)进程也可以被完全隐
  藏起来在/proc下不会存在任何痕迹
  3、更好访问控制更有效地使用和特权相关权能包括禁止root更改这些权能
  4、内置式端口扫描检测内置于内核扫描能够检测到NmapSATAN等工具绝大
  部分扫描
  要安装LIDS,必须下载最新linux内核正式版和LIDS源代码使用LIDS给内核打上补丁
  然后重新编译内核
  日志文件分析
  syslogd消信可标记为特定功能和级别在/etc/syslog.conf文件中可以根据这两个选项来设
  置消信去向
  syslogd功能                 描述
  auth            安全性/验证消息(负面)
  authpriv        安全性/验证消息
  cron            cron and at
  daemon            其它系统守护进程(sshd,xinetd,pppd等)
  kern            内核消息
  lpr            行打印系统
  mail            邮件子系统(sendmail,postfix,qmail等)
  s            Usenet新闻消息
  syslog            内部syslog消息
  user            般用户级消息
  uucp            UUCP子系统
  local0-local7        自定义级别
  日志级别           描述
  emerg            系统已不可用
  alert            必须马上采取行动
  crit            危急
  err           
  warning            警告
  notice            普通但重要情形
  info            通知消息
  debug            调试消息
  syslog.conf每配置格式为
  facility.loglevel     logtarget,所有字段用tab隔开
  例子:
  daemon.notice    /var/log/daemon.log    把发送过来功能为daemon优先级为notice
  或更高级别所有日志消息记录到/var/log/daemon.log文件中可以使用*号表示匹配所有功
  能或日志级别
  目标                   描述
  /path/to/filename    将消息附加到所指定文件文件尾这是最常用情形
  @loghost        写到loghost机器上syslog服务器可方便把日志发来多台机器上
  |/path/to/named_pipe    写到指定命名管道(便于用外部过滤消息)
  user1,user2        写到所列用户
  *            写到所有登录用户
  /dev/console        写到已命名终端
  日志文件许可
  应设置日志只为root所有和写入同时能够被log组(或你所希望组)读取而其他用户
  没有任何权限个用户在输入用户名地方使用了口令在登录失败时将会把用户名(在
  此例中为口令用户失误)记录到日志中然后创建个属于log组虚构用户并让
  所有日志检查以该用户而不是root运行日志检查不应当以root用户运行
  可以通过日志分析软件Software开监控日志如logcheck,swatch和logsurfer但最好工具还是管理
  员自已写脚本
  文件系统完整性检查
  修改文件系统是黑客在侵入系统的后经常要做件事情下面列出了经常被修改些文
  件:
  类型            例子
  服务器配置文件        /etc/inetd.conf,/etc/ftpaccess
  网络配置文件        /etc/host.conf,/etc/sysconfig/network
  系统配置文件        /etc/ld.so.conf,/etc/nsswitch.conf
  crontab            /etc/cron.daily/*,/var/spool/cron/root
  userid        /bin/su,/bin/ping,usr/bin/chfn,/sbin/dump
  groupid        /sbin/netreport,/usr/bin/lpr,/usr/bin/write,/usr/bin/man
  如果知道机器何时被入侵就可以判断修改时并了解哪些东西被修改了例如想知道在9
  月17日发生侵入事件中被修改所有文件可以执行如下命令:
  # touch 09170000 /tmp/comparison
  # find / \( -er /tmp/comparison -o -cer /tmp/comparison \) -ls
  但记住检查文件时间所给出统计结果是不可靠touch命令可以更改任何文件修改
  时间(mtime)和访问时间(atime).
  校验和
  校验和是个使用数学算法生成可以用来判断两个文件是否相同即使在个文
  件中只改动了它们校验和也会区别通常
  用md5sum命令
  # md5sum  xxx
  文件许可
  通过检查文件许可用户可以知道修改发生时间并判断其行为是合法意外还是恶意
  同时确定其对系统影响
  生成校验和和许可数据库
  在黑客入侵系统前生成文件校验和下面是个快捷perl脚本能够使用户生成自已
  文件许可和校验和数据库(文本)
  #!/usr/bin/perl
  use MD5;
  require 'find.pl';
  $md5 = MD5;
  @dirs = @ARGV;
  for $dir ( @dirs ) { find($dir);}
  sub wanted { push @files,$name;}
  for $name ( sort @files ) {
  ($uid,$gid) = (stat $name)[4,5];
  $stat = sprf "%0o",(stat _)[2];
  unless ( -f $name ) {
  prf "$stat\t$uid $gid\t\t\t\t\t\t$name\n";
  next;
  }
  $md5->re;
  open FILE,$name or pr(STDERR "Can't open file $name\n"),next;
  $md5->addfile(FILE);
  close FILE;
  $checksum = $md5->hexdigest;
  prf "$stat\t$uid $gid $checksum\t$name\n";
  }
  生成数据库尽量不要放在本机上要放在其它机器上或次写多次读(CDR)机器上
  现有文件完整性工具 Tripwire  AIDE Nabou
  如何知道系统何时被黑
  发现系统被入侵思路方法:
  1、主页变化
  2、磁盘空间急剧减少        用df工具查看磁盘使用情况
  3、频繁地使用网络            使用netstat -na 或lsof输出检查存在什么连接
  4、来自其它管理员联系        当你机器被用于攻击其它机器时
  5、混杂模式网络接口        如果黑客想嗅探系统中可用网络服务会把网络接口设置
  为混杂模式(捕获所有包)请检查                config -a输出promisc以确定接
  口模式
  6、抹去/截断日志文件        检查syslog
  7、被破坏utmp/wtmp
  8、系统中存在新用户        黑客通常使用和现存用户名相近名称以减少被发现
  机会例如和lp近似lpr或uucp1等或者
  黑客方言中名字如t00r and own3d.
  9、正在运行陌生
  10、不能解释CPU使用情况
  11、本地用户远程帐号被破解
  12、“看起来古怪”事情
  被入侵后应采取措施
  制止损害
  1、    关闭所有网络接口使黑客对系统丧失了交互行为能力但那些正在运行进程仍然
  2、    会继续运行
  3、    将系统切换到单用户模式关闭所有正式root进程和所有用户进程任何剩下进程
  4、    可能就来自于黑客
  3、使用未被损害linux启动盘重启系统以只读模式加载系统检查系统以查看黑客
  所动手脚
  4、进行严重损害控制
  破坏估计
  以只读模式挂上所有分区并记录所发现任何事情
  1、找到可疑文件和目录        口令文件黑客工具和任何你没有放置在系统中目录
  些目录在你重启前可能是不可见
  2、定位新userid    任何新Xid(尤其是属于root)都极有可疑
  3、检查时间戳            检查黑客入侵的后发生变化文件
  4、阅读日志文件            检查所有日志文件
  5、验证校验和            比较黑客入侵前后校验和数据库
  6、验证所安装软件Software包        确认正确版本黑客可以把软件Software降级以让系统使用不安
  全版本
  7、手工验证配置文件        快速浏览以确定变化如web以root用户运行或在
  /etc/inetd.conf中出现了额外服务器
  8、备份文件
  9、特殊工具            有很多工具可以帮助检查系统最新是组件是coroners toolkit
  10、通知权威机构
  在线恢复
  在确定了黑客行为后有两个选择1、堵上漏洞并对系统被篡改部份启用备份;2、重新安
  装系统最安全思路方法是完全重新安装系统
  仅仅堵上发现漏洞并继续运行通常要快得多但是你可能并不能确定黑客在系统中所做
  所有事情黑客可留下在几个月后才发作时间炸弹也可能修改了系统 2进制代码使
  其运行不稳定因此我们建议把黑客从系统中清除出去最好思路方法如下:
  1、对重要文件进行备份
  2、完全格式化所有驱动器(这也是对系统进行任何改变最佳时间例如添加硬盘或改变
  分区大小要充分利用停工期有利条件)
  3、从头安装linux版本并且只包含那此必需东西
  4、对已安装软件Software包进行完全升级
  5、生成校验和并将的保存在安全地方
  6、对配置文件进行必要手工修改不要仅仅从备份中复制这些文件它们可能已经被改
  变
  7、从备份中复制必要文件
  8、重新检查从备份中安装文件确认其没有被破坏迹像
  9、使用另种思路方法计算文件系统校验和
  10、第次启用网络
  对于实际或觉察到攻击常用对策是取消发动攻击机器和本机通信能力具体做法
  有如下几种:
  1、使用tcp封装器拒绝来自黑客ip连接
  2、使用iptables规则退回/拒绝来自该ip地址
  3、创建拒绝路由表以使本机不能和相应ip地址通信此时仍然可以收到来自源地址
  包但不能响应从而破坏相互间通信
  4、在防火墙上创建类似拒绝访问列表
  第 3章 对机器和网络踩点
  在线搜索
  新闻组/邮件列表搜索
  ernet上有很多新闻组/邮件列表或论坛是向知识渊博人请教问题好地方但也可能
  在完全无意识下泄露了系统信息比如公司网络拓扑结构安全配置情况电话号码
  理员名字个人信息等
  对策:
  对所发贴子要再 3审读删除任何有可能被黑客利用信息或使用和系统不相关帐号发
  送邮件比如申请免费邮箱
  whois数据库
  ping扫射
  ping扫射是指ping指定网络中所有ip如果机器正在监听ip地址就会回应ping从而
  就知道它处于活动状态有黑客通过这种思路方法列出所有正在运行机器然后决定攻击目标
  有两种区别ping主机思路方法:ICMP ping and echo ping可以用些工具加速ping其中两
  个最有意义:Fping and Nmap
  ICMP ping思路方法:源机器向目机器发送icmp echo request.如果目标机器正在运行则会响
  应icmp echo reply
  # ping -c 3 target
  echo ping思路方法:以udp or tcp包连接到目标机器回显端口(端口7)如果机器在运行状态
  该端口直接回显发送过来信息
  # telnet target.example.com echo
  Fping是个直接了当ping工具可以在命令行列出需要ping机器也可以用文件方
  式
  # Fping -a < machinelist
  如果要扫描整个网络(192.168.10.X)必须提供IP列表在命令行用perl语句可以容量实
  现
  # perl -e 'for (1..254) {pr "192.168.10.$_\n"}' |fping -a -q 2>/dev/null
  Nmap是种多用途扫描工具内置了ping扫描功能
  # nmap -sP 192.168.10.0/24
  ping扫射对策
  通过配置机器(iptables等)来拒绝进入echo request包和出去echo reply包从而避免
  响应icmp echo request关闭本机回显服务在/etc/inetd.conf中注释掉以下两行
  echo stream tcp nowait root ernal
  echo dgram udp wait root ernal
  再重启inetd
  dns问题
  在linux上最好dns服务器是bind,它有几个版本如果你是先锋派bind9.x是最佳选择
  4.x是最稳定版本8.x则是个不错过滤大部分站点都是用这个版本请保持bind
  版本是最新最为它安全漏洞较多而且旦发现漏洞就会很被黑客利用
  尽量不要在配置文件中包含hinfo and txt信息
  区域传送
  般情况下为了保证dns总是可以每个域中都有个主dns机器而其它都是次级dns
  每当dns区域发生变化时次级dns机器就从主机器复制全部内容系统成为次级dns
  法是在named.conf中添加如下内容:
  zone "expample.com" {
  type slave;
  file "slave/expample.com";
  masters {xxx.xxx.xxx.xxx};
  };
  但是黑客也可以攫取区域文件(如果没有采取措施),下例给出使用host命令列出整个域中
  所有NS,A和PTR记录思路方法
  # host -t ns example.com
  # host -l example.com
  对策:
  配置主名字服务器时使的不允许除次级服务器外机器区域传送在全局默认选项中设置
  如下:
  option {
  ....
  allow-transfer {xxx.xxx.xxx.xxx};
  ...
  }
  警告:必须确保在主和从服务器上都禁止区域传送从服务器也能接受区域传送请求
  任何未经授权区域传送都会被syslog记录下来
  反解析是指从ip到域名过程可以用host命令实现如果大量使用真实主机名会给
  黑客知道机器功能所以最好在PTR记录中使用反解析名如:
  xxx-xxx-xxx-xxx.example.com.
  端口扫描
  黑客会运行个或多个端口扫描工具来了解目标系统提供服务工具主要有
  netcat,strobe,nmap(best)玩转nmap可以学到很多东西包括自已系统也包括网络方面
  网络漏洞扫描
  iss,satan,Nessus
  加密文件系统
  CFS,TCFS,BestCrypt,PPDD,Encrypted
  第 4章 社交工程、特洛伊木马和其他黑客伎俩
  第 5章 物理攻击
  物理攻击小结
  1、不要把口令或访问ID记在别人可以看到地方
  2、不要把电话本组织结构图备忘录内部手册会议安排或内部安全策略遗忘在容量
  被阅读或偷窃地方
  3、在丢弃打印文档电子介质或客户数据时必须谨慎从事把敏感材料标记为“敏感”
  处理前粉碎敏感文件和手册抹去电子介质中数据并且把所有垃圾箱放置在照明状
  况良好保护区域
  4、在标记网络设施时必须谨慎将这些信息记录在清楚网络图中并将其锁起来
  5、    使用好屏幕保护确保带有口令并且在运行时隐藏屏幕内容将延迟时间设置
  6、    为合理值---在合理时间后就运行它
  6、必须离开系统时锁定屏幕
  7、    使用便携机时必须尽可能在所有时间都将其带在身边对窃贼那些把它从你身过分
  8、    开诡计保持警惕对进入工作场所每个便携机贴上标签在带离时对其进行安全检查
  8、避免使用双重启动系统linux安全性取决于机器中安装安全性最差系统
  9、在启动加载时中设置保护口令防止可能获得root权限非法重启方式
  10、设置BIOS口令以防止其被修改
  11将所有敏感系统放在加锁房间以防止破坏
  12、使用好加密文件系统可以防止那些获得系统权限人看到机密数据这应当作为安全防卫底线
  第 6章 网络攻击
  合法tcp标志组合
  标志组合    含义
  SYN        这是tcp连接个数据包表示希望和目标系统建立连接
  SYN|ACK        目标系统通过确认原始消息和发送SYN信息来响应SYN数据包
  ACK        在连接建立期间个数据包都要设置其ACK位以确认前面收到数据
  包
  FIN        在连接准备关闭时发送FIN给对方
  FIN|ACK        这组合用于确认第个FIN包并完成关闭步骤
  RST        当系统接收到不期望数据包时发送RST包重置连接---例如系统在未发出SYN
  情况下收到SYN|ACK
  ICMP类型代码
  类型代码    ICMP消息
  0        回波响应(响应PING)
  3        目地址不可到达
  4        源终结
  5        重定向
  8        回波(PING请求)
  11        TTL超时
  12        参数问题
  13        请求时间戳
  14        响应时间戳
  17        地址掩码请求
  18        地址掩码响应
  攻击配置NFS导出
  为了保护文件系统不被非法访问应当让防火墙阻塞NFS通过阻止对NFS(2049端口)
  进入连接可以做到这如果内部确实需要确保它只导出必需文件系统例如
  允许远程加载用户主目录时使用/home 替代/为了验证是否正确配置了NFS检查
  /etc/exports和/etc/dfs/dfstab以确信没有以读写权限向外导出任何东西
  攻击Nestscape默认配置
  SuiteSpot是个工具用于管理web服务器其中包含实现这功能java and javascript code.
  它将Nestscape服务器用户名和口令配置保存在服务根目录下文件中默认可被任何人
  读取位于/web_server root/admin-serv/config/admpw在网络上使用web浏览器并将url指
  向该文件就可获得文件格式为user:password虽然这个文件是加密但可以对口令进
  行蛮力攻击所以应保护admpw文件
  攻击配置Squid服务器
  Squid可以被地配置成允许外部地址作为访问内部系统代理这使攻击者能够以该服
  务器为代理来察看或访问内部网络即使其地址不能被路由squid.conf文件
  置如下:
  tcp_incoming_address <squid system external address>
  tcp_outgoing_address <squid system ernal address>
  udp_incoming_address <squid system external address>
  udp_outgoing_address <squid system ernal address>
  对策:
  首先设置正确防火墙规则以阻塞外部地址对端口3128(代理端口)连接然后编辑配
  置文件确信下面这些内容正确性
  tcp_incoming_address <squid system ernal address>
  tcp_outgoing_address <squid system external address>
  udp_incoming_address <squid system ernal address>
  udp_outgoing_address <squid system external address>
  x windows system
  它使用端口6000---6063
  攻击X 配置xhost工具用于保障X基本安全性用户可以使用这指定允
  许连接本地X服务器系统如果不带参数执行则列出所有允许连接系统可以通过
  如下命令添加新和系统
  # xhost + <system name>
  如果省略system and name则任何系统都可以建立连接这样入侵者可以通过xkey
  录用户在X窗口介面上所有击键序列个类似是xscan可以扫描网络以查找X
  系统漏洞
  对策:
  主要是在防火墙上阻塞端口6000--6063
  # ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 6000:-6063
  如果不允许阻塞可以-auth参数启动xinit则系统将在认证时使用“magic cookies”
  或者以ssh传送X会话使用X11ssh时远程root用户对本地X服务器拥有全部权限
  在双方信任时才使用X11ssh
  默认口令
  Prianha
  red hat提供用于linux 服务器Prianha虚拟服务器和平衡软件Software包在Prianha-gui
  0.4.12版中存在个名为prianha帐号其默认口令为q
  对策是修改所有系统和网络设备默认口令
  嗅探网络信息
  嗅探器工作时将网卡设置成所谓混杂模式在该模式下网卡会将每个帧数据都传送
  给协议而不检查其MAC地址这样系统中嗅探器就能够检查帧中数据并摘取感兴
  趣信息其中包括报头信息或其它信息如口令和用户名很多协议以未加密方式发送敏
  感信息因此黑客就能够使用嗅探器获是系统访问权限如telnet,ftp,http中口令和用户
  名都直接在网络上传播此外些基于web管理工具也以http协议来传送用户
  名和口令例如webmin就是这样避免受到嗅探器危害最好办法是不要在网络上以未
  经加密方式传送用户名和口令通过使用ssh 代替telnet,用https代替http传送敏感信息
  可大大加强安全性
  常见嗅探器
  tcpdump,hunt,linux-snf,snort
  口令猜测
  在大多数linux中口令长度被限制在8个如果只能使用小写字母则总畏惧268
  次方(大约2090亿)种组合如果允许使用大写字母和数字则有628次方(大约218
  万亿)种组合
  对策:
  保护系统帐号关闭finger and rwho服务限制root只能从控制台登录可以通过修改
  /etc/securetty文件做到这这个文件列出了root可以登录tty(终端)在该文件中只
  包括tty1--tty6就能限制root只能从控制台登录如果从该文件中删除所有行则任何人
  在获得root权限前必须首先以其他用户登录然后使用su修改/etc/login.def中最小口令
  长度
  缓冲区溢出漏洞
  当开发者在中采用思路方法编写操作代码时则可能导致缓冲区溢出罪魁祸首多半
  是标准C语言中例如strcat,strcpy,sprf,vsprf,scanf and gets
  些在执行前不检查参数大小常见攻击所针对
  rpc.mountd(nfs),rpc.statd(nsf),imapd/popd,wu-ftp旦对系统尝试了缓冲区溢出攻击通常会
  从日志消息中看到这类行为
  对策:
  对于不必要服务关闭它们或者在防火墙阻塞对其访问如果服务是必须就只有
  对策就是使系统应用最新补丁
  netstat,lsof工具能识别系统中运行打开端口等信息但这些都不可靠
  能会被黑客替换可以用nmap从外部扫描系统以训别服务从外部扫描所以不会被
  黑客在系统中所做手脚所欺骗
  # nmap -sT -O xxxx     对本系统进行tcp扫描
  # nmap -sU -O xxxx    对本系统进行udp扫描
  第 7章 恶意使用网络
  DNS攻击
  bind缓冲欺诈
  dns是个分布式系统使用缓存Cache来降低网络负载在BIND8.1.1 和4.9.6版中存在个问
  题即它们没有验证接收自其它名字服务器信息合法性黑客利用这个漏洞可以在目村
  服务器中插入伪造记录引导客户到黑客机器上来从而捕获口令和敏感信息
  路由问题
  源路由允许发送者指定数据包到达目地前在ernet上经由路径特点对于网络
  勘探很有用但也能用来绕过安全网关和地址转换
  # cat /proc/sys/net/ipv4/conf/eth0/accept_source_route   0 表示不允许    1 表示允许
  不正确ip转发
  /proc/sys/net/ipv4/ip_forward文件配置ip转发0 表示禁止   1 表示允许这个功能对于防
  火墙和ip伪装网关是必要但对于名字服务器邮件服务器或堡垒主机则不必要可能如
  下禁止:
  # echo 0 > /proc/sys/net/ipv4/ip_forward  /etc/sysctl.conf net.ipv4.ip_forward = 0控制系统
  启动时是否允许
  Hunt
  同时具有数据包嗅探和会话劫持功能
  对策:
  采用openssh
  dsnf
  是组优秀网络审计测试和嗅探工具
  sshmitm
  对客户端伪装成ssh服务器而对服务器伪装成ssh客户端默认时它将记录所有用户名
  和口令
  对策:
  sshmitm依赖于用户忽略对ssh主机密钥检查当第次连接服务器时将会在
  $home/.ssh/known_hosts中添加主机密钥应当比较这份密钥和实际服务器密钥(通常在文
  件/etc/ssh/ssh_host_key.pub or /etc/ssh_host_key/.pub中)致性如果两者不匹配则说
  明黑客已经介入过刚才会话并获得了口令应马上断开连接并通知系统管理员重新设
  置口令以防止帐号被黑客滥用为了防止在无意中使用潜在不安全连接应配置ssh进行
  强制主机密钥检查即将如下几行写入到$home/.ssh/config起始处
  Host *
  StrictHostKeyChecking yes
  也可以将系统全局ssh_config文件配置成StrictHostKeyChecking.
  目前Sshmitm仅支持ssh版本1但并不保证支持ssh版本2软件Software不在开发中
  Webmitm
  它工作方式和sshmitm很相似它监听端口80(http)和443(https)中继对于实际服
  务器web请求并将结果返回给客户端webmitm没有真实ssl服务器证书和密钥
  所以必须伪造因此当第次运行webmitm时它将生成个和openssl相关ssl
  密钥和证书当用户连接https站点时其浏览器将试图验证所得到ssl证书而webmitm
  服务器所创建证书未经浏览器数据中保存可信官方机构颁发签名因此浏览器将弹
  出系列对话框以确认用户是否要连接到可能欺骗站点如果用户点击并忽略所有警告
  就能够像切正常那样访问web站点然而该会话实际上流经webmitm使用其能
  访问所有数据
  对策:
  和sshmitm比技术问题更重要是用户培训当浏览器给出众多Are you sure?这样有
  价值提问时不要简单点击Yes
  SYN潮涌攻击
  根据tcp/ip协议规定在收到最初SYN数据包时服务器TCP协议栈将相应半连接
  记录添加到队列里然后等待会以接收余下握手数据包如果成功则从队列中删除该记
  录由于队列容纳半连接记录数量有限因此如果许多连接最终没有成功握手
  就会出现问题旦队列已满服务器将不再接收新连接当攻击者能够以足够快速度
  向目标服务器发送SYN数据包以填满该队列就能够阻塞任何tcp服务这就是SYN潮涌
  攻击如果web服务器不再接受请求或者甚至连本地连接也变慢就应使用netstat -nat 来
  检查处于SYN_RECV半连接状态连接旦发现系统正受SYN攻击可以用如下shell
  脚本跟踪半连接数量:
  #!/bin/sh
  while [1] ; do
  echo -n "half-open connectons:"
  netstat -nat |grep SYN_RECV|wc -l
  sleep 1
  done
  如果为零介绍说明攻击者放弃了如果发现数目达到最大值并趋于平衡就很不幸了队列可
  能已经满了
  对策:
  升级到2.0.29以上版本在这些版本中增加了队列容量并缩短了超时值从而更加难以填
  满此外修改/proc下某几项以缩短等待SYN|ACK超时时间并增加队列中SYN数
  据包最大数目
  /proc/sys/net/ipv4/vs/timeout_synack
  /proc/sys/net/ipv4/vs/timeout_synrecv
  /proc/sys/net/ipv4/tcp_max_syn_backlog
  在受攻击中可以增加tcp_max_syn_backlog减少timeout_*改变这些值会导致
  丢失合法连接但是如果不对SYN攻击采取措施系统将失去所有连接
  实施出口过滤
  很多攻击思路方法都是依赖ip地址欺骗以掩盖攻击策源地或将响应流量引导到实际并没有发
  出请求主机出口过滤(egress filtering)是阻止欺骗最重要途径个连接区别网络
  路由器应该检查所有外出流量只有当数据包拥有相应本地网络合法地址时才允许它通
  过这看起来理所当然但确实有许多网络允许任何源地址数据包通过
  第 8章 提升用户权限
  userid以所有者id而不是以使用者id权限运行
  groupid以组id权限而不是者id权限运行
  在path中包括“.”坏习惯
  在path中包括“.”可以减少用户击键次数以foo 代替 sh foo或./foo这些做法有很大
  危险例如在/tmp中创建如下ls文件
  #!/bin/sh -
  #fake trojan ls
   chmod 666 /etc/passwd > /dev/null 2>&1 ; then
  cp /bin/sh /tmp/.sh
  chmod 4755 tmp/.sh
  fi
  exec ls "$@"
  #end of script
  如果在环境变量中设置了“.”并且其位置先于ls所在系统目录那么当用户在/tmp中执
  行命令ls时执行是上面所给出脚本而不是实际ls命令最终还是执行了ls
  所以用户不会看出任何异常如果执行该命令是root就会将口令文件设置成为可写
  将shell复制到/tmp保存成.sh同时设置其userid位所有这切都非常安静地发生
  登录时可以在多个地方修改path例如/etc/profile or /etc/profile.d中脚本手工修改较麻
  烦且容易出错建议在bashrc 或.profile文件未尾加如下行:
  PATH=`echo $PATH |sed -e 's/::/:/g; s/:.:/:/g; s/:.$//; s/^://'`以删除路径中所有“.”包括其另
  式“::”
  明文口令
  去掉用户文件中口令如fechmail中控制文件如果必须那样做应确保文件只能被
  所有者读取而不能被组成员或其它人读取
  存储在系统文件中口令
  有些系统可能需要存储在系统文件中口令例如samba软件Software包内有个smbpr
  工具允许linux使用和windows相连接打印机通常
  对于拔号上网用户链接所需用户名和口令通常保存在某个文件中般ppp将在
  /etc/ppp/chap-secrets文件中查口令而Wvdial则在/etc/wvdial.conf中查找使用chmod 600
  filename来限制文件使用只能被root读取
  使用用户名和口令来控制这种对打印机访问要保护保存smbpr口令必须确保并
  非所有用户都能读取/var/spool/lp下每个config文件在/var/spool/lp目录下查找所有
  .config文件对每个文件执行chmod o -rw
  可逆口令
  pop3通常以纯文本格式在网上传输用户名和口令认证信息这不是件好事人替代方
  式是使用名Popauth认证思路方法Popauth将所有口令以某种可逆加密方式处理后保存在
  数据库中如果攻击者能够访问该数据库则系统中所有用户和口令将受到威胁如果可能
  就不要使用popauth许多pop3客户端支持ssl加密方式尽可能使用ssl加密为用户
  证提供保护如果必须使用popauth则要确保/etc/popauth只能被root读取
  命令行中口令
  某些实用工具例例如smbmount and smbclient允许通过命令行或环境变量传递口令
  样可以通过使用ps命令或者直接读取/proc下文件来获得口令所有输入命令都会保存在
  shell历史文件中.bash_history无论如何都要避免在命令行输入口令并且周期性于清除历
  史文件以避免命令和安全信息长期积累如果要运行某些不想被记录命令可以反置
  环境变量中hisfile以关闭历史记录功能然后打开个新shell
  可写组许可
  个主组成员被入侵会增加组中其它成员安全威胁每个用户应该有自已惟主组
  并且该组只有他个用户然后所有用户在创建文件时都使用这个惟主组除非修改了
  组所有权通过次级组来解决共享文件访问问题用户umask设置应当严格设置为
  安全值以避免文件创建后就能够被默认组所读写将umask设置为066就可以保证文件
  创建后只有所有者才有读写权限而组成员和其它人都不能读写该文件在极端情况下
  可以使用077umask默认umask使得文件只能被root或者root权限用户访问
  特殊用途组和设备访问
  攻击者通常在/dev下查找许可设置不当设备他们能够利用这些情况来访问内存磁盘或
  串行调协并以此为基础步入侵系统和敏感文件例如通过/dev/kmem可以访问内
  核存储区对该文件有读权限攻击者就可以从中读取系统当前使用任何数据如果磁盘
  分区(如/dev/hda1)可读则攻击者就能够读到原始磁盘数据她可以使用/sbin/dump直
  接得到该分区下所有文件拷贝变这样可以绕过所有文件许可而且所有文件包括
  /etc/shadow等文件都可以读取而不需要root权限如果用户需要访问只有root才有权访
  问特殊设备文件时应当考虑使用Sudo
  wheel组
  它是系统上个特殊在启用wheel组系统中只有该组成员才能su成root
  使root口令被破解如果用户不是wheel组成员就不能运行su而进入root对于远程root
  登录将这制约手段和/etc/securetty文件相结合可以增强系统安全性并保护最重要root
  帐号使用它缺点是它为攻击者确定那此更有价值和权限帐号提供了线索即使预定义
  了wheel组多数linux系统并不自动启用wheel组访问控制功能 对于支持pam
  统只要在适当pam控制文件中(/etc/pam.d/su)添加pam_wheel行就可以支持wheel
  组
  sudo
  sudo是个常用工具用于分担管理员某此权限使用sudo可以允许特定用户执行通
  常必须是root用户才能运行特定管理任务例如可以授权某此用户添加删除或修改
  用户或它们自已口令
  sudo更改口令
  通常根据系统管理员授权普通用户能够运行passwd命令运行该命令时该用户能修
  改任何口令包括root这显然是个问题我们应该创建个前端脚本以检查和口令相对
  用户名确认其修改合法性般而言系统用户id号要小于某个预设值(通常是200
  或500)如果试图修改id号小于最小值脚本应当产生根据系统策略这个
  脚本也应该检查和保证所更改用户未被锁定并且拥用合法shell
  sudo编辑器操作
  通常用户用权权访问配置可能会运行编辑器例如crontab -e -u user我多数
  这类允许通过环境变量VISUAL or EDITOR设置默认编辑器所以可以运行几乎所有
  应当把编辑器限制在众所周知范围内如vi,ed or emacs但编辑器同样可以执行
  shell或外部命令编辑器以root运行所以任何只要运行在由该编辑器得到shell
  中都将拥用root权限对该问题最佳解决思路方法是当编辑文件时应当文件锁定并复制
  到普通用户能够以最小权限编辑安全位置然后用户再编辑这个临时文件而不会危及受
  保护系统文件在编辑完成后确保没有改动受限区域并且所做改动和文件结构和系统
  要求的后再将所修改文件复制到原始文件并解锁
  sudo带来其它漏洞
  chmod,允许开发者将目录设置为可写以完成工作攻击者可以直接运行chmod 666
  /etc/passwd /etc/shadow并随心所欲地创建或修改帐号
  chown,允许某公共区域(如某个web文档树)开发者获得其他开发者文件控制权
  攻击效果同chmod
  tar/cpio允许用户创建文档及备份攻击者可以用于抽取文件以替换系统执行文件或
  配置文件
  mount允许用户加载远程文件系统攻击者能够用于加载包含userid文件系统
  从而使用攻击者获得系统权限
  useradd允许可信用户创建新帐号攻击者可用于创建新root级帐号
  rpm,安装rpm软件Software包攻击者用于降级系统软件Software使其包含能够被攻击者利用漏洞
  者用来安装使用攻击者获得root权限rpm软件Software包
  创建sudoers文件时应当详细地设置允许运行及其参数下例配置两个组
  httpd_restricted组中用户运行apachectl时只能指定start和stop选项而httpd_full组
  成员能运行所有被支持选项
  User_Alias    httpd_full = king,ryan,chris
  User_Alias    httpd_restricted = guest,tax
  Cmnd_Alias    apachectl = /etc/apachectl *
  Cmnd_Alias    web_restart = /etc/apachectl start,/etc/apachectl stop
  httpd_full    ALL=(ALL) apachectl
  httpd_restricted ALL=(ALL) web_restart
  通过显式列出参数防止用户对自由使用避免了使用不当情况应当使用谨慎设计
  前端脚本来验证参数在脚本中应当检查path,libpath and editor等敏感环境变量必须
  给出绝对路径以避免特洛伊木马攻击
  格式串攻击
  问题出在现在员使用类似于*prf or syslog等支持格式化输出打印简单
  串场合正确方式应当是:
  prf("%s",str),然而为了节省时间和少打6个许多员转而输入如下省略第
  参数命令:prf(str)
  userid般预防
  使用chattr +i将所有userid设置为不可修改同时设置所有系统和目录不可修
  改在/bin,/usr/bin,/sbin,/usr/sbin,/lib等目录下文件很少变化因此当它们变化时管理员
  必须知道如果可能对/,/boot,/usr,/var,/home使用单独分区设置系统目录为只读并使
  用类似于linux入侵检测系统(LIDS)等安全性增强工具来阻止入侵者重新以读-写方式加
  载只读分区删除或去掉没用userid
  已加载文件系统上黑客userid
  用户用mount加载驱动器、设备、文件和远程文件系统当把有useridNFS
  加载到本时这样会产生问题要防止加载文件系统上userid文件任何远程文件系统
  或本地文件系统都应以nosuid标志加载也可以在不可信文件系统上设置noexec标志
  以阻止其上任何运行如果想要运行其中可以复制到本地文件系统然后运行
  这不仅有助于防止权限提升类型攻击也能够对付useridperl脚本并减少蠕虫和
  自繁殖通过网络传播
  硬链接和符号链接
  任何必须创建临时文件应当使用那此文件存在时来会重复创建对于系统
  open,可以使用O_EXCL参数做到这点
  open("/tmp/filename",O_EXCL|O_CREAT|O_RDWR,0666);
  在perl中可用sysopen命令实现:
  sysopen(HANDLE,"/tmp/filename",O_EXCL|O_CREAT|O_RDWR);
  在shell脚本中使用mktemp实用工具:tmpfile=`mktemp /tmp/filename.xxxxx`||exit 1
  commands > $tmpfile
  如果想要更高安全必可以安装solar designer开发linux内核补丁,位于
  http://www.openwall.org,该补丁能够阻止对/tmp目录下文件符号链接和硬链接攻击用户
  只有在拥有实际文件或读写权限情形下才能够在/tmp下创建链接应用好分区习惯
  如/home,/var,/tmp,/usr,/boot,/这样分区规则确保普通用户对除/home and /tmp目录的外
  所有其他分区都没有写权限这能够防止建立对系统文件如/etc/passwd and /bin/ls硬链接
  输入验证
  脚本应总是验证其输入参数以确保其中没有包含非法和shell元这些参数不
  能包括可能引起意外解释空白shell控制符和元规则适用于所shell脚本
  也适用于那些不明智地使用systemC脚本还应当屏蔽对IFS修改或者在
  执行传入参数和正确性检查前将IFS设置为安全值
  第 9章 口令破解
  DES(Data Encryption Standard 数据加密标准)linux中crypt(3)实现des功能它有两个参
  数key and saltkey是用户口令salt是从[a-zA-Z0-9./]中选择长度为2
  户口令最长不能超过8DES开发得到美国政府部份支持所以不能向美国的外
  地区输出
  MD5算法是种散列算法在很多方面改善了DES无限长口令;更大密钥空间远比
  13长;可输出来美国的外地区
  口令破解
  crack,john the ripper,viper,slurpie
  对策:
  1、自已运行口令破解找到机器中存在弱口令
  2、确保口令文件不是可读
  3、经常检查日志文件
  4、使用阴影口令
  阴影口令
  /etc/shadow只有root可读格式如下:
  1、用户名;
  2、口令密文;
  3、口令最后修改日期和1970年1月1日相隔天数;
  4、离用户允许修改口令还剩下天数;
  5、离用户必须修改口令还剩下天数;
  6、离系统提醒用户必须修改口令还剩下天数;
  7、用户仍可修改口令剩余天数否则到期的后该帐号被禁止
  8、保留字段
  启用阴影口令
  pwck----检查/etc/passwd完整性
  pwconv----转换到阴影口令它根据现有/etc/passwd文件创建/etc/shadow文件如果系统
  中已经存在该文件则将被合并此外在成功转换后仍可能在/etc/passwd中添加普通未
  加阴影帐号因此需要定期检查/etc/passwd内容以确保所有口令都已阴影化
  pwunconv----去除阴影
  chage命令判断用户是否必须更改口令执行时使用-M选项可以强制用户在指定期限的
  后更改口令
  选项
  mindays        两次更改口令的间最小天数
  maxdays        口令有效最大天数
  lastday        口令最后修改日期和1970年1月1日相隔天数
  inactive    口令过期的后帐号禁用的前休眠天数
  expiredate    帐号禁用起始日期
  warndays    在用户必须修改口令的前开始提醒用户天数
  其它实用
  gpasswd        往组中添加新用户
  groupadd    创建新组
  groupdel    删除组
  groupmod    修改组信息
  passwd        设置密码
  useradd        创建新用户
  userdel        删除用户
  usermod        修改用户信息
  口令保护
  创建强状口令规划至少各有来自于这些集:a-zA-Z0-9标点符号如果使
  用des,使用6--8个如果使用md5使用任意长度长于15位更好在区别
  系统上使用区别口令但会非常难于记住个解决办法是使用PGP和强口令对该文件
  加密
  passwd+能强制用户使用健壮口令
  npasswd,anlpasswd都是优秀口令检查
  使用次有效口令OTPSeureIDS/KeyOPIE
  小结口令保护思路方法:
  1、实现阴影口令
  2、使用md5取代des.
  3、实施好口令策略包括在用户创建新口令时进行测试强制用户采用健壮口令
  4、定期运行口令破解以发现系统中脆弱口令
  5、考虑使用口令期限和次有效口令
  6、决不把口令告诉不认识
  第十章 黑客保持通道思路方法
  基于主机认证和用户访问
  修改hosts.allow and hosts.deny
  有多个网络服务使用/etc/hosts.allow文件来确定哪些客户端被允许连接如果服务不接受来
  自该主机连接则在tcp握手完成的后将即刻关闭连接而不发送或接收任何数据也就
  是说该服务能够对来自该主机此类连接攻击完全免疫,黑客没有机会发送数据以做
  出破坏/etc/hosts.deny文件中内空通常应该是"ALL:ALL"表示所有没有在hosts.allow
  中列出机器都将被拒绝只要删除该行(例如:cat /dev/null >/etc/host.deny)黑客就可以
  连接所提供服务
  对策:
  使用文件完整性工具监视两个文件同时考虑使用chattr +i命令将它们设置成不可更改
  不安全nfs导出
  导出"/"本身黑客不用登录就可以修改目标主机上所有文件
  关闭远程命令即将以下行从/etc/inetd.conf中注释:
  shell stream tcp nowait root /usr/sbin/tcpd in.rshd
  login stream tcp nowait root /usr/sbin/tcpd in.rlogind
  exec stream tcp nowait root /usr/sbin/tcpd in.rexecd
  安装ssh后应当使用文件完整性工具监视如下所有文件:
  /etc/hosts.equiv
  /etc/shosts.equiv
  /home/*/.rhosts
  /home/*/.shosts
  /etc/sshd_config
  /ect/ssh_known_hosts
  向inetd添加root shell
  创建个网络可达root shell种简单思路方法是在/etc/inetd.conf文件中添加条记录
  设在被侵入系统中没有使用ingreslock端口这样黑可以将如下行添加到/etc/inetd.conf
  文件中:
  ingreslock stream tcp nowait root /bin/bash -i    给定-i参数/bin/bash将创建个交互
  shell这样只要连接到系统ingreslock端口黑客就能直接执行命令这不是
  实际tty(该连接通过某个网络套接字)所以它不如任务控制台好用但仍然能够运行任
  何命令
  对策:
  运行文件完整性检查工具配置防火墙只允许来自所需端口(ssh,smtp and http)进入连接
  使用chattr +i命令甚至个更好办法即根本不运行ed通过ed提供大部份服
  务都不是必需
  木马化是黑客在取得主机控权后利用编程技术样常用如ls,netstat等进行修
  改重新编译从而达到控制隐藏等目
  lrk--linux root kit 提供大量木马化如du,find,ls,config等
  RKdet和CHKrootkit是两个检测lrk工具
  入侵内核
  可装载内核模块利用完整性检查发现安装新模块和修改现有模块时间对/lib/modules
  目录树限制许可以及应用chattr +i命令使用类似LIDS内核补丁并进行适当配置使得
  即使root也不能在/lib/modules下安装文件或装载内核模块
  内核本身如果被入侵麻烦就大了在新内核运行时管理员不能相信和系统相关任何信
  息包括文件和进程列表网络链接磁盘和CPU统计以及/proc必须马上开始第 2章
  所介绍系统恢复过程
  第十章 服务器安全问题
  mail安全性
  Mail User Agent(MUA)邮件用户代理如Mutt,Pine,Elm用户使用这些编辑和阅读邮件
  Mail Transfer Agent(MTA)邮件传送代理如sendmail,qmail,postfix主要功能是在多台机器
  的间转发邮件
  Mail Delivery Agent(MDA)邮件分发代理是用户介面和MTA的间中介它从MTA中取
  回邮件并放置在本地收件箱或者把发件箱中邮件传给MTA这方面有mail.local
  and Procmail
  安全问题绝大多数和MTA有关
  sendmail
  在互联网上大约75%邮件服务器上运行
  1988年Morrisernet蠕虫就利用它WIZ命令它使用任何用户能立即获得root权
  限然而近来它已变得相当稳定这很大程度归功Sendmail Inc成立该商业组织现
  在负责Sendmail开发工作
  为了保证安全个必须采取而且绝对重要即订阅所选择邮件服务器安全问题邮件列
  表并随时准备在必要时升级
  邮件服务器最大问题是它需要绑定端口25因此必须以root启动只要服务器中发现漏
  洞黑客就有可能立即获得root权限Postfix and Qmail不以root运行它们都使用个单
  独进程绑定25端口该进程把所建立连接立即转交给独立smtp这个永远
  都不以root运行这两个都不存在root类漏洞sendmail在sendmail.cf文件中提供
  RunAsUser选项如果设置了该选项sendmail守护进程在读取和分发邮件时会先成为指定
  用户这也意味着必须修改相应文件使用该用户对它们有读权限这些文件包括队列目
  录/var/spool/mqueue,别名列表以及::文件等由于没有默认用户和组所以要创
  建它以sendmail用户和mail组运行sendmail为例就必须在.cf文件中包括如下代码:
  O RunAsUser=sendmail:mail
  邮件服务器旗标
  建立连接后smtp立即向用户发送旗标这个旗标通常包括邮件服务器名smtp软件Software名和
  版本号当前时间等这些信息对黑客非常重要所以要关闭这欢迎信息在sendmail.cf
  文件中找到SmtpGreetingMessage将如下配置:
  O SmtpGreetingMessage=$j Sendmail $v/$z; $b
  修改为 O SmtpGreetingMessage=$j BWare -SMTP spoken here; $b
  再使用如下命令重载其配置文件:killall -hup sendmail
  qmail修改qmail-smtpdsmtpgreeting值;postfix修改smtpd_banner值
  SMTP VRFY命令
  VRFY最初用于帮助机器确定用户名或邮件地址是否合法但是现在该命令很少再用于这
  个目相反它通常被黑客对用户实施蛮力攻击
  使用方法:VRFY XXXX   日志可以记录VRFY命令操作情况
  关闭该命令需对sendmail.cf文件中对PrivacyOption做如下更改:
  O PrivacyOption=authwarnings,novrfy 或将下面行添加到sendmail.mc配置文件中然后重
  新编译sendmail.cf('confPRIVACY_FLAGS',"authwarnings,novrfy")dnl修改完成后重
  载配置文件
  SMTP EXPN命令
  EXPN命令扩展所提供用户名和邮件地址和VRFY命令类似它也可以用来猜测用户名
  和邮件地址
  要关闭EXPN请求只需在sendmail.cf中将PrivacyOption标志修改为:
  O PrivacyOption=authwarnings,noexpn,或将下面行添加到sendmail.mc配置文件中然后重
  新编译sendmail.cf('confPRIVACY_FLAGS',"authwarnings,noexpn")dnl修改完成后重
  载配置文件如果同进关闭VRFY AND EXPN可以这样写authwarnings,noexpn,novrfy
  果使用是新近版本也可以使用goaway选项它自动包括了noexpn,novrfy和其它
  PrivacyOption选项
  qmail and postfix 都不支持expn命令所以不存在这个问题
  不适当文件许可
  在接收和分发邮件时邮件服务器可能会用到多个文件例如虚拟主机名邮件别名和邮件
  路由映射文件等如果某个用户能够修改这些文件它就能够对邮件服务器运作产生影响
  所以必须对这些文件设置合适文件许可使用文件完整性工具密切监视被邮件服务器使用
  所有文件同时为确保万无也可以用chattr +i命令将这些文件设置为不可修改
  sendmail8.9或以上版本在使用.forwards,::,地址映射以及其他相关文件前先对其执
  行许可正确性检查如果它认为所给许可权超过了所需就会取消动作并发回邮件
  果确实要依赖于所给过渡性许可则必须在sendmail.mc中添加如下行配置信息显示地
  告诉sendmail使用相应不安全许可设置
  OPTION('confDONT_BLAME_SENDMAIL','groupwritablealiasfile')dnl
  警告:如果想打破sendmail严格许可规定就必须确信所做事情含义旦允许
  用户修改和sendmail相关文件他们就有可能得到root权限
  为进步防止运行外部命令可以将sendmail配置成使用smrsh(sendmail受限shell)运行
  所有shell命令将下面行加到sendmail.mc:
  FEATURE('smrsh','path-to-smrsh'),smrsh只执行在特定目录下(默认为/usr/adm/sm.bin)
  但要确保该目录下安全
  qmail and postfix都遵循个原则:只有不受限制root用户才可以对邮件服务器相关文
  件具有写权限例外是.forward文件旦启用其所有者必须是接收用户邮件
  服务器相关文件在/etc/postfix and /var/qmail下要确保这些文件只有root可写
  邮件中继
  为保护机器和网络不被垃圾邮件兜售商滥用必须确保它们不中继来自非授权域邮件
  sendmail8.9及的后版本默认情况下拒绝邮件中继如果必须中继来自某些主机邮件
  必须将它们地址加下/etc/mail/access文件中
  警告:sendmail将整个域名中主机名的后部份看做域名如果管理员在.mc文件中使用
  FEATURE{relay_entire_do}并且当前域中本地ip地址都反解析为某 2级域名
  (如example.com)那么其意图是允许中继所有该域中机器邮件不幸sendmail
  会将域认为是.com从而实际上是以开放中继方式运行
  qmail0.91及以上版本默认情况下拒绝邮件中继要设置服务器中继特定主机邮件可以
  有以下两种方式:
  1、以支持host_options方式安装tcp封装器如下所示方式运行qmailsmtpd守护进程
  tcpd /var/qmail/bin/tcp-env /var/qmail/bin/qmail-smtpd
  并在/etc/hosts.allow中为所有需要中继主机添加和下面类似
  tcp-env:xxx.xxx.xxx.xxx :env=RELAYCLIENT
  2、如果使用tcpserver0.80或更高版本在/etc/tcp.smtp中添加如下行:
  xxx.xxx.xxx.xxx:allow,RELAYCLIENT=""
  然后运行:tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp,并且在tcpserver
  qmail-smtpd命令行后面添加:
  -x /etc/tcp.smtp.cdb
  postfix在默认情况下总是拒绝邮件中继服务器处理邮件所进出网络必须在它第次运行
  前在.cf中配置涉及相关变量有myhostname,mydo,myorigin,mydestination and
  mynetworks对于许多系统来说要建立个可运行postfix配置只需要处理这些变量
  不幸smtp服务器不知道实际邮件分发所有细节时期版本(早于1999年12
  月27日)并不对中继请求响应smtp这样中继检查如ORBS AND RBL会以
  为该服务器运行于开发中继方式将postfix升级到新版可避免这问题
  垃圾邮件
  当前使用最广泛阻止垃圾邮件思路方法是Paul Vixie首创MAPS(Mail Abuse Prevention
  --按照习惯这也被看作"spam"逆序拼写)Realtime Blackhole List 或 RBL.它是通过
  DNS实现服务列出了知名垃圾邮件发送站点和被他们中继服务器邮件服务器使
  用这基于DNS垃圾邮件阻塞思路方法时对所有和的联系机器IP地址执行DNS查询
  如果该IP已被登记则拒绝来自相应机器邮件RBL是另个开发数据库但它只记
  录开发中继邮件服务器
  在sendmail.mc文件中添加如下内容就可防止垃圾邮件骚扰不过对于每个sendmail
  版本其语法有所区别
  8.9        FEATURE(rbl,`rbl.maps.vix.com')
  8.10        FEATURE(dnsbl,1rbl.maps.vix.com',`error message')
  8.11        HACK(`check_dnsbl',`rbl.maps.vix.com',`',`general',`reason')
  qmail可以结合使用Rblsmtpd和smtpd来阻塞RBL类数据库列出站点Rblsmtpd由
  tcpserver启动
  postfix要启用基于DNS垃圾邮件阻塞功能首先要将maps_rbl_dos变量设置为所要
  查询数据库:
  maps_rbl_dos=rbl.vix.com,dul.maps.vix.com
  然后在smtpd_client_restrictions变量后直接添加"reject_maps_rbl"
  smtpd_client_restrictions = permit_mynetworks,reject_maps_rbl
  邮件炸弹和拒绝服务攻击
  过量连接会使合法用户邮件无法到达而邮件炸弹会迅速耗尽磁盘空间邮件通常保
  存在/var目录下所以旦填满就会对系统造成灾难性影响日志信息无处可放而系统
  也会最终陷于停顿
  在sendmail中可使用多个选项来限制守护进程使用资源数量:
  MaxDaemonChildren    限制并发运行sendmail进程数保障cpu不被过度使用
  ConnectionRateThrottle    限制smtp每秒并发入连连接数量
  MaxRcptsPerMessage    限制单个邮件接收者数量也可用于阻止编写拙劣垃圾邮件
  MaxMessageSize        拒绝尺寸过大邮件如果经常通过邮件交换大型文件则这个限制
  会带来问题但是不论如何说使用http,ftp            或scp/sftp来实现文件服务器要更好
  
  注意:这些值设置过低会导致延误或拒绝正常邮件因此在设置前最好检查邮件日志以确
  定日常邮件使用情况
  默认情况下qmail允许同时处理20封外发邮件如要修改可在文件
  /var/qmail/control/concurrencyremote中设置所需数值然后重启编译该值时设置上限
  为120但编译前可在conf-spawn中修改qmail并不实施额外限制Bernstein认为进
  步限制是操作系统职责管理员应该在/etc/limits.conf中设置约束并对/var执行磁盘
  配额要限制队列中邮件数据只需在/var中设置qmail用户所能使用inode上限就可
  以了
  针对MTA同件炸弹和DoS攻击postfix有内建最具扩展性和可调节防御措施最快
  捷解决思路方法是在.cf中设置default_process_limit变量这个变量限制并发进程数
  其默认值是50大致适用于通常系统其它设置包括:
  local_destination_concurrency_limit    同时向同本地接收者发送邮件上限
  default_destination_concurrency_limit    同时向同接收者发送邮件上限
  message_size_limit            任何大于该尺寸邮件都将被拒收
  bounce_size_limit            在回返时允许发回给发关者原始内空尺寸通常认为发回整个
  邮伯没有必要
  queue_minfree                在邮件队列所在文件系统中应当保留多大未用空间设置该
  变量有助于在填满文件系统前阻                    止postfix接收新邮件
  还有很多和资源和使用率限制有关选项可以查阅postfix相关技术文档
  postfix自由可写maildrop目录
  postfix首次发布时自夸在套件中没有userid and groupid所有要发送
  邮件都由某个postfix写入到maildrop目录中然后由单独postfix守护进程取
  出并发送maildrop目录应该设置sticky位让所有用户都可写如果该目录中某个文件
  有多个硬链接则postfix将丢弃这个文件任何人都可以对队列中文件添加额外链接
  这样这些文件(邮件)就会被删除而不会发送出去且此时也不会向用户发送警告
  个存在可能性是用户可以将别人文件以邮件形式发送出去但这要满足非常严格
  件受影响文件必须设置为700必须和maildrop目录在同文件系统必须以postfix
  可以接受格式保存攻击者必须能够对其建立链接而且在链接创建的后必须由受影响
  者将该文件删除这些要求不是不可能满足但确实不是很常见这些缺陷最初是由qmail
  作Bemstein指出最初Venema不愿意改正这个问题看起来这只有种解决思路方法:
  userid然而最终他不得不承认这是惟思路方法并创建了个名为postdropr
  groupid并将maildrop目录许可设为1730并将其组ID设置成和postdrop
  组从而只有该才能写入maildrop目录如果postfix sendmail外壳发现不能
  写入maildrop目录就会自动postdrop在安装配置postfix时它会要求用户输入gid
  组名如果指定了名字它就会安装groupidpostdrop并且使用受限目录许
  可否则仍将使用自由可写目录如果系统只被自已及可信任人使用则设置自由可
  写maildrop目录可能更好
  纯文本smtp
  邮件在网上是以纯文本方式传输所以只要能够监听发送和接收机的间连接就能够读
  取所有过往邮件如果邮件中存在敏感信息不应当未加密就发送任何现代MUA都
  包含加密部分PGP是最被广泛支持加密算法在RFC2487中定义了SMTP新扩展
  ---STARTTLSSTARTTLS在SMTP链接中提供SSL/TLS加密设置现在它仍然没有在服
  务器或客户端得到广泛应用但随着时间推移估计会得到越来越多支持使用它可确
  保SMTP-AUTH数据通过加密连接传输因而不会被嗅探sendmail在版本8.11的后内建
  支持qmail在它网站WebSite上有补丁postfix也有补丁通过查看EHLO响应可确定系统使用
  邮件服务器是否支持STARTTLS
  pop and imap中纯文本口令
  pop and imap本身并不支持加密所以要使用SSL or SSH连接首先设置加密监听某
  个本地端口并将流入该端口数据以加密方式发送到目标机器然后执行邮件操作时
  客户端不需连接到实际邮件服务器而只要连向本地主机相应端口下面给出两个区别
  例子:
  使用Stunnel加密IMAP
  假设用户使用Mutt连接mail.example.comMutt支持SSL而IMAP服务器不支持该加密
  方式这时则需要在服务器上运行Stunnel以监听imaps端口链接
  mailserver# /usr/sbin/stunnel -D mail.debug -p /path/to/stunnel.pem -N simapd -d simapd -l
  /usr/sbin/imapd
  在客户设置环境变量$mail指向邮件服务器
  client#export MAIL='{mailserver.example.com/ssl}'
  client#mutt
  当连接到达IMAPS端口时Stunnel将启动imapd服务器Stunnel可能使用TCP封装器
  因此要在/etc/hosts.allow中添加下应内容
  使用ssh加密POP
  假设用户使用Fetchmail通过pop下载邮件如果能用SSH登录服务器就可以利用SSH
  端口转发功能将POP连接建立在加密通道上只需在启动fetchmail的前直接运行如下命
  令:
  client#ssh -n -x -f mailserver.example.com -L888:mailserver.example.com:110\"sleep 60"
  所有连向本地端口888链接都将通过加密通道发送到邮件服务器pop端口然后运行
  fetchmail时在命令行参数上添加--port 888并指向本地主机而非mailserver.example.com
  FTP协议
  大部份现代协议使用单个网络连接来传输所有数据例如HTTP1.1客户端和服务器80
  端口建立连接并请指定页面服务器告诉客户端所要发送字节数在接收完数据后
  客户端还可以在同通道内发送请求然后FTP协议使用两个单独连接分别传输命令和
  数据
  命令通道是FTP客户端连向服务器21端口网络套接字连接比如LIST AND RETR
  命令通过这个通道传输它在整个会话期间保持连接
  数据通道客户端和服务器需要交换数据时就建立数据通道连接由PORT or PASV
  命令动态创建
  FTP这种本性使防火墙管理员大伤脑筋需要以应用代理逻辑来处理频繁动态创建连接
  如TIS防火墙中ftp-gw或ipchains masqueradeip_masq_ftp
  创建数据连接两种方式:主动和被动模式
  主动模式对于大多数UNIX FTP客户端而言这是默认模式但最近某些LINUX发行
  版开始转向默认设置被动模式用户输入ls命令时FTP客户端绑定个端口以供服务
  器连向这个端口并发回所请求数据然后客户端使用PORT命令把该端口号和IP地址发
  送给服务器格式是PORT W,X,Y,Z,H,L w,x,y,z是客户端地址H,L分别是端口号高和
  低字节这样客户端绑定本地端口H*256+L,然后客户端发送实际请求这里是LIST
  的后服务器打开个从其端口20(即ftp-data端口)到客户端口H*256+L连接如果连接
  成功就通过它发送所请求数据然后断开
  被动模式客户请服务器打开个端口以连接并传送数据按前面方式输入ls客户
  机发送PASV命令给服务器服务器接收到该命令后将绑定某个本地端口然后在PASV
  返回码中告诉客户端所绑定端口客户端根据返回码和服务器建立连接发送LIST命令
  传输数据
  纯文本口令
  FTP以纯文本方式传输用户各和口令黑客能监听到这些信息而多数据情况下FTP用户
  也是系统合法用户因而黑客能利用这些帐号攻击ROOT帐号可以使用几种思路方法加密
  命令通道但这些思路方法不能保护动态数据通道要有效地进行加密两端必须都使用主动
  模式而且服务器必须允许命令通道的外机器向其发送PORT命令例子:首先和同
  络ftp服务器建立ssh连接ssh绑定本地端口使用该端口将命令通道数据转发到
  ftp服务器21端口
  ftpcliet#ssh -L 2121:ftpserver.example.com:21 trusted_machine.example.com
  #then,from a separate shell
  ftpclient#ftp localhost 2121
  窍门技巧:如果用户在ftp服务器上拥有帐号应当直接使用scp or sftp而不是使用ssh转发绕
  弯子
  另种思路方法是使用次口令如果用户系统支持PAM则只需修改/etc/pam.d/ftp文件设
  置所选次性口令算法
  FTP旗标信息
  要修改默认旗标信息不要向黑客提供多余信息 wu-ftpd mody /etc/ftpaccess,
  proftpd mody /etc/proftpd.conf
  PASV FTP数据劫持
  在ftp客户端发出PASV or PORT命令的后发送跟随数据请(LIST,RETR,STOR等)的
  前存在个易受攻击时间窗口如果黑客能够猜到所打开端口就能够连接并截取或
  替换正在发送数据对于匿名ftp点没什么用处对于非匿名ftp黑客就可以使用
  这个思路方法截取有用数据
  PORT FTP数据劫持
  原理同上较少用
  通过第 3方FTP服务器进行端口扫描
  FTP客户端所发送PORT命令告诉服务器传送数据时应当连向IP和端口通常这就
  是客户端所在机器IP地址和所绑定端口但是FTP规范标准中并没有规定客户端发送
  PORT命令中必须指定自已IP地址黑客就可以利用这点通过第 3方FTP服务器进行端
  口扫描这是通过第 3方FTP服务器反射实现所以叫FTP反射优点有:
  1、匿名性源地址为FTP服务器不是黑客机器
  2、规避阻塞如果目标主机通过添加内核ACL或无效路由来自动阻塞对其进行扫描主机
  则黑客不可能在地址被拒的前完成扫描但是利用FTP服务器进行中继扫描就只会阻
  塞FTP服务器黑客可以换另个FTP服务器继续进行扫描完成后就可以进行攻击
  这样不会触发扫描防御机制利用nmap工具可进行这种扫描
  # nmap -b username:password@ftpserver:port   如果不给出用户名和口令则其默认为
  anonymousdefault port is 21因此对于匿名服务器命令可简写成# nmap -b ftpserver
  注意:对于某些防火墙只有当命令中IP地址属于受其保护机器它才会重写PORT
  AND PASV COMMAND即这思路方法也能用于扫描防火墙后机器# nmap -P0 -b
  username:password@ftpserver:21 -p 5400,5800,5900,6000 target.example.com
  经由FTPnmap扫描要慢于普通端口扫描依赖于FTP服务器完整TCP握手过程
  不能进行并发扫描除非编写脚本建立多个连接
  对策:
  阻塞来自20端口(ftp-data)连接但这样做会阻止合法FTP流量而且并不是所有
  FTP服务器都用该端口发送数据
  可配置成拒绝IP地址和客户端机器不符PORT可手工核查这类思路方法
  #cat ftp.bounce.detect
  USER username
  PASS password
  PORT 127,0,0,1,10,10
  LIST
  QUIT
  #nc ftpserver 21 < ftp.bounce.detect
  如果出现'425 Can't build data connection:Connection refused'这行信息介绍说明例中服务器易
  于受到攻击介绍说明服务器确实尝试过连接PORT中所指主机/端口多数配置正确服务
  器将给出区别出错信息或直接断开连接
  启用第 3方FTP
  允许任意使用PORT命令会带来某些问题以某种巧妙方式使用PORT AND PASV可以
  使FTP客户端某个服务器上数据直接发送到另个FTP服务器上数据无需流经控制这
  操作机器Xftp支持这功能
  FTP反射攻击
  如果黑客能够向服务器上载文件那他就可以使用PORT AND RETR命令传送任何数据
  例如有个可写incoming目录
  hacker$cat anonymous_mail.smtp
  HELO FTPSERVER.EXAMPLE.COM
  mail from :user@some_host.com
  rcpt to:mailbomb_recipient@other_host.com
  data
  ....
  hacker$ncftpput ftpserver incoming anonymous_mail.smtp
  hacker$nc ftpserver 21
  USER anonymous
  PASS [email protected]
  PORT 10,10,10,10,0,25
  RETR anonymous_mail.smtp
  QUIT
  FTP服务器将把anonymous_mail.smtp文件发送到邮件服务器10.10.10.10 SMTP(25)端口,
  该文件被设计成正确SMTP命令并且邮件服务器认为FTP服务器就是连接源机器
  有效防止它确定邮件真实来源可能性利用这种思路方法还可以攻击其它网络服务POP,IMAP
  OR lpd些时FTP服务器被认为是攻击源而黑客就高枕无忧了
  对策:
  限制服务器接收任意PORT命令确保jail目录下不存在所有人都可写目录或文件
  设FTP帐号用户ID为100组ID为200则可使用下面命令找出这些文件
  ftpserver# cd /path/to/jail
  ftpserver# find . \( -user 100 -o -group 200 -o -perm -002 \) -a -ls
  禁用SITE CHMOD命令可限制用户把文件许可改为可写
  更好办法是确保FTP区域不中存在属于匿名用户或能被其写入文件
  对防火墙的后FTP服务器端口非授权访问
  通常FTP服务器处于防火墙的后并阻塞所有除FTP的外所有访问在FTP服务器发送
  PASV的后防火墙必须为数据连接打开给定端口并在传输完成后关闭它但多数防火
  墙并不保持会话真实状态而且会被欺骗打开端口ftp-ozone脚本可用于攻击这种情况
  hacker$ftp-ozone ftpserver.example.com 79 &
  hacker$nc ftpserver.example.com 79
  对策:
  用ftp-ozone测试FTP服务器升级防火墙此外ip_masq_ftp模块不再存此漏洞或配置
  服务器不使用PASV FTP
  对防火墙的后FTP客户端端口非授权访问
  防火墙要想支持主动FTP,就必须提供思路方法转换PORT地址中地址并在防火墙外侧绑定
  端口然后将其正确地对应到实际FTP客户端如果不保护连接状态完整记录做到
  这点不容量很多开发商选择绕过这点选择更快处理速度黑客可以利用这点欺骗
  客户端使用其发送伪造PORT命令就可以穿透防火墙和FTP客户端任何端口建立
  连接
  Ftpd-ozone脚本提供了个用于欺骗防火墙特制URL将其发给客户客户旦单击这
  个链接FTP服务器所在机器就能连向位于防火墙的后客户端
  对策:
  用Ftpd-ozone脚本测试服务器升级防火墙ip_masq_ftp没有这个问题使用PASV FTP
  使用Aftpd代替匿名FTP,编译时指定DREADONLY,它将只提供文件下载服务而不能上传
  文件出连连接不使用20端口即服务器不需要任何root权限在服务器外运行
  令是/bin/ls
  Publicfile可作http and 匿名ftp服务器安全性极高它不支持任何有问题传统功能(SITE
  EXEC等)并对PORT AND PASV命令提供了适当保护而且不运行任何外部命令
  括/bin/ls
  小结
  sendmail是使用最广邮件服务器但保障其安全不是件容量事情所以应了解它基础
  知识才不会误入岐途qmail and postfix吸取了sendmail教训变得更小也更易于配
  置并且在设计时就考虑了安全性但它们使用不如sendmail广资料相对较少
  主动和被动FTP服务器都存在问题最好思路方法是不使用FTP服务器如需支持匿名ftp
  文件下载应当运行WEB服务器如Publicfile如果服务器用户必须上传文件应当使
  用scp or sftp来到代FTP它们是SSH组成部份scp是个安全命令行复制sftp
  本质上和的相同但拥有个类似于ftp交互界面这两个可以保护口令免遭嗅探
  并且确保数据不会被攻击者破坏
  第十 2章 Web服务和动态页面
  生成HTTP请求
  machine$telnet localhost 80
  输入
  HEAD / HTTP/1.0
  它向服务器请求其文档树根目录“/”头部信息
  头部信息会给黑客提供些有用信息如服务器版本操作系统安装模块等
  可以修改默认头部信息以防止信息泄露
  编辑src//httpd.h文件将下面这些行
  # SERVER_BASEPRODUCT "Apache"
  # SERVER_BASERVISION "1.3.14"
  修改成
  # SERVER_BASEPRODUCT "myweb"
  # SERVER_BASERVISION "xx.xx.xx"
  然后编译安装就可以了并且在启动服务器前在httpd.conf中添加如下指令:ServerTokens
  Min
  限制IP以保护数据
  在.htaccess中添加如下内容:
  Order Deny,Allow
  Deny from All
  Allow from 192.168.1.100
  Allow from 192.168.1.101
  使用http身份认证
  可控制结web服务器特定目录和子目录访问以base64格式将用户名和口令组合编码
  但仍是明文可给黑客劫取并用perl破解:
  hacker$perl -MMIME::Base64 -le > `pr decode_base64"监听到密码串"'
  为了把黑客监听到用户名和口令可能性减少应当使用安全http连接SSL.下面例子使用
  stunnel连接站点所监听ssl端口443在发送数据前首先建立加密连接的后所发送数
  据都以加密方式发送
  machine$stunnel -f -D7 -c -r www.example.com:443
  ssl version2所要求算法是项2000年9月20日到期美国专利可以使用RESREF库
  而不要使用RSAREF库(存在安全和稳定性问题)
  TSL(transport layer security传输层安全协议)协议基于SSLv3.0由ernet engineering task
  force(IEIF)D 1998年提出主要用途和ssl相同提供安全传输层目标:密码安全性
  互操作性扩展性相对高效性对ssl改进:对安全性略有增强规范标准定义更清晰
  将来协议提供更广泛基础
  在URL中允许..(double dot)
  早期apache存在巨大安全漏洞在URL中允许..指向上层目录Apache在很早期就补
  上了这个漏洞但仍会影响CGI
  不应该以root用户运行apache这样服务器就可读取属于root文件由其执行CGI程
  序也拥有root权限
  危险符号链接
  如果允许服务器使用符号链接就有潜在安全威胁将web服务器访问文件限制在文
  档树范围内是最重要安全策略如果存在符号链接如某用户在其html目录下放置了
  个指向/etc符号链接link_to_etc则黑客就可以如下请求/etc/passwd文件:
  http://localhost/~hack/link_to_ect/passwd
  允许符号链接配置如下
  Options FollowSymLinks
  更为严格配置是只允许符号链接指向属于同个用户文件或目录
  Options SymlinkIfOwnerMatch
  如果要使用链接应把它们集中放置于只有授权用户如root才能写入目录中拒绝普通用
  户创建符号链接限能限制敏感信息被链接数量目录许可为rwxr-xr--x,使用Directory指令
  限制apache只使用给定目录下符号链接
  <Directory /usr/local/apache/htdocs/links_dir>
  Options FollowSymLinks
  </Directory>
  防止获得目录内容列表
  apache中配置服务返回目录内容列表指令为Option Indexes在所有Option指令中去掉该
  指令可防止返回目录内容列表
  将CGI限制在某些目录下允许CGI运行于任何目录有潜在安全问题般APACHE配
  置CGI只能在CGI目录下执行这些目录通常被命名为cgi-bin or bin这些目录下
  所有文件被看作是可执行并以运行web用户(通常是nobody)身份运行应当关
  注这个目录下内容它们被请求时执行
  ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin"
  不要基于文件名来启用CGI服务器可以基于特定扩展名(.cgi, .pl, .php)这样就允许
  员将放在服务器目录结构下而不仅仅是特定目录这样会造成潜在安全问题基于文
  件名来启动CGI配置命令是:AddHandler cgi-script .cgi不要用以上命令注意有些系
  统默认是打开该功能要检查系统配置注释该选项或删除它
  不要在CGI目录下保存多个版本
  根据文件名限制对文件访问应当使用Files or FilesMatch指令如果使用Files则应当
  使用“~”号来表示引号内串为正则表达式下面例子给出了拒绝访问所有以.bak
  结尾文件设置思路方法:
  <Files ~ "\.bak$">
  Order allow,deny
  Deny from all
  </Files>
  使用FilesMatch时串直接被认为是正则表达式
  不安全CGI对其他web站点影响如果服务器以同个用户(通常是nobody)运行虚
  拟主机则某个虚拟主机上CGI漏洞可能会危及所有虚拟主机所以要使用
  SuEXEC配置每个虚拟机以区别用户运行CGI
  安全地使用.htaccess文件配置http身份认证
  配置服务器允许使用.htaccess文件是实施身份认证个便利思路方法此时只需在需要身份
  认证目录下放置个名为.htaccess文件就可以控制访问为将服务器配置为启
  用.htaccess文件可以使用AllowOverride and AccessFileName
  下面是个配置HTTP身份认证例子将下列指令写入httpd.conf以启用.htaccess文件
  AllowOverride指令设定.htaccess可以取代项目(用于身份认证应设为AuthConfig)
  AllowOverride    AuthConfig
  为指定由名为.htaccess文件控制文件访问应使用AccessFileName指令
  AccessFileName    .htaccess
  应用.htaccess文件时它本身决不应被服务器提供给客户端因此必须使用Files命令来配
  置服务器使其拒绝浏览器对.htaccess访问
  <Files .htaccess>
  Order allow,deny
  Deny from all
  </Files>
  .htaccess文件内容告诉服务器口令文件位置和其它信息例如:
  <LIMIT GET>
  require user login jdoe
  </LIMIT>
  AuthUserFile指令指向包含用户名和口令组合文件该文件用htpasswd创建这个文件决
  不能放在文档树目录下
  安全地使用httpd.conf文件来配置身份认证这种思路方法会更安全它不需要创建和管
  理.htaccess文件配置例子如下:
  <Directory /usr/local/apache/htdocs/private_dir>
  AuthType    Basic
  AuthName    "my private directory"
  AuthUserFile    /usr/local/apache/misc/my_private_dir.htpasswd
  require        valid-user
  </Directory>
  利用默认配置漏洞安装系统时都有个默认配置这个默认配置可能是不安全
  建议关闭所有没用默认配置
  1、删除联机手册
  2、删除默认欢迎页面
  3、删除根据文件名执行CGI
  4、安全配置parsed HTML文件也叫SSIs(Server Side Includes)是需要预处理HTML
  文件允许服务器通过包含其它文件或执行外部命令来生成HTML配置指令是:
  AddType text/html .shtml
  AddHandler server-parsed .shtml
  AddHandler server-parsed .html
  SSIs允许用户(包括某些能力低下用户)上传能够执行HTML文件所以只有
  必要时才配置否则关闭它
  安全配置服务器状态和信息显示
  <Location /server-status/>
  SetHandler server-status
  Order deny,allow
  Deny from all
  Allow from localhost
  </Location>
  <Location /server-info/>
  SetHandler server-info
  Order deny,allow
  Deny from all
  Allow from .example.com
  </Location>
  应当只对可信主机才显示该信息所以应当确保上述命令中包含Deny from all.并且在Allow
  from中列出可信主机但更好做法是关闭它
  配置public_html目录
  通过适当配置apache可将http://www.example.com/~jdoe/等类似URL指向~jdoe/public_html
  或相应文件:
  UserDir public_html
  <Directory /home/*/public_html>
  ....
  </Directory>
  如果不需要这个功能则注释或删除它更加安全思路方法是为需要放置HTML文件用户
  在web文档树下创建个目录并且将这目录设置为只有相应用户或组才能够写入
  如果不需WEB代理请删除或注释掉以下指令
  <Directory proxy:*>
  Order deny,allow
  Deny from all
  Allow from .example.com
  </Directory>
  CGI问题
  不要信任预装和下载CGI应当遵循3个简单规则:
  1、删除web服务器附带CGI
  2、删除那些不是自已编写或没有彻底检查过和CGI
  3、不要从流行脚本库(免费或收费)下载和使用脚本应该自已写
  不安全CGI大部分可归为以下两类:
  1、作不正确假设
  2、执行操作系统和找开连向操作系统管道
  在写CGI时应该
  1、总是检查接收到字段
  2、使用MD5来校验隐藏字段使用隐藏字段是在CGI的间传递数据天真做法更为成
  熟做法是创建cookie以保存随机会话ID并在服务器上将会话相关数据保存到数据库中
  以会话ID作为相应数据库主键
  3、总是检查数据长度
  4、不要依赖于referer头部信息
  5、不要依赖cookie将cookie和ssl起使用
  6、以显式读模式打开文件检查文件名中如果存在允许范围的外就不要把
  这个文件名传给open
  7、绝不要假设预处理会被执行CGI决不能假设所收到数据必定处于正确格式
  必须在CGI中检查数据格式并在必要时修改它
  9、    使用系统或管道时绝对不要相信来自表单参数应当验证变量只包含合法
  10、    而不是检查其中是否包含非法这样才能确保$file中文件名正确即只包含
  11、    字母数字下划线各点号
   ($file =~ /^[\w\.]+$/)) {   all is well   }  {  all is not well  }
  9、以序列方式执行system如:system("wc -c $file"),如果$file是a.dat;rm -rf / 就问题严重
  变成wc -c a.dat;rm -rf /可写成system 'wc','-c',$file如果要在内部以反引号方式或管道
  方式得到相应结果使用fork and exec
  如:$num_chars =`wc -c $file'; 安全实现为: (open PIPE,'-|') { $num_chars =<PIPE>;}
  { exec 'wc','-c',$file; }如果要用管道实现如下:open P,"wc -c $file |"; pr <P>; 可安全实现
  为: (open PIPE, '-|') { pr <PIPE> } { exec 'wc','-c',$file; }
  利用WEB农场现在将web服务器建立在大型ISP服务器上情形很常见因此
  点可能同时和几百上千个站点起被“放牧”在“WEB农场上如果其中个站点出现漏
  洞那么就可能受到攻击并使黑客获得root权限那你也不能幸免所以要明智地选择
  ISP.最好自已建站
  其它web服务器
  Jigsaw(www.w3.org/Jigsaw)是由w3c开发并用java实现设计目更着重于技术示范
  示范将要流行功能和技术不建议使用
  thttpd是个简单小型可移植快速和安全HTTP服务器它内建调节功能允许用
  户指定URL or URL GROUP最大字节流量
  AOL服务器基于Tcl多线程服务器适用大型动态站点由大型商业公司开发但遵
  循GPL
  bash-httpd个用bash编写web服务器但它没有其它大多数web服务器功能
  行缓慢而且不安全不适合于工作环境
  awk-httpd个用AWK写web服务器运行缓慢不安全而且只实现了http
  子集不适合于工作环境
  小结
  采用以下几个措施可以帮助管理员保护web站点安全
  1、    选择个安全服务器确保每当出现安全漏洞时都能够快速升级(apache能很好地满
  2、    足这个要求)这个要求也针对在基础软件Software中添加其它部件如mod_perl,mod_php4
  3、    正确配置服务器使其拒绝列出目录内容只执行特定目录下CGI并禁止使用
  4、    “..”(指向上层目录)
  3、绝不使用来处INTERNETCGI并且在编写这类时避免作任何假设
  4、除非使用序列方式否则不要system or exec也不要打开管道
  5、定时检查服务器日志文件
  第十 3章 访问控制和防火墙
  只要你linux系统连接了Internet并提供了某些服务那么实施主机访问控制和防火墙就
  是实现linux安全
  inetd
  很多网络服务都由inetd(Internet Daemon)启动它能够监听系统中多个指定端口如果
  在某个端口上建立了连接就启动相应服务例如假设在端口23建立了个连接
  inetd就启动telnet守护进程来处理请求类似地如果用户连向机器ftp端口21inetd
  就会启动ftpd进程inetd在文件/etc/services中查找请求连接端口使用了inetd系统就
  只需持续运行个守护进就可以了而不是十个 8个启动inetd时它读取配置文件
  /etc/inetd.conf以确定自已控制服务
  telnet        stream        tcp        nowait    root        /usr/sbin/telnetd
  pop-3        stream        tcp        nowait    root        /usr/sbin/pop3d
  各字段分别表示:
  1、服务名称(在/etc/services中指定)
  2、套接字类型stream/dgram
  3、协议 tcp/udp
  4、nowait指定inetd为新连接创建新进程
  5、进程将以什么用户(root)运行
  6、位置
  xinetd
  是inetd扩展或增强版它实现了若干inetd中没有但很有价值功能包括:
  1、内建了基于远程主机地址、名字或域名访问控制功能类似于tcp封装器
  2、基于时间段访问控制
  3、完整记录连接日志、包括成功或失败连接
  5、    通过限制同类服务进程并发运行数、服务进程总数、日志文件大小、接收同主机
  6、    连接数等可防止DoS
  5、可将服务绑定到指定网络接口(例如只绑定内部接口而不绑定外部接口)
  配置思路方法和inetd完全区别可通过perlxconv.pl从inetd.conf文件转换为xinetd.conf
  文件
  $/usr/local/sbin/xconv.pl < /etc/inetd.conf > /etc/xinetd.conf
  配置文件格式
  defaults
  {
  instances = 25
  log_type  = FILE /var/log/servicelog
  log_on_seccess = HOST PID
  log_on_failure = HOST RECORD
  per_sourece = 5
  }
  service ftp
  {
  flags = REUSE NAMEINARGS
  _type = stream
  protocol = tcp
  wait = no
  user = root
  server = /usr/sbin/in.ftpd
  server_args = -l -a
  }
  defaults节中各字段含义如下:
  instances    服务器并发处理请求数上限
  log_type    在指定文件中记录日志但xinetd也允许使用syslog
  log_on_success    对成功连接选择要记录信息包括PID,HOST AND USERID
  log_on_failure    对失败连接选择要记录信息包括PID,HOST AND USERID
  per_source    同ip地址对同服务建立连接数上限
  dir /etc/xinetd.d    该目录下脚本也可由xinetd启动
  将inetd转换为xinetd最后步是修改/etc/rc.d下相应脚本将xinetd配置为在系统启动
  时运行
  使用inetd and tcpd实施主机访问控制
  tcpd能对服务进行外“封装”请求规则在/etc/hosts.allow and /etc/hosts.deny中定义下面是
  某个安装了tcpdinetd.conf配置文件
  ftp    stream        tcp        nowait    root    /usr/sbin/tcpd in.ftpd -l -a
  telnet    stream        tcp        nowait    root    /usr/sbin/tcpd in.telnetd
  pop-3    stream        tcp        nowait    root    /usr/sbin/tcpd ipop3d
  这里用tcpd封装了in.ftpd,in.telnetd,ipop3d当试图和这些服务连接时tcpd会检验相应规
  则
  /etc/hosts.allow and /etc/hosts.deny中规则格式为:
  daemon_list : client_list [:shell_command]
  ALL:ALL
  ALL:127.0.0.1
  in.telnetd:127.0.0.1
  in.telnetd:127.0.0.1 trusted.machine.example.com .example.com
  完整匹配规则如下
  1、    如果项以前导点号开始它匹配该域内所有客户机如.example.com匹配
  2、    xxx.example.comxxx.xxx.example.com等
  2、如果项以点号结尾它匹配所有前缀相同客户机如192.168.和所有类似于
  192.168.xxx.xxx机器匹配
  3、如果项以"@"开始就被认作是nis网络组名如sshd:@trustedhosts将允许trustedhosts
  网络组中机器访问ssh
  4、如果项格式为xxx.xxx.xxx.xxx/yyy.yyy.yyy.yyy就被认作是网络掩码对
  192.168.1.0/255.255.255.0将匹配所有ip在192.168.1.0--192.168.1.255范围内机器在
  通配符介绍说明:
  ALL        匹配所有客户机
  LOCAL        匹配所有不包含点号机器
  UNKNOWN        匹配任何名称或地址未知客户机(必须小心使用)
  KNOWN        匹配任何名称或地址已知客户机(必须小心使用可能会名字服务器
  原因而临时无法获得主机名)
  PARANOID    匹配任何名称或地址不匹配客户机
  因此为抵御telnet攻击可在/etc/host.deny中写规则all:all以拒绝黑客telnet连接
  果允许某机器使用telnet连接可将其添加到/etc/hosts.allow文件中:telnetd:xxx.example.com
  使用xinetd实施主机访问控制
  xinetd对inetd最重要增强的是内建访问控制能力从而不需要tcp封装器它对服务可
  以实施如下访问控制:
  1、类似于tcp封装器控制基于ip地址控制基于ip名控制基于域名控制
  2、访问时间(例如将ftp访问限制在上午8点到下午5点的间)
  使用xinetd拒绝所有机器所有访问可在xinetd.confdefaults节中设置no_access =
  0.0.0.0    个思路方法是使用属性only_from = 不给它赋值这种办法较好的后我们
  0.0.1.0    可以在其后添加允许连接主机
  可以为每个服务指定允许连接ip给only_from添加时必须使用“”操作符
  可以用access_times属性限制访问时间如access_times=8:00-17:00
  伪造“可信”反解析DNS地址
  hacker$host hacker.example.com
  hacker.example.com has address 192.168.15.10.
  hacker$host 192.168.15.10
  10.15.168.192.IN-ADDR.ARPA do name poer trusted.target_network.com
  这个黑客为了进入target_network.com就将他反解析DNS地址设置成属于可信域
  对策:
  如果软件Software采用简单预防措施攻击就不能得逞:同时进行前向和反向DNS查询
  编译tcp封装器时如果选了-DPARANOID选项就会切断所有前向和反向DNS解析不
  连接
  来自信任域攻击者
  在inetd中锁定域中指定主机可在HOSTS.ALLOW文件中使用EXCEPT操作
  ALL:127.0.0.1 .example.com EXCEPT trouble.example.com
  另个思路方法是删除它么向DNS记录使该机器不能映射到任何域名
  在xinetd中锁住域中指定主机可使用no_access
  些不支持inetd/xinetd启动和如SSH如果想支持TCP封装器可在编译时指定
  --with-tcp-wrappers选项如果软件Software包本身不支持可请维护者添加该功能(通常不成功)
  或自已开发实现该功能
  攻击脆弱tcp封装器规则
  在安装了封装器并设置了规则后可能会发现封装器没有正常工作这通常是配置文件中
  造成可用TCPDCHK AND TCPDMATCH检验规则
  针对由inetd启动服务资源耗尽攻击
  黑客可以对被tcp封装器保护服务发起数以千记连接对系统发动资源耗尽攻击造成不
  能响应合法连接如果系统没有使用xinetd可以用tcpserver来限制连向服务连接数量
  这个也允许管理员配置主机访问控制其功能和TCP封装器相同使用xinetd可以防
  御这种攻击它内建功能有助于对付这种问题1、限制每个服务并发连接数(instances);
  2、限制每个IP地址连向单个服务连接数(per_source)
  防火墙
  防火墙要比通过tcp封装器或xinetd实现主机访问控制更加安全这是防火墙能够阻
  止黑客到达受保护机器端口而封装器是针对已到达系统连接请求所采取安全措施
  主要有两类防火墙
  1、    应用代理服务器解析指定协议并根据要求建立连接通常包括内容过滤功能(例如:
  2、    阻塞javascript)
  3、    包过滤防火墙根据源和目地址有选择地接收或拒绝数据包它常并不解析相应协议
  4、    所以不执行内容检查
  许多防火墙特别是商业版本通常整合了这两个类型它们通常被称为有状态包过滤器
  它们维护某些会话状态以支持类似FTP协议同时又基于数据包过渡以便快速处理
  linux包过滤功能集成在内核中2.2版是ipchains2.4版是iptables包过滤检查数据
  包头部并确定所应采取动作:
  接受数据包即允许通过
  回绝(reject)数据包丢弃它并告诉源地址数据包被拒绝
  拒绝(deny)数据凶直接丢掉它就好像没有接收到这个数据包
  最高效策略是拒绝数据包这样就能拒绝潜在黑客访问并且不给出任何响应---他将不
  知道连接已经被拒绝而该连接也被挂起直到超时(这样极大延缓了端口扫描速度)
  linux2.4内核彻底重写了包过滤代码以使的更为强大相应系统称为Netfilter控制其规则
  集是iptablesiptables类似于ipchains两者间区别有:
  1、内建chain名现在为大写(即INPUT,OUTPUT,FORWARD等)
  3、    TCP AND UDP端口现在需要指定--source-port or --sport和--distination-port or dport选项
  4、    并且必须放置在-p tcp or -p udp的后
  3、-y标志现在改为-syn并必须放置在-p tcp 的后
  4、DENY 被 DROP取代
  5、MASQ被改为MASQUERQDE,并使用区别语法
  6、对状态检查支持不再需要内核模块
  状态检查
  引入状态检查概念是iptables所做最重要工作的有状态检测防火墙不仅检查源、
  目IP地址和端口也监视所使用协议以确保该通信遵循相应连接规则如果是HTTP
  连接它可以确保发往远程主机GET,POST or HEAD请求符合HTTP协议的后它也
  确保远程主机响应信息包括HTTP报头和数据体注意个极有经验黑客如果控制了
  通信双方就只需修改其协议使的看起来像HTTP即可以通过防火墙
  阻塞特定网络访问
  拒绝ICMP ping and traceroute
  ipchains实现
  /sbin/ipchains -A input -s 0/0 echo-request -d 192.168.1.102 -p icmp -j DENY
  -A input    添加规则到input规则集
  -s 0/0        来自任何ip地址
  echo-request -d x.x.x.x    到目地址echo-request类型
  -p icmp        协议
  -j DENY        立即拒绝
  为对付traceroute应拒绝所有流向端口33435---33525
  /sbin/ipchains -A input -s 0/0 -d 192.168.1.102 -p udp 33435:33525 -j DENY
  iptables实现
  /sbin/iptables -A INPUT -s 0/0 -d 192.168.1.102 -p icmp --icmp-type echo-request -j DROP
  /sbin/iptables -A INPUT -s 0/0 -d 192.168.1.102 -p udp --dport 33435:33525 -j DROP
  telnet端口连接尝试
  ipchains实现
  /sbin/ipchains -A input -i eth0 -s 0/0 -d 192.168.1.102 telnet -p tcp -j DENY (    如果其它服务只
  需替换telnet就可以了)
  防火墙策略
  在系统上建立防火墙时 我们建议遵循个简单规则拒绝所有未被显式许可东西
  换名话说就是应先确定哪些包允许通过并创建规则其它所有数据包应被拒绝这是最安
  全思路方法实现这策略种思路方法是启动防火墙并拒绝所有数据包将所有被拒绝数据
  包记录到日志文件中然后检查日志文件注意那些被拒绝如果发现应允许某个
  数据包通过就在规则集起始处添加规则以允许该数据包通过然后继续这过程直到
  系统允许所有服务都能通过ernet访问
  如果允许所有数据包流入某个端口(如:SSH)仍然应当使用tcp封装器以拒绝来自
  hosts.allow中指主机的外连接这样做能达到双层保护效果旦防火墙配置出错都还有
  另条防线
  使用ipchains创建防火墙(规则顺序至关重要应该是默认规则允许流入拒绝全部)
  /sbin/ipchains -P input DENY    处理流入数据包默认规则是DENY
  /sbin/ipchains -A input -s 0/0 -d 192.168.1.102 www -p tcp -j ACCEPT
  /sbin/ipchains -A input -s 0/0 -d 192.168.1.102 ssh -p tcp -j ACCEPT
  /sbin/ipchains -A input -j DENY -l    拒绝所有流入数据包并记录它们(使用-l选项)
  iptables实现也应遵循和ipchains相同策略
  /sbin/iptables -P INPUT DROP
  /sbin/iptables -A INPUT -s 0/0 -d 192.168.1.102 -p tcp --dport www -j ACCEPT
  /sbin/iptables -A INPUT -s 0/0 -d 192.168.1.102 -p tcp --dport ssh -j ACCEPT
  /sbin/iptables -A INPUT -j DROP
  /sbin/iptables -A UNPUT -j LOG    记录所有拒绝流入数据包
  防火墙配置工具
  www.linux-firewal-toos.com/linux
  MonMathaIPTables
  开源防火墙
  FWTK    应用代理防火墙
  SINUS    个可运行于较小linux系统以及2.0内核防火墙
  Floppyfw    个具有防火墙功能静态路由器只要张1.44M软盘就可启动2.2内核并安装
  配置防火墙
  linux router project    另个单软盘路由器/防火墙
  商业防火墙
  checkpo
  cisco pix
  gauntlet
  sonicwall
  附录
  保持你最新版本

Tags:  linux文件系统 linux系统安装 linux系统 linux系统维护

延伸阅读

最新评论

发表评论