网络与信息安全网络安全(一)潘爱民,北京大学计算机研究所内容TCP/IP基础防火墙防火墙的基本介绍几种防火墙的类型防火墙的配置防火墙技术的发展安全层次安全的密码算法安全协议网络安全系统安全应用安全TCP/IPoverview协议栈一些数据包的格式IP数据包TCP/UDP数据包常用的上层协议几个常用工具TCP/IP协议栈IP地址划分保留私用的网络地址:10.0.0.0-10.255.255.255172.16.0.0-10.172.31.255.255192.168.0.0-192.168.255.255还有一些具有特殊意义的网络地址,如广播地址和127.0.0.1地址等。协议栈各层数据包的结构IP网络互连的原理广播子网内部ARP地址解析从MAC地址到IP地址之间的解析以太网络间路由IP数据包格式UDP数据包格式TCP数据包格式TCP连接的建立和终止时序图常用的上层协议DNS:53/tcp,udpFTP:20,21/tcp,udptelnet:23/tcp,udpHTTP:80/tcp,udpNNTP:119/tcp,udpSMTP:25/tcp,udpPOP3:110/tcp,udp参考:IANA提供的port-numbers.txt常用的网络工具NetstatIpconfig/ifconfigPingTracert……防火墙(Firewall)防火墙的基本设计目标对于一个网络来说,所有通过“内部”和“外部”的网络流量都要经过防火墙通过一些安全策略,来保证只有经过授权的流量才可以通过防火墙防火墙本身必须建立在安全操作系统的基础上防火墙的控制能力服务控制,确定哪些服务可以被访问方向控制,对于特定的服务,可以确定允许哪个方向能够通过防火墙用户控制,根据用户来控制对服务的访问行为控制,控制一个特定的服务的行为防火墙能为我们做什么定义一个必经之点挡住未经授权的访问流量禁止具有脆弱性的服务带来危害实施保护,以避免各种IP欺骗和路由攻击防火墙提供了一个监视各种安全事件的位置,所以,可以在防火墙上实现审计和报警对于有些Internet功能来说,防火墙也可以是一个理想的平台,比如地址转换,Internet日志、审计,甚至计费功能防火墙可以作为IPSec的实现平台防火墙本身的一些局限性对于绕过防火墙的攻击,它无能为力,例如,在防火墙内部通过拨号出去防火墙不能防止内部的攻击,以及内部人员与外部人员的联合攻击(比如,通过tunnel进入)防火墙不能防止被病毒感染的程序或者文件、邮件等防火墙的性能要求防火墙的类型包过滤路由器应用层网关电路层网关包过滤路由器基本的思想很简单对于每个进来的包,适用一组规则,然后决定转发或者丢弃该包往往配置成双向的如何过滤过滤的规则以IP和传输层的头中的域(字段)为基础,包括源和目标IP地址、IP协议域、源和目标端口号过滤器往往建立一组规则,根据IP包是否匹配规则中指定的条件来作出决定。如果匹配到一条规则,则根据此规则决定转发或者丢弃如果所有规则都不匹配,则根据缺省策略安全缺省策略两种基本策略,或缺省策略没有被拒绝的流量都可以通过管理员必须针对每一种新出现的攻击,制定新的规则没有被允许的流量都要拒绝比较保守根据需要,逐渐开放包过滤路由器示意图网络层链路层物理层外部网络内部网络包过滤防火墙在网络层上进行监测并没有考虑连接状态信息通常在路由器上实现实际上是一种网络的访问控制机制优点:实现简单对用户透明效率高缺点:正确制定规则并不容易不可能引入认证机制举例:ipchainsandiptablesLinux内核2.2中的包的流向sys_write()sock_write()inet_sendmsg()tcp_v4_sendmsg()tcp_do_sendmsg()tcp_send_skb()tcp_transmit_skb()ip_queue_xmit()ip_output()ip_finish_output()dev_queue_xmit()hard_start_xmit()sys_read()sock_read()inet_recvmsg()tcp_recvmsg()tcp_v4_recv()ip_local_deliver()ip_rcv()net_bh()Netif_rx()Block_input()ei_receive()ei_interrupt()outputinput网络层的处理流程Ip_rcv()RoutetableIp_forward()DemasqIp_output()RoutetableIp_local_deliver()inputforwardoutput传输层链路层masqLinux内核中的包过滤In_Rule1In_Rule2In_Rule3Rule1Rule2inputforwardoutputFirewall_opsuserAcceptDenyRejectIpchains的用法示例ipchains-Ainput-ieth0-s192.168.1.0/24-jDENYipchains-Ainput-ptcp-d162.105.73.192/26any-y–ieth0-jDENYipchains–Ainput–ptcp–d162.105.73.25480-ieth0–jACCEPT包过滤防火墙的设置(1)从内往外的telnet服务clientserver外部内部往外包的特性(用户操作信息)IP源是内部地址目标地址为serverTCP协议,目标端口23源端口1023连接的第一个包ACK=0,其他包ACK=1往内包的特性(显示信息)IP源是server目标地址为内部地址TCP协议,源端口23目标端口1023所有往内的包都是ACK=1包过滤防火墙的设置(2)从外往内的telnet服务clientserver内部外部往内包的特性(用户操作信息)IP源是外部地址目标地址为本地serverTCP协议,目标端口23源端口1023连接的第一个包ACK=0,其他包ACK=1往外包的特性(显示信息)IP源是本地server目标地址为外部地址TCP协议,源端口23目标端口1023所有往内的包都是ACK=1针对telnet服务的防火墙规则*:第一个ACK=0,其他=1服务方向包方向源地址目标地址包类型源端口目标端口ACK往外外内部外部TCP102323*往外内外部内部TCP2310231往内外外部内部TCP102323*往内内内部外部TCP2310231Ftp文件传输协议clientftpserver命令通道:21端口数据通道:20端口515151502120PORT5151OK建立数据通道OKFtp文件传输协议(续)clientftpserver命令通道:21端口数据通道:1023515151502120PASVOK3267建立数据通道OK3267针对ftp的包过滤规则注意事项建立一组复杂的规则集是否允许正常模式的ftp数据通道?有些ftpclient不支持pasv模式动态监视ftp通道发出的port命令有一些动态包过滤防火墙可以做到启示包过滤防火墙比较适合于单连接的服务(比如smtp,pop3),不适合于多连接的服务(比如ftp)针对包过滤防火墙的攻击IP地址欺骗,例如,假冒内部的IP地址对策:在外部接口上禁止内部地址源路由攻击,即由源指定路由对策:禁止这样的选项小碎片攻击,利用IP分片功能把TCP头部切分到不同的分片中对策:丢弃分片太小的分片利用复杂协议和管理员的配置失误进入防火墙例如,利用ftp协议对内部进行探查应用层网关也称为代理服务器特点所有的连接都通过防火墙,防火墙作为网关在应用层上实现可以监视包的内容可以实现基于用户的认证所有的应用需要单独实现可以提供理想的日志功能非常安全,但是开销比较大应用层网关的结构示意图应用层网关的协议栈结构HTTPFTPTelnetSmtp传输层网络层链路层应用层网关的优缺点优点允许用户“直接”访问Internet易于记录日志缺点新的服务不能及时地被代理每个被代理的服务都要求专门的代理软件客户软件需要修改,重新编译或者配置有些服务要求建立直接连接,无法使用代理比如聊天服务、或者即时消息服务代理服务不能避免协议本身的缺陷或者限制应用层网关实现编写代理软件代理软件一方面是服务器软件但是它所提供的服务可以是简单的转发功能另一方面也是客户软件对于外面真正的服务器来说,是客户软件针对每一个服务都需要编写模块或者单独的程序实现一个标准的框架,以容纳各种不同类型的服务软件实现的可扩展性和可重用性客户软件软件需要定制或者改写对于最终用户的透明性?协议对于应用层网关的处理协议设计时考虑到中间代理的存在,特别是在考虑安全性,比如数据完整性的时候应用层网关——代理服务器发展方向——智能代理不仅仅完成基本的代理访问功能还可以实现其他的附加功能,比如对于内容的自适应剪裁增加计费功能提供数据缓冲服务两个代理服务器的实现例子MSP–MicrosoftProxyServersquidMicrosoftProxyServer2.0一个功能强大的代理服务器提供常用的Internet服务除了基本的WebProxy,还有SocksProxy和WinsockProxy强大的cache和log功能对于软硬件的要求比较低安装管理简单与NT/2000集成的认证机制扩展的一些功能反向proxy:proxy作为Internet上的一个Webserver反向hosting,以虚拟WebServer的方式为后面的WebServer独立地发布到Internet上安全报警MicrosoftProxyServerv2管理示意图squid关于squid是一个功能全面的WebProxyCache可以运行在各种UNIX版本上是一个自由软件,而且源码开放功能强大,除了http协议之外,还支持许多其它的协议,如ftp、ssl、DNS等代理服务管理和配置/usr/local/squid/etc/squid.conf默认端口3128一种使用方案Linux+Squid电路层网关电路层网关本质上,也是一种代理服务器有状态的包过滤器动态包过滤器状态上下文环境流状态认证和授权方案例子:sockssocks专门设计用于防火墙在应用层和传输层之间垫了一层Sockslib和socksserver不支持ICMPSocksv4和socksv5基于用户的认证方案对UDP的支持正在普及和流行可以参考有关的RFCsocks应用传输层网络层链路层clientSocksserverpolicyserverSocksv5在socksv4的基础上发展起来Socksv4支持基于TCP的应用穿越防火墙Socksv5增加了对于UDP协议的支持Socksv5增加了对于认证方案的支持Socksv5支持IPv6地址Socks要求修改客户程序,链接到sockslibrary,以便socksified首先连接到socksserver,然后再同目标服务器连接对于UDP协议,首先同socksserver建立一个TCP连接,然后再传送UDP数据TCP客户的处理过程客户首先与socksserver建立一个TCP连接,通常SOCKS端口为1080然后客户与服务器协商认证方案然后进行认证过程认证完成之后客户发出请求服务器送回应答一旦服务器应答指示成功,客户就可以传送数据了认证方案的协商Client-Server:+-----+---------------+---------------+|VER|NMETHODS|METHODS|+-----+---------------+---------------+|1|1|1to255|+-----+---------------+---------------+Server-Client+-----+------------+|VER|METHOD|+-----+------------+|1|1|+-----+------------+Method:X