标题：包过滤技术
技术原理
包过滤技术(IP Filtering or packet filtering) 的原理在于利用路由器监视并过滤网络上流入流出的IP包，拒绝发送可疑的包。由于Internet 与Intranet 的连接多数都要使用路由器，所以Router成为内外通信的必经端口，Router的厂商在Router上加入IP 过滤 功能，过滤路由器也可以称作包过滤路由器或筛选路由器（Packet FilterRouter）。防火墙常常就是这样一个具备包过滤功能的简单路由器，这种Firewall应该是足够安全的，但前提是配置合理。然而一个包过滤规则是否完全严密及必要是很难判定的，因而在安全要求较高的场合，通常还配合使用其它的技术来加强安全性。
常用的优秀的个人防火墙有Norman Personal Firewall、天网防火墙等。
路由器逐一审查数据包以判定它是否与其它包过滤规则相匹配。每个包有两个部分：数据部分和包头。过滤规则以用于IP顺行处理的包头信息为基础，不理会包内的正文信息内容。包头信息包括：IP 源地址、IP目的地址、封装协议(TCP、UDP、或IP Tunnel)、TCP/UDP源端口、ICMP包类型、包输入接口和包输出接口。如果找到一个匹配，且规则允许这包，这一包则根据路由表中的信息前行。如果找到一个匹配，且规则拒绝此包，这一包则被舍弃。如果无匹配规则，一个用户配置的缺省参数将决定此包是前行还是被舍弃。
包过滤规则允许Router取舍以一个特殊服务为基础的信息流，因为大多数服务检测器驻留于众所周知的TCP/UDP端口。例如，Telnet Service 为TCP port 23端口等待远程连接，而SMTP Service为TCP Port 25端口等待输入连接。如要封锁输入Telnet、SMTP的连接，则Router舍弃端口值为23、25的所有的数据包。
表9.1 一些常用网络服务和使用的端口
服务名称
端口号
协议
说明
ftp-data
20
tcp
FTP数据
ftp
21
tcp
FTP控制
telnet
23
tcp
如BBS
smtp
25
tcp
发email用
time
37
tcp
timserver
time
37
udp
timserver
domain
53
tcp
DNS
domain
53
udp
DNS
tftp
69
udp

gopher
70
tcp
gopher查询
http
80
tcp
www
pop3
110
tcp
收email用
nntp
119
tcp
新闻组，usernet
netbios-ns
137
tcp
NETBIOS 名称服务
netbios-ns
137
udp
NETBIOS 名称服务
netbios-dgm
138
udp
NETBIOS 数据报服务
netbios-ssn
139
tcp
NETBIOS Session服务
snmp
161
udp
SNMP
snmptrap
162
udp
SNMP trap
irc
194
tcp
IRC网络聊天服务
ldap
389
tcp
轻型目录服务协议
https
443
tcp
SSL加密
https
443
udp

[1]典型的过滤规则有以下几种：允许特定名单内的内部主机进行Telnet输入对话、只允许特定名单内的内部主机进行FTP输入对话、只允许所有Telnet 输出对话、只允许所有FTP 输出对话、拒绝来自一些特定外部网络的所有输入信息。
有些类型的攻击很难用基本包头信息加以鉴别，因为这些独立于服务。一些Router可以用来防止这类攻击，但过滤规则需要增加一些信息，而这些信息只有通过以下方式才能获悉：研究Router选择表、检查特定的IP选项、校验特殊的片段偏移等。这类攻击有以下几种：
源IP地址欺骗攻击：入侵者从伪装成源自一台内部主机的一个外部地点传送一些信息包；这些信息包似乎像包含了一个内部系统的源IP地址。如果这些信息包到达Router的外部接口，则舍弃每个含有这个源IP地址的信息包，就可以挫败这种源欺骗攻击。
源路由攻击：源站指定了一个信息包穿越Internet时应采取的路径，这类攻击企图绕过安全措施，并使信息包沿一条意外(疏漏)的路径到达目的地。可以通过舍弃所有包含这类源路由选项的信息包方式，来挫败这类攻击。
残片攻击：入侵者利用IP残片特性生成一个极小的片断并将TCP报头信息肢解成一个分离的信息包片断。舍弃所有协议类型为TCP、IP片断偏移值等于1的信息包，即可挫败残片的攻击。
从以上可看出定义一个完善的安全过滤规则是非常重要的。通常，过滤规则以表格的形式表示，其中包括以某种次序排列的条件和动作序列。每当收到一个包时，则按照从前至后的顺序与表格中每行的条件比较，直到满足某一行的条件，然后执行相应的动作(转发或舍弃)。有些数据包过滤在实现时，“动作”这一项还询问，若包被丢弃是否要通知发送者(通过发ICMP信息)，并能以管理员指定的顺序进行条件比较，直至找到满足的条件。
对流进和流出网络的数据进行过滤可以提供一种高层的保护。建议过滤规则如下：
（1）任何进入内部网络的数据包不能把网络内部的地址作为源地址。
（2）任何进入内部网络的数据包必须把网络内部的地址作为目的地址。
（3）任何离开内部网络的数据包必须把网络内部的地址作为源地址。
（4）任何离开内部网络的数据包不能把网络内部的地址作为目的地址。
（5）任何进入或离开内部网络的数据包不能把一个私有地址（private address）或在RFC1918中 127.0.0.0/8.）的地址作为源或目的地址。
（6）阻塞任意源路由包或任何设置了IP选项的包。
（7）保留、DHCP自动配置和多播地址也需要被阻塞。0.0.0.0/8 、169.254.0.0/16 、192.0.2.0/24 、224.0.0.0/4 、240.0.0.0/4。
优点
（1）一个过滤路由器能协助保护整个网络。绝大多数Internet防火墙系统只用一个包过滤路由器；
（2）过滤路由器速度快、效率高。执行包过滤所用的时间很少或几乎不需要什么时间，由于过滤路由器只检查报头相应的字段，一般不查看数据报的内容，而且某些核心部分是由专用硬件实现的，如果通信负载适中且定义的过滤很少的话，则对路由器性能没有多大影响；
（3）包过滤路由器对终端用户和应用程序是透明的。当数据包过滤路由器决定让数据包通过时，它与普通路由器没什么区别，甚至用户没有认识到它的存在，因此不需要专门的用户培训或在每主机上设置特别的软件。
局限性
（1）定义包过滤器可能是一项复杂的工作。因为网管员需要详细地了解Internet各种服务、包头格式和他们在希望每个域查找的特定的值。如果必须支持复杂的过滤要求的，则过滤规则集可能会变得很长很复杂，并且没有什么工具可以用来验证过滤规则的正确性。
（2）路由器信息包的吞吐量随过滤器数量的增加而减少。路由器被优化用来从每个包中提取目的IP地址、查找一个相对简单的路由表，而后将信息包顺向运行到适当转发接口。如果过滤可执行，路由器还必须对每个包执行所有过滤规则。这可能消耗CPU的资源，并影响一个完全饱和的系统性能。
（3）不能彻底防止地址欺骗。大多数包过滤路由器都是基于源IP地址、目的IP地址而进行过滤的，而IP地址的伪造是很容易、很普遍的。
（4）一些应用协议不适合于数据包过滤。即使是完美的数据包过滤，也会发现一些协议不很适合于经由数据包过滤安全保护。如RPC、X- Window和FTP。而且服务代理和HTTP的链接，大大削弱了基于源地址和源端口的过滤功能。
（5）正常的数据包过滤路由器无法执行某些安全策略。例如，数据包说它们来自什么主机，而不是什么用户，因此，我们不能强行限制特殊的用户。同样地，数据包说它到什么端口，而不是到什么应用程序，当我们通过端口号对高级协议强行限制时，不希望在端口上有别的指定协议之外的协议，而不怀好意的知情者能够很容易地破坏这种控制。
（6）一些包过滤路由器不提供任何日志能力，直到闯入发生后，危险的封包才可能检测出来。它可以阻止非法用户进入内部网络，但也不会告诉我们究竟都有谁来过，或者谁从内部进入了外部网络。