防火墙构建软路由, ・将 配置为代理防火墙. 组网: 用 Linux 防火墙构建软路由, ・将 Linux 配置为代理防火墙. ・Linux 组网:如何用老式奔腾 ・构筑 防火墙之个人用户设置防火墙. 机和 Linux 构, ・构筑 Linux 防火墙之个人用户设置防火墙. ・Linux 防火墙之 IPtables 概念与 用法( ・用 用法(图), ・用 Linux 防火墙构建 DMZ. ・linux 防火墙实现技术比较 http://www.bitscn.com/network/200606/27430.html
软件包来构建软路由的一种方法, 本文主要介绍利用 Linux 自带的 Firewall 软件包来构建软路由的一种方法,此方法为内 部网与外部网的互连提供了一种简单 安全的实现途径。 简单、 构建软路由, 部网与外部网的互连提供了一种简单、安全的实现途径。Linux 自带的 Firewall 构建软路由, 地址来控制访问权限,较一般的代理服务软件有更方便之处。 主要是通过 IP 地址来控制访问权限,较一般的代理服务软件有更方便之处。 一、防火墙 防火墙一词用在计算机网络中是指用于保护内部网不受外部网的非法入侵的设备, 它是 防火墙一词用在计算机网络中是指用于保护内部网不受外部网的非法入侵的设备, 包过滤程序以及一些规则来保护内部网的一种策略,有硬件实现的, 利用网络层的 IP 包过滤程序以及一些规则来保护内部网的一种策略,有硬件实现的,也有 软件实现的。 软件实现的。 运行防火墙的计算机(以下称防火墙)既连接外部网,又连接内部网。一般情况下, 运行防火墙的计算机(以下称防火墙)既连接外部网,又连接内部网。一般情况下,内 部网的用户不能直接访问外部网,反之亦然。如果内部网用户要访问外部网, 部网的用户不能直接访问外部网,反之亦然。如果内部网用户要访问外部网,必须先登录到 防火墙, 地址转换后,再由防火墙发送给外部网, 防火墙,由防火墙进行 IP 地址转换后,再由防火墙发送给外部网,即当内部网机器通过防 火墙时, 地址均被设置(或称伪装,或称欺骗) 地址。经伪装以后, 火墙时,源 IP 地址均被设置(或称伪装,或称欺骗)成外部网合法的 IP 地址。经伪装以后, 在外部网看来, 地址的机器,因而可进行通信。 在外部网看来,内部网的机器是一个具有合法的 IP 地址的机器,因而可进行通信。外部网 用户要访问内部网用户时,也要先登录到防火墙,经过滤后,仅通过允许的服务。 用户要访问内部网用户时,也要先登录到防火墙,经过滤后,仅通过允许的服务。 由此可见,防火墙在内部网与外部网之间起到了两个作用: 由此可见,防火墙在内部网与外部网之间起到了两个作用: 包过滤——保护作用; ——保护作用 (1)IP 包过滤——保护作用; (2)路由——网络互连作用。 (2)路由——网络互连作用。 路由——网络互连作用 二、防火墙的安装 1.硬件安装 1.硬件安装 防火墙的计算机上必须安装有两块网卡或一块网卡 必须安装有两块网卡或一块网卡、 运行 Linux 防火墙的计算机上必须安装有两块网卡或一块网卡、一块 Modem 卡。本文 以两块网卡为例。安装网卡,正确设置中断号及端口号, 地址。 以两块网卡为例。安装网卡,正确设置中断号及端口号,并为各网卡分配合适的 IP 地址。 配置以后的防火墙模型。 配置以后的防火墙模型。 2.安装网关 2.安装网关 安装网关的方法有两种: 一种是运行 linuxconf, linuxconf, 选项, 安装网关的方法有两种: 进入 ROUTINGANDGATEWAYS 选项, 配置网关; 文件。 文件的方法安装网关。 配置网关;另一种是修改 rc.inet1 文件。下面介绍修改 rc.inet1 文件的方法安装网关。 进入/etc/rc.d/目录, 回车,参照下面内容修改: 进入/etc/rc.d/目录,键入 virc.inet1 回车,参照下面内容修改: /etc/rc.d/目录
IPADDR="202.114.194.130"# IPADDR="202.114.194.130"#第一块卡的外部网 IP 地址 .130" NETMASK="255.255.255.128"# NETMASK="255.255.255.128"#第一块卡的外部网子网掩码 NETWORK="202.114.194.0"# NETWORK="202.114.194.0"#第一块卡的外部网网段 BROADCAST="202.114.194.255"# BROADCAST="202.114.194.255"#第一块卡的外部网广播地址 GATEWAY="202.114.194.129"#第一块卡的外部网网关, GATEWAY="202.114.194.129"#第一块卡的外部网网关,也是 默认网关 IPADDR1="192.168.0.1" #第二块卡的内部网 IP 地址 NETMASK1="255.255.255.0" NETMASK1="255.255.255.0" #第二块卡的内部网子网掩码 NETWORK1="192.168.0.0" #第二块卡的内部网网段 BROADCAST1="192.168.0.255" #第二块卡的内部网广播地址 /sb
page 1
in/ifconfigeth0$ /sbin/ifconfigeth0${IPADDR} broadcast${BROADCAST}metmask$ broadcast${BROADCAST}metmask${NETMASK} #设置第一块卡 /sbin/ifconfigeth1$ /sbin/ifconfigeth1${IPADDR1} broadcast${BROADCAST1}metmask$ broadcast${BROADCAST1}metmask$ tmask {NETMASK1} #设置第二块卡 /sbin/routeadd-net$ /sbin/routeadd-net${NETWORK} netmask$ netmask${NETMASK} /sbin/routeadddefaultgw$ /sbin/routeadddefaultgw$ {GATEWAY}metric1 /sbin/routeadd-net$ /sbin/routeadd-net${NETWORK1} netmask$ netmask${NETMASK1} 要测试网关设置情况,可以用“ifconfig”命令测试,运行该命令后, 要测试网关设置情况,可以用“ifconfig”命令测试,运行该命令后,会显示出 eth0 和 “ifconfig”命令测试 及上面我们修改的相关内容,如果没有显示这些相关信息 说明设置不正确, 显示这些相关信息, eth1 及上面我们修改的相关内容,如果没有显示这些相关信息,说明设置不正确,还要重新 再来一次。 再来一次。 三、构建软路由 1.IP 地址转换 地址欺骗, IP 地址转换也称为 IP 地址伪装或 IP 地址欺骗, 也就是指当内部网机器登录到防火墙上 IP(不合法的外部网 地址) 地址, 时,防火墙将内部网 IP(不合法的外部网 IP 地址)伪装成合法的外部网 IP 地址,再与外部网 通信。 地址伪装的命令格式如下: 通信。IP 地址伪装的命令格式如下: ipfwadm- ipfwadm-F-amasquerade-D0.0.0.0/0-Weth0 amasquerade-D0.0.0.0/0- 其中“ D0.0.0.0/0”表示允许对所有内部网 地址进行转换, Weth0”表示内部 其中“-D0.0.0.0/0”表示允许对所有内部网 IP 地址进行转换,“-Weth0”表示内部 进行转换的。 网 IP 地址是通过网卡 1 进行转换的。 地址伪装设置完毕后, 一下外部网的机器, IP 地址伪装设置完毕后,就可以在内部网机器上 ping 一下外部网的机器,如果防火墙 没有被关闭的话, 通了,说明配置一切正确。 上的 forwarding 没有被关闭的话,就可以 ping 通了,说明配置一切正确。 2.设定访问外部网的权限 2.设定访问外部网的权限 为了加强对网络的管理,有时要对内部网访问外部网进行一定的,这种包括: 为了加强对网络的管理,有时要对内部网访问外部网进行一定的,这种包括: (1)允许哪些机器可以上网 (2)允许访问哪些站点 允许哪些机器可以上网; 允许访问哪些站点。 (1)允许哪些机器可以上网;(2)允许访问哪些站点。 上网机器可以参照以下脚本: 上网机器可以参照以下脚本: ipfwadm- ipfwadm-F-pdeny#全部拒绝内部网机器上网 pdeny# ipfwadm- ipfwadm-F-am-S192.168.0.5/32 am- -d0.0.0.0/0#允许 192.168.0.5 机器对 d0.0.0.0/0# 外部网的访问 访问站点,可以这样设置: 访问站点,可以这样设置:
ipfwadm- ipfwadm-O-ireject-D0.0.0.0/0 ireject- #对外部网的所有站点加以 拒绝 ipfwadm- ipfwadm-O-iaccept-D202.114.0.0/16 iaccept- 202.114.0.0~ #允许访问 202.114.0.0~ 202.114.255.255 内的所有站点 上述设置中,“0.0.0.0/0”表示全部网址,“202.114.0.0/16”表示 上述设置中,“0.0.0.0/0”表示全部网址,“202.114.0.0/16”表示 202.114.0.0 至 表示全部网址 202.114.255.255 的所有站点。 202.114.255.255 的所有站点。 3.统计 3.统计 IP 包流量 包流量记账的设置如下: IP 包流量记账的设置如下: ipfwadm- ipfwadm-A-f /sbin/ipfwadm- /sbin/ipfwadm-A-f /sbin/ipfwadm-Aout- /sbin/ipfwadm-Aout-I-S192.168.0.0 /32- /32-D0.0.0.0/0 #对所有流出包 统计 /sbin/ipfwadm-Ain- /sbin/ipfwadm-Ain-I-S192.168.0.0 /32- /32-D0.0.0.0/0 #对所有流入包 统计 所在记账的统计都存放于/proc/net/ip_acct 文件中, 进制表示。 所在记账的统计都存放于/proc/net/ip_acct 文件中,其所有 IP 地址均为 16 进制表示。 /proc/net/ip_ 以上所有脚本,既可放置在/etc/rc.d 文件中, 脚本, 执行。 以上所有脚本,既可放置在/etc/rc.d 文件中,也可单独设立 shell 脚本,用命令 sh 执行。 上运行通过。 以上设置均在 RedHat5.1 上运行通过。
防火墙作为一种网络或系统之间强制实行访问控制的机制,是确保网络安全的重要手段。针对不同的需求和应用环境,可以量身定制出不同的防火 墙系统。防火墙大到可由若干路由器和堡垒主机构成,也可小到仅仅是网络操作系统上一个防火墙软件包所提供的包过滤功能。
在众多网络防火墙产品中, Linux 操作系统上的防火墙软件特点显著。 首先是
page 2
Linux 操作系统作为一个类 Unix 网络操作系统, 在系统的稳定性、 健壮性及价格的低廉性方面都独具优势。更为重要的是,Linux 不但本身的源代码完全开放,而且系统包含了建立 Internet 网络环境所需要的所有 服务软件包,如 Apache Web 服务器、DNS 服务器、Mail 服务器、Database 服务器等。同样,基于 Linux 的防火墙软件不但具有强大的功能,而 且大部分都是开放软件。
随着 Internet 的飞速发展,安全问题越来越重要。利用 Linux 构建企业网深受中小企业的青睐,而利用 Linux 构建企业网的防火墙系统也成为 众多中小企业的理想选择。
Linux 内核从 1.1 版本开始,就已经具备包过滤功能。在 2.0 内核中,开始采用 Ipfwadm 来操作内核的包过滤规则。到 2.2 版本时,Linux 内核 采用了 Ipchains 来控制内核的包过滤规则。发展到 2.4.x 时,Ipchains 被一个全新的包过滤管理工具 Iptables 所替代。新发布的 2.6 版内核也在安 全方面进行了改进。因此,无论拥有哪个版本的 Linux 内核,无论选择哪个版本的 Linux 来构建自己的企业网,都可以利用现有的系统构建出一个 理想实用的防火墙。
防火墙系统可分为包过滤型、应用级网关(也叫代理服务器型防火墙)和电路级网关三种基本类型。Linux 提供的防火墙软件包内置于 Linux 内核中,是一种基于包过滤型的防火墙实现技术。其中心思想是根据网络层 IP 包头中的源地址、目的地址及包类型等信息来控制包的流向。更彻 底的过滤则是检查包中的源端口、目的端口以及连接状态等信息。
本文主要介绍 Linux 提供的 IPFW、Ipchains、Iptables 这三种非常实用的防火墙和具体实现。 IPFW 防火墙
IPFW 是比较老的 Linux 内核版本提供的防火墙软件包。该软件包的全称是 Ipfwadm。Ipfwadm 程序包提供了建立规则的能力,根据这些规则 来确定允许什么样的包进出本网络。简单说来,防火墙就是一对开关,一个开关允许包通过,另一个开关禁止包通过。现代防火墙系统一般都会附 加审计跟踪、加密认证、地址伪装和 VPN 等多种功能。作为一个安全开关,防火墙可定义的安全策略有两个: (1)一切未被允许的都被禁止; (2)一切未被禁止的都被允许。
显然,策略 1 的安全性明显高于策略 2,但它是以牺牲灵活性和可访问资源为代价来提高安全性的。Ipfwadm 系统同样提供 IP 封装,它允许用 户使用 Internet 上的一个公共 IP 地址空间。
下面以 Red Hat 系统为例,说明 Linux 系统上 IPFW 防火墙的实现。
在 Red Hat 系统上(在其它系统上一样)安装 Ipfwadm 防火墙,需要以 root 用户登录,然后执行如下命令:
#rpm -ivh /mnt/cdrom/RedHat/RPMS/ Ipfwadm-2.3.0-5.i386.rpm
在安装好 Ipfwadm 后,就可以交互方式指定 Ipfwadm 的包过滤规则。过滤规则对每一个进入系统的 IP 包进行检查,从而决定哪些包允许通过 防火墙,哪些包则禁止通过。Ipfwadm 命令的一般格式为:
/sbin/ ipfwadm category commands parameters [options] Ipchains(IP 链)和 IP 伪装
在更新版本的 Linux 内核中,Ipchains 替代 Ipfwadm,提供了更为严格的包过滤控制机制。Ipchains 提供完整的防火墙功能,包括包过滤、地 址伪装、透明代理。
Linux 2.2 内核中提供的 Ipchains,通过四类防火墙规则列表来提供防火墙规则控制,这些列表称为防火墙链。它们分别是 IP input 链(IP 输入 链)、IP output 链(IP 输出链)、IP forward 链(IP 转发链)和 user defined 链(用户定义链)。一个链实际上就是一个规则表。所谓规则,即 当被检测的包头符合规则的定义时,就按预先的设定对该包进行某种处理。输入链是指对内连接请求的过滤规则;输出链是对外连接请求的过滤规 则;转发链是对内部与外部通信包转发的过滤规则;用户定义链是用户自己定义的规则。
当一个数据包进入 Linux 防火墙系统时,Linux 内核使用输入链决定对这个包
page 3
的操作;如果这个包不被丢弃,内核则使用转发链来决定是否将 这个包转发到某个出口;当这个包到达一个出口被发出前,内核使用输出链最后确定是丢弃该包还是转发该包。在上面的过程中,如果输入链已经 决定处理这个包,则核心需要决定下一步包应该发到什么地方,即进行路由。假如此时该数据包是发到另一台主机的,则核心就运用转发链;如果 没找到匹配的设置,则这个包就需要进入目标值指定的下一条链,此时目标值有可能是一条用户自定义链,也有可能是一个特定的值。例如: ACCEPT 允许通过。 DENY 直接丢弃。
REJECT 丢弃并通过 ICMP 回复通知发送者包被丢弃。
MASQ 通知核心将该包伪装,该值只对转发链和用户自定义链起作用。
REDIRECT 通知核心将包改送到一个本地端口,该值只对输入链和用户自定义链起作用,并且只有 UDP 和 TCP 协议才可以使用该值。 RETURE 通知内核将该包跳过所有的规则,直接到达所有链的链尾。
在 Linux 系统 IP 链的转发链上可以配置 IP 伪装。实际上,IP 伪装是一个比包过滤策略更安全的解决方案,它不仅能够提供一种安全机制,还 同时解决了 Internet 中 IP 地址资源不足的问题。IP 伪装使一台计算机在访问 Internet 时,能够将本台机器的真正 IP 地址伪装成其它地址。如果连 接到 Internet 上的一台主机具有 IP 伪装功能,则这台机器不管是通过局域网,还是 PPP 拨号都可以与 Internet 连接。尽管在使用 PPP 时,这样 的主机根本没有自己正式的 IP 地址。这说明可以将一台主机隐藏在一个网关后面来访问 Internet,使得这台主机既实现了对 Internet 的访问,又实 现了其访问对外界的不可见性(即隐藏性)。显然,这种隐藏性使得系统非常安全,因为外界根本意识不到主机的存在,也就不可能对主机实施存 取操作,更不能入侵和破解。通常情况下,使用 IANA 保留的私有地址来进行伪装。 在防火墙转发链配置 IP 伪装后,内部网络上的主机向 Internet 发送访问 IP 包时,内核将源 IP 地址换成网关的 IP 地址,并记录被伪装的 IP 地 址后再转发该 IP 包。当这个包的 Internet 应答包从 Internet 进入网关时,内核执行去除 IP 伪装的操作,即将目的地址替换成内部地址。
通过适当的设置,IP 伪装可以在某个网段、某台主机、某个接口、某个协议甚至是某个协议的某些端口上实现,非常灵活。IP 伪装可以将内部 网络的细节对外部网络屏蔽掉,因此,IP 伪装提供了很好的安全性。
一般来说,安装相应版本的 Linux 系统时,系统会自动将 Ipchains 安装上。如果系统没有安装 IP 链软件包,可以通过光盘或从网上下载软件 包来安装。 如果是 rpm 包,使用如下命令安装: #rpm -ivh *.rpm
如果是.tar.gz 包,则先需要将压缩包解压: #tar xvfz *.tar.gz
然后再到解压后所在目录执行如下命令完成安装: #./configure #make
#make install
这样就将 IP 链防火墙成功安装在系统中。成功安装 Ipchains 后,接下来就是启动并配置包过滤规则。启用 Ipchains 需要完成如下操作:
◆ 手工修改/proc/sys/net/ipv4/ipforward 文件,将其内容置为 1。 ◆ 在/etc/rc.d/目录下用 touch 命令建立 rc.ipfwadm 文件。 ◆ 在/etc/rc.d 目录下的 rc.local 文件中加上下面这段代码: if [-f /etc/rc.ipfwadm];then /etc/rc.d/rc.ipfwadm;fi;
这使得以后所有 Ipchains 的配置命令都将在 rc.ipfwadm 文件里修改。
和 IPFW 一样,Ipchains 也是基于配置策略进行包过滤的。使用的策略方式也是两种:
(1)首先允许所有的包都可通过,然后禁止有危险的包;
(2)首先禁止所有的包,然后再根据所需要的服务允许特定的包通过。 Iptables
page 4
Iptables 是一个管理内核包过滤的工具,可以加入、插入或删除核心包过滤表格中的规则。实际上真正来执行这些过滤规则的是 Netfilter 。 Netfilter 是 Linux 核心中一个通用架构,它提供一系列的表(tables),每个表由若干链(chains)组成,而每条链中可以由一条或数条规则(rule) 组成。 图 Netfilter 的总体结构
相对于 2.2 内核提供的 IP 链来说,2.4 内核提供了更好的灵活性和可扩展性。2.4 内核中的防火墙并不是 2.2 内核的简单增强,而是一次完全 的重新实现,2.4 内核提供的防火墙软件包在结构上发生了非常大的变化。与 IP 链相比,2.4 内核提供的 Iptables 的检测点变成了 5 个,并在每个 检测点上登记需要处理的函数,登记通过 nf-register-hook()函数保存在全局变量 nf-hook 中来实现。当包到达此检测点时,实现登记的函数按照 事先定义好的优先级别来执行。相对于 2.2 内核提供的 IP 链来说,Iptables 实现的不仅仅是包过滤功能,而是通过 Netfilter 实现一整套框架结构, 在这个框架之上实现包过滤、NAT 等模块功能,从而提供更好的可扩展性和灵活性。
系统缺省的表为 filter,该表包含了 INPUT 链(输入链)、FORWARD 链(转发链)和 OUTPUT 链(输出链)。每一条链中可以定义一条或 数条规则,每一条规则都以如下格式定义:条件/处理方式。
当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件。如果满足,系统将根据该条规则所定义的方 法处理该数据包;如果不满足,则继续检查下一条规则。如果该数据包不符合该链中任一条规则,系统则会根据该链预先定义的策略(policy)来 处理该数据包。
和前面介绍的两个软件包一样,Iptables 及 Netfilter 也是内置在 Linux 内核中,可以将相应的软件包编译到内核中,从而完成 Iptables 防火墙 的安装。Netfilter 框架能够在内核 2.3.5 及以上版本实现。在将软件包重新编译进内核时,要求选择和 Netfilter 相关的项目。这些项目通常都是位 于“Networking options”子项下。以 2.4.0 内核为例,应该选中的项目有:
[*] Kernel/User netlink socket [ ] Routing messages <*> Netlink device emulation [*] Network packet filtering (replaces ipchains) 在 “IP: Netfilter Configuration >”选中如下选项: <M> Connection tracking (required for masq/NAT) <M> FTP protocol support <M> IP tables support (required for filtering/masq/NAT) <M > limit match support <M> MAC address match support <M> Netfilter MARK match support <M> Multiple port match support <M> TOS match support <M> Connection state match support <M> Packet filtering <M> REJECT target support <M> Full NAT <M> MASQUERADE target support <M> REDIRECT target support <M> Packet mangling <M> TOS target support <M> MARK target support <M> LOG target support <M> ipchains (2.2-style) support <M> ipfwadm (2.0-style) support
上面最后两个项目可以不选,如果将其选中,则可以在 2.4 内核中使用 Ipchains 或 Ipfwadm。需要注意的是,Iptables 和 Ipchains/Ipfwadm 是 相对立的,在使用 Iptables 时就不能同时使用 Ipchains/Ipfwadm。选择完所需选项后,就可以执行编译操作了。编译成功后,这些模块文件都位于 目录/lib/modules/2.4.0/kernel/net/ipv4/netfilter 中。
编译 2.4.0 新内核时还应该注意,要在“Processor type and features”中选择与所用 CPU 相对应的、正确的 CPU 选项,否则新内核可能无法正 常工作。 成功安装 Iptables 后,不能直接使用 Iptables,还必须载入相关模块。使用以下命令载入相关模块:
#modprobe iptable_tables
modprobe 命令会自动载入指定模块及其相关模块。iptables_filter 模块会在运行时自动载入。
Iptables 实际上是一个操作过滤规则的工具。利用 Iptables 工具,可以对 Netfilter 中的链和规则进行操作。Iptables 使用与 IP 链基本相同的语 法和命令格式。除了对链和规则进行操作外,Iptables 还提供其它一些操作。如通过--source/
page 5
--src/-s 指定源地址;通过--destination/--dst/-s 指定目 的地址;通过--protocol/-p 选项指定协议,比如-p tcp;使用--in-interface/-i 或--out-interface/-o)指定网络接口;指定 IP 碎片等。这里不一一介绍 相关语法。读者可以从 HOWTO 文档获得相关内容。
下面笔者准备为大家推荐几款世界大牌的中高端产品,希望能助力企业用户完成企业网络安全建设的第一步。 (1)Check Point FireWall-1 v4.1 防火墙 参考价格:131000 元(无限用户). 大中型企业适用,世界大牌中高端防火墙(图一). 目前,防火墙从实现上 http://www.qqread.com/hardware/net-devices/buying/2007/04/y306264.html
Astaro Security Linux 防火墙用于管理内部网络与外部网络间的数据流量. 管理员可以控制每一个协议, 阻挡或允许对任何一个内部网络、 服务 器、 服务与用户群的访问. 防火墙对所有网上信息 (包头) 以及应用信息 (有效载荷) 进行检查, 以发现并阻挡可疑的数据流量.防火墙被安装在一个 单独的标准 PC 设备中, 并且他必须作为内部网络的唯一出口存在, 这样才能起到安全门卫的作用. 防火墙功能描述:
状态检测包过滤 (Stateful Packet Inspection)
Astaro Security Linux 通过检查网络信息包头来管理因特网与内部网络、服务器、用户之间的数据传输. 凭借易用的图形界面, 管理员可以非常 迅速地制定出规则, 通过协议或端口来阻挡或允许两个信息源与目的站点间的传输.
Astaro Security Linux 通过检查个人信息同时 Astaro Security Linux 也通过对正在进行的连接的结果追踪来发现对正常程序的攻击或干扰。 应用层深度的包过滤
Astaro Security Linux 的防火墙, 利用应用代理来扫描与应用程序相关的信息包传输内容 (有效载荷), 从而确保其与网络传输、 电子邮件、 DNS 及其它广泛的应用程序类型的规则相符. 安全代理
Astaro Secur Linux 为以下各种协议提供全面代理.
这些代理简化了管理, 它使管理员可以迅速简便地激活或取消协议与功能, 比如: 内容过滤、缓冲、白名单与黑名单、文件扩展过滤、和 MIME 错误检查. HTTP | DNS | SOCKS |
POP3 | Ident | SMTP
NAT 地址转换及地址伪装
动态与静态的网络地址转换 (NAT)和把内部 IP 地址隐藏在 "公共" IP 地址后可以有效阻止黑客从内部网络、服务器与用户获得信息. DoS 保护
Astaro Security Linux 阻止通常的 DoS 攻击,如 TCP SYN flood、ICMP flood、UDP flood、Smurf、Trinoo、和 IP 哄骗. 带宽控制和 QoS
管理员可以增加或减少特殊节点间不同信息传输类型的优先级, 保证关键数据传输的服务质量 (QoS). 详细的日志报告
Astaro Security Linux 为网络传输、连接、信息包过滤受袭、防火墙系统硬件使用及其他防火墙管理相关的信息提供具体的记录报告.
防火墙是 Astaro Security Linux 六大安全应用组建中的基础。它与诸如入侵保护和防病毒这样的应用模块协同工作, 在危及安全的信息侵害到 内部网络之前, 及
page 6
时、有效地将其阻挡. Astaro Security Linux 的六大安全应用软件不但方便管理, 而且管理费用也较低.
ChinaUnix.net:Linux 防火墙设计,有关 netfilter 的问题,欢迎各位提出宝贵意见。 - 网络安全. 其实我想实现的是:使用程序来能够自动的动态添 加或者删除规则,并且立即生效,而不用重启防火墙。 版主以及各位高手还有什么好建议希望能够教教我,非常 http://bbs.chinaunix.net/viewthread.php?tid=546068&page=3 Yahoo、eBay、CNN.com、Amazon、Buy.com 和 E*Trade 等著名商业网站连续遭到黑客攻击,造成了数以十亿美元的损失,向世人再一次 敲响了网络并不安全的警钟。防火墙作为一种网络或系统之间强制实行访问控制的机制,是确保网络安全的重要手段。目前社会上各种商业产品的 防火墙非常多,功能也大都很强。我们暂且不管这些防火墙产品的价格如何,由于它们在开发设计过程中注重的是产品的通用性、兼容性,考虑更 多的是市场和利润,因此对于某些特殊的应用就不一定很合适。如果用户能根据自己的实际需要,将防火墙设计的一般理论和方法与自己系统的具 体实践相结合,设计一些小而精、精而强的防火墙程序,则往往可以发挥出比花大价钱买来的通用型防火墙更好的作用。
由于篇幅所限,本文不可能对防火墙的一般理论和结构进行深入的讨论,因此仅以 Linux 系统为例,具体说明防火墙程序的设计方法。 一、 从程序设计角度看 Linux 网络
编写防火墙程序并不一定要求对 Linux 网络内核有多么深刻的理解,只是需要明白在网络内核中有这样一种机制,那就是内核可以自动调用用 户编写的防火墙程序,并根据这个防火墙程序返回的结果来决定对网络收发数据报的处理策略。 二、 怎样将自己编写的防火墙程序登记到内核中
我们已经知道内核在网络层中自动调用用户编写的防火墙程序。但有一个前提条件就是用户必须正确地将自己编写的防火墙程序登记到内核 中。
内核中提供了防火墙的登记和卸载函数,分别是 register_firewall 和 unregister_firewall,参见 firewall.c。 1、 register_firewall 函数原型如下:
int register_firewall(int pf,struct firewall_ops *fw) 返回值:0 代表成功,小于 0 表示不成功。 参数:
* 协议标志 pf,主要的取值及其代表的协议如下:
2 代表 Ipv4 协议,4 代表 IPX 协议,10 代表 Ipv6 协议等。 * 参数结构 fw 定义如下: struct firewall_ops{
struct firewall_ops *next;
int (*fw_forward)(struct firewall_ops *this, int pf,
struct device *dev, void *phdr, void *arg, struct sk_buff **pskb); int (*fw_input)(struct firewall_ops *this, int pf,
struct device *dev, void *phdr, void *arg, struct sk_buff **pskb); int (*fw_output)(struct firewall_ops *this, int pf,
struct device *dev, void *phdr, void *arg, struct sk_buff **pskb); int fw_pf;
int fw_priority; };
结构中 next 的域将由内核来修改,使其指向下一个防火墙模块。 fw_pf 域为协议标志,含义同上。
fw_priority 指定优先级,一般应大于 0。
fw_input、fw_output、fw_forward 是用户编写的防火墙函数模块,在接收到网络报和发送网络报时内核将调用这些模块,后面将详细讨论。 2、 unregister_firewall
page 7
unregister_firewall 的原型说明与调用方法同 register_firewall。 三、 防火墙函数模块的设计 1、 防火墙函数模块的返回值
返回值是至关重要的,内核将根据它来决定对网络数据报采取的处理策略。主要返回值及意义如下:
0 和 1 通知内核忽略该网络报。
-1 通知内核忽略该网络报,并发送不可达到的网络控制报(ICMP 报文)。 2 通知内核认可该网络报。 2、 各模块函数的入口参数 * 参数 this
指向 register_firewall 中的 fw 参数结构。 * 参数 pf
含义同 register_firewall 中的 pf 参数。 * 参数 dev
dev 是指向数据结构 device 的指针。在 Linux 系统中,每一个网络设备都是用 device 数据结构来描述的。在系统引导期间,网络设备驱动程 序向 Linux 登记设备信息,如设备名、设备的 I/O 基地址、设备中断号、网卡的 48 位硬件地址等,device 数据结构中包括这些设备信息以及设备 服务函数的地址。关于 device 结构的详细信息可参见 netdevice.h 头文件。 * 参数 phdr
该参数指向链路层数据报报头首址。 * 参数 arg
利用这个参数可以向内核传递信息,如重定向时的端口号。 * 参数 pskb
此参数是指向 sk_buff 结构指针的指针。在 Linux 中,所有网络数据的发送和接收都用 sk_buff 数据结构表示。在 sk_buff 数据结构中包含有对 应设备结构的 device 地址、传输层、网络层、链路层协议头地址等。关于 sk_buff 的定义可参见 skbuff.h 头文件。 3、防火墙程序示例
下面给出一个简单防火墙程序。在这里假设读者对以太协议、IP 协议、TCP 协议等常用协议有一定的了解。用命令行"gcc -Wall -O2 -c MyFirewall.c"进行编译,再用 insmod 命令加载程序后,系统将只响应外部网络用 TCP 协议的 80 端口所进行的访问。要让系统恢复原有功能,则 可用 rmmod 命令卸载该程序,源代码见网站 www.pccomputing.com.cn 上的同名文章。
// MyFirewall.c 2000 年 3 月 7 日编写 #ifndef __KERNEL__
# define __KERNEL__ //按内核模块编译 #endif
#ifndef MODULE
# define MODULE //按设备驱动程序模块编译 #endif
#include <linux/module.h> //最基本的内核模块头文件 #include <linux/sched.h>
#include <linux/kernel.h> //最基本的内核模块头文件 #include <linux/netdevice.h> #include <linux/ip.h> #include <linux/tcp.h> #include <linux/skbuff.h> #include <linux/proc_fs.h> #include <linux/if.h> #include <linux/in.h>
#include <linux/firewall.h>
page 8
#define SOL_ICMP 1
#define PERMIT_PORT 80 //只允许访问 TCP 的 80 端口
int zzl_input(struct firewall_ops *this,int pf,struct device *dev, void *phdr,void *arg,struct sk_buff **pskb) {//每当收到一个网络报时,此函数将被内核调用 struct tcphdr *tcph; //TCP 的头指针 struct iphdr *iph; //IP 头指针 struct sk_buff *skb=*pskb;
if (skb->protocol==htons(ETH_P_ARP)){ printk(" Permit a ARP Packet");
return FW_ACCEPT;//允许地址解析协议报 }
if(skb->protocol==htons(ETH_P_RARP)){ printk(" Permit a RARP Packet");
return FW_ACCEPT;//允许反向地址解析协议报 }
if(skb->protocol==htons(ETH_P_IP)) {
iph=skb->nh.iph;
if (iph->protocol==SOL_ICMP) {
printk(" Permit a ICMP Packet"); return FW_ACCEPT;//允许网络控制报 }
if(iph->protocol==SOL_TCP){ tcph=skb->h.th;
if(tcph->dest==PERMIT_PORT){
printk(" Permit a valid access");
return FW_ACCEPT;//允许对 TCP 端口 80 的访问 } } }
return FW_REJECT;//禁止对本计算机的所有其它访问 }
int zzl_output(struct firewall_ops *this,int pf,struct device *dev, void *phdr,void *arg,struct sk_buff **pskb) {//程序编写方法同 zzl_input 函数模块 printk(" zzl_output is called "); return FW_SKIP; }
int zzl_foreward(struct firewall_ops *this,int pf,struct device *dev, void *phdr,void *arg,struct sk_buff **pskb) {//程序编写方法同 zzl_input 函数模块 printk(" zzl_foreward is called "); return FW_SKIP; }
struct firewall_ops zzl_ops= { NULL,
zzl_foreward, zzl_input,
page 9
zzl_output, PF_INET, 01 };
int init_module(void) {
if(register_firewall(PF_INET,&zzl_ops)!=0) {
printk(" unable register firewall"); return -1; }
printk(" zzl_ops=%p",&zzl_ops); return 0; }
void cleanup_module(void) {
printk("unload ");
unregister_firewall(PF_INET,&zzl_ops); }
巧妙利用 Linux 操作系统 IP 伪装防黑 www.hacker.com.cn 黑客防线. 防火墙可分为几种不同的安全等级。在 Linux 中,由于有许多不同的防火墙 软件可供选择,安全性可低可高,最复杂的软件可提供几乎无法渗透的保护能力。不过,Linux 核心本身内建了一种称作“伪装” http://www.hacker.com.cn/article/list.asp?id=4585
防火墙可分为几种不同的安全等级。在 Linux 中,由于有许多不同的防火墙软件可供选择,安全性可低可高,最复杂的软件可提供几乎无法渗 透的保护能力。不过,Linux 核心本身内建了一种称作“伪装”的简单机制,除了最专门的黑客攻击外,可以抵挡住绝大部分的攻击行动。
当我们拨号接连上 Internet 后,我们的计算机会被赋给一个 IP 地址,可让网上的其他人回传资料到我们的计算机。黑客就是用你的 IP 来存取 你计算机上的资料。 Linux 所用的“IP 伪装”法, 就是把你的 IP 藏起来, 不让网络上的其他人看到。 有几组 IP 地址是特别保留给本地网络使用的, Internet 骨干路由器并不能识别。像作者计算机的 IP 是 192.168.1.127,但如果你把这个地址输入到你的浏览器中,相信什么也收不到,这是因为 Internet 骨干是不认得 192.168.X.X 这组 IP 的。在其他 Intranet 上有数不清的计算机,也是用同样的 IP,由于你根本不能存取,当然不能侵入或破解了。
那么,解决 Internet 上的安全问题,看来似乎是一件简单的事,只要为你的计算机选一个别人无法存取的 IP 地址,就什么都解决了。错!因为 当你浏览 Internet 时,同样也需要服务器将资料回传给你,否则你在屏幕上什么也看不到,而服务器只能将资料回传给在 Internet 骨干上登记的合 法 IP 地址。
“IP 伪装”就是用来解决此两难困境的技术。当你有一部安装 Linux 的计算机,设定要使用“IP 伪装”时,它会将内部与外部两个网络桥接起来, 并自动解译由内往外或由外至内的 IP 地址,通常这个动作称为网络地址转换。
实际上的"IP 伪装"要比上述的还要复杂一些。基本上,“IP 伪装”服务器架设在两个网络之间。如果你用模拟的拨号调制解调器来存取 Internet 上的资料,这便是其中一个网络;你的内部网络通常会对应到一张以太网卡,这就是第二个网络。若你使用的是 DSL 调制解调器或缆线调制解调 器(Cable Modem),那么系统中将会有第二张以太网卡,代替了模拟调制解调器。而 Linux 可以管理这些网络的每一个 IP 地址,因此,如果你有一 部安装 Windows 的计算机(IP 为 192.168.1.25),位于第二个网络上(Ethernet eth1)的话,要存取位于 Internet(Ethernet eth0)上的缆线调 制解调器(207.176.253.15)时,Linux 的“IP 伪装”就会拦截从你的浏览器所发出的所有 TCP/IP 封包,抽出原本的本地地址(192.168.1.25),再 以真实地址
page 10
(207.176.253.15)取代。接着,当服务器回传资料到 207.176.253.15 时,Linux 也会自动拦截回传封包,并填回正确的本地地址 (192.168.1.25)。
Linux 可管理数台本地计算机(如 Linux 的“IP 伪装”示意图中的 192.168.1.25 与 192.168.1.34),并处理每一个封包,而不致发生混淆。作者 有一部安装 SlackWare Linux 的老 486 计算机,可同时处理由四部计算机送往缆线调制解调器的封包,而且速度不减少。
在第二版核心前,“IP 伪装”是以 IP 发送管理模块(IPFWADM,IP fw adm)来管理。第二版核心虽然提供了更快、也更复杂的 IPCHAINS, 但仍旧提供了 IPFWADM wrapper 来保持向下兼容性,因此,作者在本文中会以 IPFWADM 为例,来解说如何设定“IP 伪装”(您可至 http: //metalab.unc.edu/mdw/HOWTO/IPCHAINS-HOWTO.html 查询使用 IPCHAINS 的方法,该页并有“IP 伪装”更详尽的说明)。
另外,某些应用程序如 RealAudio 与 CU-SeeME 所用的非标准封包,则需要特殊的模块,您同样可从上述网站得到相关信息。
作者的服务器有两张以太网卡,在核心激活过程中,分别被设定在 eth0 与 eth1。这两张卡均为 SN2000 式无跳脚的 ISA 适配卡,而且绝大多 数的 Linux 都认得这两张卡。作者的以太网络初始化步骤在 rc.inet1 中设定,指令如下: IPADDR="207.175.253.15"
#换成您缆线调制解调器的 IP 地址。 NETMASK="255.255.255.0" #换成您的网络屏蔽。 NETWORK="207.175.253.0" #换成您的网络地址。
BROADCAST="207.175.253.255" #换成您的广播地址。
GATEWAY="207.175.253.254" #换成您的网关地址。
#用以上的宏来设定您的缆线调制解调器以太网卡
/sbin/ifconfig eth0 ${IPADDR} broadcast $ {BROADCAST} netmask ${NETMASK}
#设定 IP 路由表
/sbin/route add -net ${NETWORK} netmask $ {NETMASK} eth0 #设定 intranet 以太网络卡 eth1,不使用宏指令
/sbin/ifconfig eth1 192.168.1.254 broadcast 192.168.1.255 netmask 255.255.255.0
/sbin/route add -net 192.168.1.0 netmask 255.255.255.0 eth1 #接着设定 IP fw adm 初始化
/sbin/ipfwadm -F -p deny #拒绝以下位置之外的存取 #打开来自 192.168.1.X 的传送需求
/sbin/ipfwadm -F -a m -S 192.168.1.0/24 -D 0.0.0.0/0 /sbin/ipfwadm -M -s 600 30 120
就是这样!您系统的"IP 伪装"现在应该可以正常工作了。如果您想得到更详细的信息,可以参考上面所提到的 HOWTO,或是至 http: //albali.aquanet.com.br/howtos/Bridge+ Firewall-4.html 参考 MINI HOWTO。另外关于安全性更高的防火墙技术,则可在 ftp: //sunsite.unc.edu/pub/Linux/docs/HOWTO/Firewall-HOWTO 中找到资料。
半年来,56K 模拟数据卡的价格突然跌降了不少。不过,大多数新的数据卡,其实是拿掉了板子上的控制用微处理器,因此会对系统的主 CPU 造成额外的负荷,而 Linux 并不支持这些“WinModem”卡。虽然 Linux 核心高手们,还是有能力为 WinModem 卡撰写驱动程序,但他们也很明白, 为了省 10 元美金而对系统效能造成影响,绝对不是明智之举。
请确定您所使用的 Modem 卡,有跳脚可用来设定 COM1、COM2、 COM3 与 COM4,如此一来,这些数据卡才可在 Linux 下正常工作。您 可在 http: //www.o2.net
page 11
/~gromitkc/winmodem.html中找到与 Linux 兼容的数据卡的完整列表。
当作者在撰写本篇文章时,曾花了点时间测试各种不同的数据卡。Linux 支持即插即用装置,所以我买了一块由 Amjet 生产的无跳脚数据卡, 才又发现另一个令人困扰的问题。
作者测试用的 PC 是一部老旧的 486,用的是 1994 年版的 AMI BIOS。在插上这块即插即用数据卡后,计算机便无法开机了,画面上出现的是 “主硬盘发生故障”(Primary hard disk failure)。经检查,发现即插即用的 BIOS 居然将原应保留给硬盘控制器的 15 号中断,配给了数据卡。最后 作者放弃了在旧计算机上使用即插即用产品, 因为不值得为这些事花时间。 所以, 请您注意在购买数据卡之前, 先看清楚是否有调整 COM1 到 COM4 的跳脚。
在作者的布告板(http: //trevormarshall.com/BYTE/)上,看到有几位朋友询问是否可以用多条拨号线来改善 Internet 的上网速度。这里最好 的例子是 128K ISDN,它同时运用两条 56K 通道,以达到 128K 的速度。当 ISP 提供这样的服务时,其实会配置两条的线路连到同一个 IP 上。
您可以看到,虽然 Linux 上有 EQL 这类模块,可让您在计算机上同时使用两块数据卡,但除非 ISP 对两组拨号连线提供同一个 IP,否则这两 块数据卡也只是对送出资料有帮助而已。
如果您拨接的是一般的 ISP PPP 线路,那么您会得到一个 IP 地址,从服务器回传的封包才能在数百万台计算机中找到您;而您每次拨入 ISP 时,都会得到一个不同的 IP 地址。
你的浏览器所送出的封包中,也包含供服务器资料回传的本地 IP 地址。EQL 可将这些外传的封包,分散到不同的 ISP 线路上,但当资料回传 时,却只能通过一个 IP 地址接收,也就是浏览器认为正在使用的那个地址。若是使用 ISDN,那么 ISP 会处理这个问题;一些 ISP 会为多组线路的 拨号接入提供相应的 IP 地址,但价钱非常昂贵。
在追求速度时,请别忽略了 Linux 防火墙的效率。在作者办公室有六位使用者通过“IP 伪装”防火墙,去存取一部 56K 模拟调制解调器,工作情 况十分良好,只有在有人下载大文件时速度才会变慢。在您决定要加装多条 ISP 拨号线之前,可以先架设一部"IP 伪装"服务器试试。Windows 处理 多重 IP 的方式并非十分有效率,而将 Windows 网络与调制解调器隔开,效能的增进将会让您惊讶不已。
简而言之,Linux 所用的“IP 伪装”法,就是把你的 IP 藏起来,不让网络上的其他人看到。
Linuxeden.com-- Linuxeden 新闻文档资料教程 Linux 伊甸园 防火墙 Linux 伊甸园Linuxeden.com-- Linuxeden 新闻文档资料教程 Linux 伊甸园 / 系统安全 / 防火墙 Linux 数据包捕获模块包过滤 (1)全程动态包过滤 本防火墙 要在 Linux 下实现全程动态包过滤功能,通过分析数据包的地址、协议、端口对任何网络连接当前状态进行访问控制,
http://www.linuxeden.com/doc/23161.html 一、防火墙概述
网络防火墙技术是一种用来加强网络之间访问控制,防止外部网络用户以非法手段通过外部网络进入内部网络,访问内部网络资源,保护内部 网络操作环境的特殊网络互联设备。它对两个或多个网络之间传输的数据包按照一定的安全策略来实施检查,以决定网络之间的通信是否被允许, 并监视网络运行状态。?
根据防火墙所采用的技术不同,可以将它分为四种基本类型:包过滤型、网络地址转换—NAT、代理型和监测型。包过滤型产品是防火墙的初 级产品,其技术依据是网络中的分包传输技术。包过滤技术的优点是简单实用,实现成本较低,在应用环境比较简单的情况下,能够以较小的代价 在一定程度上保证系统的安全。网络地址转换是一种用于把 IP 地址转换成临时的、外部的、注册的 IP 地址标准。它允许具有私有 IP 地址的内部网 络访问因特网。
代理型防火墙也可以被称为代理服务器,它的安全性要高于包过滤型产品,并已经开始向应用层发展。代理型防火墙的优点是安全性较高,可 以针对应用层进行侦测和扫描,对付基于应用层的侵入和病毒都十分有效。其缺点是对系统的整体性能有较
page 12
大的影响,而且代理服务器必须针对客 户机可能产生的所有应用类型逐一进行设置,大大增加了系统管理的复杂性。
监测型防火墙是新一代的产品,能够对各层的数据进行主动的、实时的监测,在对这些数据加以分析的基础上,监测型防火墙能够有效地判断 出各层中的非法侵入。同时,这种检测型防火墙产品一般还带有分布式探测器,这些探测器安置在各种应用服务器和其他网络的节点之中,不仅能够 检测来自网络外部的攻击,同时对来自内部的恶意破坏也有极强的防范作用。监测型防火墙在安全性上已超越了包过滤型和代理服务器型防火墙, 但其实现成本较高。基于对系统成本与安全技术成本的综合考虑,用户可以选择性地使用某些监测型技术。 二、基于 Linux 个人防火墙总体设计
本文研究的是防火墙系统的软硬件环境以及该防火墙的开发步骤和所要实现的功能,最后重点对该防火墙系统所需要的硬件和软件平台原理进 行说明。尽管所有 Linux 系统都自带防火墙内核程序,但需要用户进行配置才能起到保护网络安全的目的。
1、防火墙系统总体设计
Linux 系统下实现软件防火墙的设计与应用,实质上就是基于主机的网络安全解决方案。因此,我们完全可以选择合适的软硬件平台和相应的 防火墙设计原理,自己开发出一套能够满足要求的防火墙系统。
归纳起来这里要实现的防火墙需要满足两大要求:第一,必须能够对主机提供安全保护,即对主机与局域网以外的主机进行数据传输时实施安 全保护;第二,必须能够提供良好的人机接口界面,具有容易操作、容易管理的优点。
考虑到现有硬件设备的,在保证满足实验要求的环境下尽可能地简化了实验环境。因为该防火墙系统是基于主机设计的,故只需要一个联 网的主机即可进行实验。该系统是在 Linux 环境下用 C 语言实现包过滤型软件防火墙的设计与应用,采用 Kylix 开发工具进行界面设计和数据库连 接。
基于 Linux 的个人防火墙系统主要具有以下功能:
(1)全程动态包过滤 本防火墙要在 Linux 下实现全程动态包过滤功能,通过分析数据包的地址、协议、端口对任何网络连接当前状态进行访 问控制,从而提高系统的性能和安全性。
(2)提供日志审计 本防火墙配备了日志记录系统和查询工具,用于记录系统管理、系统访问及针对安全策略的网络访问情况。
(3)防火墙数据库的备份 本防火墙制作防火墙过滤数据库,并且管理员可以能动地对该数据库进行设置。
三、基于 Linux 的数据包捕获模块结构与原理分析
本节就监控层数据包捕获模块的结构特性进行探讨,并详细论述其原理,且对实现数据包捕获功能的程序的一些重要函数进行说明。 1、数据包捕获模块结构
数据包捕获模块用于监视和验证网络流量情况,它可以截取或者阅读网络上 OSI 协议模型中各个协议层次上的数据包。
本文所设计的数据包捕获程序可以捕获通过原始套接口(Socket)的原始数据包(Raw Packet),当一个数据包到达网络接口时,数据包捕获程序 就直接从缓存区读取捕获的数据包,以供数据分析和处理时调用。数据捕获模块的结构如图 1 所示: TCP/IP 网络 ↓
数据捕获 网卡设置 获取数据包
得到数据包头信息
图 1 数据捕获程序结构图 2、数据包捕获模块原理分析 (1)网卡设置原理
在一个实际的系统中,数据的收发是由网卡来完成的,网卡接收到传输来的数据
page 13
,网卡内的程序接收数据帧的目的 MAC 地址,根据计算机上 的网卡驱动程序设置的接收模式判断该不该接收,认为不该接收就丢掉不管。而对于网卡来说一般有四种接收模式:广播模式组播模式、直接方式、 混杂模式。数据包捕获程序首先使网络接口(网卡)处于混杂状态,从而可截获网络上的内容,并且通过相应的软件处理,可以实时分析这些数据的 内容,为数据包过滤作准备。 (2)基本函数说明
本文中在 Linux 主机上用 C 语言编写数据包捕获程序,所编写的程序中用到很多 Linux 中的预定义函数,在此节将对这些基本函数的功能和使 用特点进行说明。 1)ioctl 函数定义
ioctl()函数非常庞杂,它可以控制各种文件的属性。它用于控制特殊文件的底层设备参数,这些特殊文件通常是指终端、套接字和接口。ioctl 函数原型为: int ioctl(int handle,int cmd[,int *argdx,int argcx]); 2)socket 函数定义
常用的 Socket 类型有两种:流式 Socket(SOCK_STREAM)和数据包式 Socket (SOCK_DGRAM)。流式是一种面向连接的 Socket,针对面向 连接的 TCP 服务应用;数据报式 Socket 是一种无连接的 Socket,针对无连接的 UDP 服务应用。Socket 函数原型为:
int socket(int domain, int type,int protocol); 3)recvfrom()函数定义
用 recvfrom()函数来实现接收数据包,recvfrom()是具备“阻塞式 I/O”特性的函数,能够在没有数据包到达的情况下暂时挂起等待,直至接收到 数据包后,再激活转入下一步处理。recvfrom()函数的原型为:
int recvfrom(SOCKET s,char FAR *buf,int len,int flags,struct sockaddr FAR *from,int *fromlen);
本函数从已连接套接口上接收数据,并捕获数据发送源的地址。对于 SOCK_STREAM 类型的套接口,最多可以接收缓冲区大小个数据。如果 套接口被设置为线内接收带外数据(选项为 SO_OOBINLINE),且有带外数据未读入,则返回带外数据。应用程序可通过调用 ioctlsocket()的 SOCATMARK 命令来确定是否有带外数据待读入。对于 SOCK_STREAM 类型套接口,忽略 from 和 fromlen 参数。 4)一些“字节顺序”转换函数
因为网络和主机采用的存储字节时内存顺序安排方式的差异,就存在“字节顺序”的问题。在网络环境下存储时,高位字节存放在内存的起始位 置,而低字节则存放在较高的位置。主机形式的存放顺序恰好相反,低位字节存放在内存的起始位置。这就需要以下相应的字节顺序转换函数:
inet_ntoa():将 32 位的网络二进制数值转换为可读十进制形式的带点分割符的 IP 地址。
inet_addr():将带有分割符的 IP 地址转换为 32 位的 unsigned long 的格式。
ntohs():将网络字节顺序转换为 32 位的主机字节顺序。 ntohl():将网络字节顺序转换成 16 位的主机字节顺序。
htonl():将 32 位 u_long 的值由主机字节顺序转换为网络字节顺序。 htons():将 16 位 u_long 的值由主机字节顺序转换为网络字节顺序。
本文设计的数据捕获程序需要使用 SOCK_PACKET 设备,SOCK_PACKET 只在基于 Linux 的操作系统中有效定义。为此,美国洛仑兹伯克 利国家实验室编写了专用于数据包截获的 API 函数库“Libpcap”。 该函数的设计目标是统一不同系统上所提供的用于数据包截获的不同类型接口, 并 使得类似的高层应用程序的编写和移植变得简单有效,不再需要对每一个应用都使用不同的依赖于具体系统的数据包截获模块。 Linux 防火墙配置初级入门 防火墙配置初级入门-选择「信任的设备」中的任何一个将会允许你的系统接受来自这一设备的全部交通;它不受防火墙规则的。例如,如果你在运行一个局域网, 但是通过 PPP 拨号连接到了互联网上,你可以选择
page 14
「eth0」,而后所有来自你的局域网的交通将会被允许。 http://www.cnpaf.net/Class/firewall/0611109593544417751.html
Linux 防火墙配置初级入门| 中国网管联盟 防火墙配置初级入门 Linux 防火墙配置初级入门. 作者:bitsCN 整理 来源:Chinaitlab 收集整理 点击: 日期:2006-03-22. RedHat Linux 为增加系统安全性提供了防火墙保 护。防火墙存在于你的计算机和网络之间,用来判定网络中的远程用户有权访问你的计算机上的哪些资源。 http://www.bitscn.com/netpro/firewall/200704/101690.html
RedHat Linux 为增加系统安全性提供了防火墙保护。防火墙存在于你的计算机和网络之间,用来判定网络中的远程用户有权访问你的计算机 上的哪些资源。一个正确配置的防火墙可以极大地增加你的系统安全性。 为你的系统选择恰当的安全级别。 「高级」
如果你选择了「高级」 ,你的系统就不会接受那些没有被你具体指定的连接(除了默认设置外)。只有以下连接是默认允许的: DNS 回应
DHCP — 任何使用 DHCP 的网络接口都可以被相应地配置。 如果你选择「高级」,你的防火墙将不允许下列连接:
1.活跃状态 FTP(在多数客户机中默认使用的被动状态 FTP 应该能够正常运行。)
2.IRC DCC 文件传输 3.RealAudio
4.远程 X 窗口系统客户机
如果你要把系统连接到互联网上,但是并不打算运行服务器,这是最安全的选择。如果需要额外的服务,你可以选择 「定制」 来具体指定允 许通过防火墙的服务。 注记:如果你在安装中选择设置了中级或高级防火墙,网络验证方法(NIS 和 LDAP)将行不通。 「中级」
如果你选择了「中级」,你的防火墙将不准你的系统访问某些资源。访问下列资源是默认不允许的:
1.低于 1023 的端口 — 这些是标准要保留的端口,主要被一些系统服务所使用,例如: FTP 、 SSH 、 telnet 、 HTTP 、和 NIS 。
2.NFS 服务器端口(2049)— 在远程服务器和本地客户机上,NFS 都已被禁用。
3.为远程 X 客户机设立的本地 X 窗口系统显示。
4.X 字体服务器端口( xfs 不在网络中监听;它在字体服务器中被默认禁用)。
如果你想准许到 RealAudio 之类资源的访问,但仍要堵塞到普通系统服务的访问,选择 「中级」 。你可以选择 「定制」 来允许具体指定的 服务穿过防火墙。 注记:如果你在安装中选择设置了中级或高级防火墙,网络验证方法(NIS 和 LDAP)将行不通。 「无防火墙」
无防火墙给予完全访问权并不做任何安全检查。安全检查是对某些服务的禁用。建议你只有在一个可信任的网络(非互联网)中运行时,或者 你想稍后再进行详细的防火墙配置时才选此项。
选择 「定制」 来添加信任的设备或允许其它的进入接口。 「信任的设备」
选择「信任的设备」中的任何一个将会允许你的系统接受来自这一设备的全部交通;它不受防火墙规则的。例如,如果你在运行一个局域 网,但是通过 PPP 拨号连接到了互联网上,你可以选择「eth0」,而后所有来自你的局域网的交通将会被允许。把「eth0」选为“信任的”意味着所 有这个以太网内的交通都是被允许的,但是 ppp0 接口仍旧有防火墙。如果你想某一接口上的交通,不要选择它。
page 15
建议你不要将连接到互联网之类的公共网络上的设备定为 「信任的设备」 。 「允许进入」
启用这些选项将允许具体指定的服务穿过防火墙。注意:在工作站类型安装中,大多数这类服务在系统内没有被安装。 「DHCP」
如果你允许进入的 DHCP 查询和回应,你将会允许任何使用 DHCP 来判定其 IP 地址的网络接口。DHCP 通常是启用的。如果 DHCP 没有 被启用,你的计算机就不能够获取 IP 地址。 「SSH」
Secure(安全)SHell(SSH)是用来在远程机器上登录及执行命令的一组工具。如果你打算使用 SSH 工具通过防火墙来访问你的机器,启用 该选项。你需要安装 openssh-server 软件包以便使用 SSH 工具来远程访问你的机器。 「Telnet」
Telnet 是用来在远程机器上登录的协议。Telnet 通信是不加密的,几乎没有提供任何防止来自网络刺探之类的安全措施。建议你不要允许进入 的 Telnet 访问。如果你想允许进入的 Telnet 访问,你需要安装 telnet-server 软件包。 「WWW (HTTP)」
HTTP 协议被 Apache(以及其它万维网服务器)用来进行网页服务。如果你打算向公众开放你的万维网服务器,请启用该选项。你不需要启 用该选项来查看本地网页或开发网页。如果你打算提供网页服务的话,你需要安装 httpd 软件包。
启用 「WWW (HTTP)」 将不会为 HTTPS 打开一个端口。要启用 HTTPS,在 「其它端口」 字段内注明。 「邮件 (SMTP)」
如果你需要允许远程主机直接连接到你的机器来发送邮件,启用该选项。如果你想从你的 ISP 服务器中收取 POP3 或 IMAP 邮件,或者你使用 的是 fetchmail 之类的工具,不要启用该选项。请注意,不正确配置的 SMTP 服务器会允许远程机器使用你的服务器发送垃圾邮件。 「FTP」
FTP 协议是用于在网络机器间传输文件的协议。如果你打算使你的 FTP 服务器可被公开利用,启用该选项。你需要安装 vsftpd 软件包才能 利用该选项。 「其它端口」
你可以允许到这里没有列出的其它端口的访问,方法是在 「其它端口」 字段内把它们列出。格式为: 端口:协议 。例如,如果你想允许 IMAP 通过你的防火墙,你可以指定 imap:tcp 。你还可以具体指定端口号码,要允许 UDP 包在端口 1234 通过防火墙,输入 1234:udp 。要指定多个 端口,用逗号将它们隔开。
窍门:要在安装完毕后改变你的安全级别配置,使用 安全级别配置工具 。 在 shell 提示下键入 redhat-config-securitylevel 命令来启动 安全 级别配置工具 。如果你不是根用户,它会提示你输入根口令后再继续。
防火墙( ) 防火墙- 技术应用使用 IP 链建立 Linux 防火墙(2) - Linux 防火墙 技术应用 豆豆网 使用 IP 链建立 Linux 防火墙. http://tech.ddvip.com 2006 年 04 月 03 日 10:31:00. ■跳转(Jump):. 我们需要了解的最后一个选项是-j 命令。这 个命令告诉防火墙,如果一项规则命令与正在输入的数据相匹配时,防火墙应该采取什么步骤。在大多数情况下,这种步骤 http://tech.ddvip.com/2006-04/11440314603175_2.html
电子书下载电子书下载 网络通信与网络安全技术使用 IPCHAINS 建立 Linux 防火墙
虽然 Linux 操作系统具有很多优点,其安全性也较高,但是你不应当由此产生一种虚假的安全感,因为你的 Linux 系统的安全性仍旧可能受到 损害。现在就让我们来看看如何通过使用 IP 链(IPchains)来建立 Linux 系统的防火墙,保护你的系统不受侵害。
http://www.shubulo.com/archiver/?tid-29836.html
虽然 Linux 操作系统具有很多优点,其安全性也较高,但是你不应当由此产生
page 16
一种虚假的安全感,因为你的 Linux 系统的安全性仍旧可能受到 损害。现在就让我们来看看如何通过使用 IP 链(IPchains)来建立 Linux 系统的防火墙,保护你的系统不受侵害。
先假设你已经具备了一些关于因特网的基本知识。应当说,熟悉像 IP 地址、TCP 端口和网络传输数据之类的词汇是很有用处的。对防火墙有 一个大概的了解也是十分有必要的。 ■命令:
我们需要确立起一系列的规则,这样 IP 链才能进入来来往往的网络路径。每一条规则都被置于三链之一,这三个链分别为:存放输入数据的 输入链、存放输出数据的输出链和传输链。
每增加一条规则,都要从 IP 链开始,并且要增加下面的某些或全部步骤。附加(Append)、删除(Delete)、插入(Insert)和替换(Replace),这些 命令通常是跟在起始的 IP 链命令之后,并且指示程序应当把规则命令添加在哪条链上以及如何添加。添加时,以-A、-D、- I,或者-R 开始,这些 字母的后面再加上链的名称(输入链或输出链)。
当你要使用插入命令时,必须在要加入该命令的位置上,在链的名称后面,具体指定行号。
在使用替换命令时,需要指定被替换的行号,使用删除命令的时候,也必须指定删除的行号。
在使用删除选项时,无须在行号后面再输入什么别的内容。你只要键入 ipchains -L,就可以发现命令所作用的行号。 ■协议(Protocol):
在这里你要针对每一条规则命令具体地指明某种协议。在大多数情形下,使用 TCP/IP 协议。
也有可能你不想让你的计算机对另一台计算机发出的 Ping 信号做出反应。为了做到这一点,需要具体指定 ICMP(互联网控制报文协议)。在 具体地指定某个协议的时候,要使用-p 命令,如:-p icmp。 ■源(Source):
源可以确定从某个特定的 IP 地址而来的路径以及使用-s 命令的端口。如果你知道一个标准的 IP 地址,就可以直接使用 IP 地址,或者干脆指 定一个域名(比如 www.ccidnet.com)。假如你想指定任意一个地址,不妨用 0.0.0.0/0。
我们可以在 IP 地址的后面用数字来指定某一个端口(比如 110),也可以用服务器的名称(pop3)来指定某一个端口。使用冒号可以将两个 端口数字分隔开,这样就能指定一连串的端口。例如: -s mail.mailserver.com pop3 -s 127.0.0.1 139:164 ■目的(Destination):
用法与源地址是一样的,只要指定目的地址和端口即可。 ■跳转(Jump):
我们需要了解的最后一个选项是-j 命令。这个命令告诉防火墙,如果一项规则命令与正在输入的数据相匹配时,防火墙应该采取什么步骤。在 大多数情况下,这种步骤就是接受或拒绝。举个例子吧,假如你想拒绝某组与命令相符的数据时,防火墙就跳转至拒绝。如果一组数据不符合某条 命令规则,该数据就会往前进入下一个命令。如果没有任何规则符合这组数据的话,数据就会在缺省的状态下被拒绝。
当然还有一些其它的选项和命令能够与 IP 链的命令一起使用。假如你想深入了解更多的信息,可以在命令行栏键入 ipchains -h。 建立防火墙
建立 Linux 系统的防火墙的核心部分就是在你接近你想要访问的服务器的同时,又要阻止其它服务器接近你的系统。这里我们提出一些忠告。
首先,你在建立你的防火墙时尽量对所有的“拒绝”规则使用-I 命令。当某条规则将一组数据挡在外面的时候,就会产生一行信息,加入到你的 核心程序信息记录中(变量/记录/核心程序/信息)。你读一读这个文件就能明白为什么一组数据会被挡
page 17
在外面。一条记录详细说明了被采取的步骤、 能解释某条规则源目的链、源地址和端口以及目的地址和端口,因而你能运用这些信息来调整防火墙。可以按照你想得到的方式拥有任何东西,这 时就不再需要-I 命令了。
其次,建立防火墙可以挡住所有流入的 Syn 数据。Syn 数据是用于启动链接的数据组,但它们不应该出现在大部分的桌面系统上。可以这样运 用-y 命令: ipchains -I input 1 -p tcp -y -j DENY 你还可用下面这条命令挡住 ICMP 数据: ipchains -I input 2 -p icmp -j DENY
把这两条规则放在最前面,就能保证系统不会随便接收这些数据。下一步,该挡住像 ftp、telnet、smtp 和 pop3 之类的一些常用的服务器端口: ipchains - A input -p tcp - s 0.0.0.0/0 ftp DENY ipchains - A input -p tcp - s 0.0.0.0/0 telnet DENY ipchains - A input -p tcp - s 0.0.0.0/0 smtp DENY ipchains - A input -p tcp - s 0.0.0.0/0 pop3 DENY ipchains - A input -p tcp - s 0.0.0.0/0 nntp DENY
如果在连接发送邮件的服务器时出现问题,可以在 smtp 和 pop3 DENY 的规则前面插入一条规则,这样便能使所谓的 DENY 规则失去作用。 不过要保证这条规则的明确性,因为这样才能使得 DENY 规则失效。通常来说,明确地指明一个 IP 地址是个不错的做法:
ipchains - I 3 input - 1 - p tcp - s mail.mailserver.com pop3 - j ACCEPT
ipchains - I 4 input - 1 - p tcp - s mail.mailserver.com smtp - j ACCEPT
可以用你发送邮件的服务器的地址替代域名“mail.mailserver.com”, 对于一个新的服务器或者任何一个链接有困难的 FTP 网址, 都可以这样做。
虽然这些规则是一些基本性的,但有助于建立一个安全有效的防火墙。我们可以在像 Gibson Research Center (http://www.grc.com) 和 DSL Reports (http://www.secure-me.net/) 之类的网站检测防火墙的安全和有效性。上面两个网站都可以免费提供关于因特网的端口查询。一旦找到了 有用的规则,就用 ipchain-save 命令将这些规则保存到某个文件中。
当重新启动系统的时候就可以运用这个保存了规则的文件。键入 ipchains-save/etc/ipchains.rules 就能保存防火墙设置数据。在重新启动你的 系统后保持有关防火墙的设置时,请键入 ipchains-restore/etc/ipchains.rules 。当你的系统断电或者重新启动时,Linux 系统不会自动保存这些设 置数据。
系统的防御:制作软盘里的防火墙 制作软盘里的防火墙制作软盘 Linux - Linux 系统的防御 制作软盘里的防火墙 技术应用子站 制作软盘 Linux - Linux 下的防火墙(firewall)是指一个由软件或和硬件设备组合而成,处于企业或网络群体计算机与外界通道(Internet)之间,外 界用户对内部网络访问及管理内部用户访问外界网络的权限。主要是控制对受保护的网络(即网点)的往返访问. http://eindustri.cn/kdum/25427.html
Linux 宝库 深入分析 Linux 防火墙 宝库上一篇:软盘里的 Linux 防火墙 ・下一篇:使用 IPtables 搭建防火墙的规则 关于网络安全的研究分析中,防火墙(Firewall)是被经常强调的重点, 它基本功能是过滤并可能阻挡本地网络或者网络的某个部分与 Internet 之间的数据传送(数据包)。 http://www.linuxmine.com/19295.html
Linux 下的防火墙(firewall)从诞生到现在,防火墙主要经历了四个发展阶段:第一阶段:基于路由器的防火墙;第二阶段用户化的防火墙工具 套;第三阶段:建立在通用操作系统上的防火墙;第四阶段:具有安全操作系统的防火墙。目前世界上大多数防火墙供应商提供的都是具有安全操 作系统的软硬件结合的防火墙,象著名的 NETEYE、NETSCREEN、TALENTIT 等。在 Linux 操作系统上的防火墙软件也很多,有些是商用版本的 防火墙,有的则是完全免费和公开源代码的防火墙。大多数 Linux 教程都提到了如何在 Linux 平台中使用 IPCHAINS 来构筑防火墙。
page 18
设置和管理 Linux 操作系统中的防火墙是网络系统管理员的重要工作。一般情况下,配置防火墙确实是一件需要很高技术的工作。无论是商业 版本的防火墙还是完全免费的防火墙都需要在 Linux 平台中进行软硬件的配置。
有没有能随身携带的,使用方便的 Linux 防火墙呢?答案是有的,现在我就向大家介绍一种能装在普通软盘里面的 Linux 防火墙。这套名字叫 floppyfw 的 Linux 防火墙能存放在一张普通的软盘里,并的在 RAM 内存中运行。使用它能启动计算机,利用 ipchains 过滤掉无用的 IP 包, 还可以使用它来配置 IP 伪装(IP masquerade),监视端口,通过它可以使用主机对其他网络中的计算机进行远程控制。Floppyfw 功能十分强大, 但是它运行所需要的硬件环境却非常低,除了需要一张软盘之外,只要 8MB 的内存就足够了。
Floppyfw 需要的最的硬件设备如下: 最少 8MB 内存 3.5"软驱 显示卡 键盘 显示器
有的 Linux 系统中装两块网卡,能使得 Floppyfw 正常工作,这就需要每一块网卡的 IRQ 和内存地址都正确无误。在 Linux 系统中配置双网卡 相信很多系统管理员都是轻车熟路的。
Floppyfw 支持以下的网卡。 3Com 3c509
NE2000 compatibles Tulip-based
Intel EtherExpress PCI 关于软件:
把 Floppyfw 做成一张可以引导的软磁盘是一件非常简单的事情。不过你要首先到 http://www.zelow.no/floppyfw/download/ 把 Floppyfw 下载 到计算机的硬盘上。Floppyfw 最新的版本应该是 1.0.5 或者更高,Floppyfw 是一个镜像文件,可以使用
# dd if=floppyfw-1.0.5.img of=/dev/fd0 bs=72k 这个命令把镜像文件解压并写到准备好的软盘上。 关于设置:
需要注意的是,一般的软盘格式化以后都是 DOS(FAT)的格式。为了能顺利的启动 Linux 系统,我们需要在这张软盘上作一些修改。建议使 用其他的计算机来修改这张软盘,如果在 Linux 系统中使用 MTOOLS 工具修改则更好。 使用命令如下: ¥ cd /tmp
¥ mcopy a:config ¥ vi config
¥ mcopy config a:
如果你使用的是其他的操作系统,我想在 WINDOWS 中可以使用记事本进行修改。在软盘中,我们可以看到 floppyfw 一共有 5 个文件: config (主配置文件) firewall.ini (过滤规则)
modules.lst (附加的 ip_masq 模块) sysLinux.cfg (内核启动参量)
syslog.cfg (syslog 配置, 例如/etc/syslog.conf)
在一般情况下,我们不需要修改 sysLinux.cfg 或者 modules.lst 文件。我们主要的任务就是要修改 config 这个文件。为了简单明了的说明问题, 我在这里不想过多的解释 config 这个文件里面的具体的配置清单,只是着重说明 config 文件末尾几个重要的事项。
在(/bin/ash)找到"OPEN_SHELL controls shell"这行文字,如果您的计算机的
page 19
内存少于 12MB,把 ONLY_8M 设置成"Y"。USE_SYSLOG 能测 定系统中 syslogd 是否运行,而 SYSLOG_FLAGS 则是判断 syslogd 启动的标志。用户可以根据自己的实际情况进行修改。
附录:配置清单一,这是一个通过测试的标准配置清单。由于这个 Linux 系统中没有提供 DHCP 服务,使用的静态的 IP,所以仅供有相似服 务的用户提供参考。点击这里下载清单一 关于过滤规则:
现在,让我们再来看看 firewall.ini 文件。没有修改之前的 floppyfw 的 firewall.ini 文件默认设置了静态的 IP 伪装和拒绝一些固定端口的访问。 因为我们需要建立自己的防火墙,所以我们需要对 firewall.ini 文件进行修改。我们需要全面的设置过滤规则,关闭一些我们认为存在前在危险的端 口。
在这里因为篇幅的关系我就不再讲解如何设置 ipchains。如果您想知道更详细的 ipchains 的配置方案和具体使用方法,推荐您参考以下的这个 国外的 Linux 防火墙 ipchains 配置方案。
firewall.ini 的过滤规则的具体设置可以参考配置清单二(ftp: //ftp.mfi.com/pub/sysadmin/2001/jan2001.tar.z),这是一个已经修改好了的配置。 如果你对 Linux 的防火墙不太熟悉,那么可以直接下载这个配置清单来进行参考或者直接使用。
清单二可以提供最基本的 DNS, SMTP, POP, NNTP, TELNET, SSH, FTP, HTTP, 和 WHOIS 服务,一般的客户端计算机都可以通过安全的端 口访问网络和使用以上的服务。
关于 LOG
一般的 Linux 系统中的 LOG 文件可不少,主要是记录系统运行中的一些主要参数和记录。上面已经说过了,syslog.cfg 就是一个管理和记录 LOG 的文件。Floppyfw 能通过这个 syslog.cfg 文件记录下 Linux 防火墙系统中的控制记录,例如键盘错误,显示器没有安装等信息也被如是的记 录下来。这为今后系统管理员分析和解决系统问题提供了有利的依据。syslog.cfg 的设置也不难,首先把 syslog.cfg 设置成某台计算机的主记录文 件。例如,在 Red Hat 系统中,通过编辑/etc/rc.d/init.d/syslog 可以达到目的。如果这台计算机的 IP 是 192.168.1.2,那么在 syslog.cfg 则要配置 成一致的 IP。具体的配置清单可以参考"清单三"(ftp: //ftp.mfi.com/pub/sysadmin/2001/jan2001.tar.z)
一旦你把前面三个主要的文件配置好了以后,那么你就可以通过这张软盘启动 Linux 系统进行测试了。
如果你在配置和测试防火墙中还遇到其他的问题,可以参考以下网址: Floppyfw by Thomas Lundquist: http://www.zelow.no/floppyfw/
Linux Firewalls by Robert L. Ziegler:
http://Linux-firewall-tools.com/Linux/faq/
最后,我在这里还要特别介绍一个也是相当不错的 Linux 防火墙 NetMAXFireWall。
NetMAX FireWall 来自 Cybernet Systems 公司,该防火墙的主要特点是容易安装,运行稳定,对硬件需求低,安全防范效果非常理想。由于 NetMAX 防火墙是通过完全的图形用户界面(GUI)来一步步引导用户安装的,那么 NetMAX 防火墙可以说是非常的适合 Linux 初学者和对 Linux 系统了解不多的用户。
如果您还记得去年 8 月的 LinuxWorld Conference & Expo 盛会的话,那么您可能见过 NetMAX 防火墙参加过那次 Linux 博览会的展示。和其 他版本的防火墙不同的是 NetMAX 防火墙具有独特的,安全的 Web -based 构造来保护 Linux 系统的安全。配置 NetMAX 防火墙可以通过网络来进 行相应的配置和调试,无疑这为许多用户和系统管理员提供了很大的方便。这也是 NetMAX 防火墙能吸引人的地方之一。 不过, NetMAX 防火墙可不是免费的防火墙版本, 如果您需要安装 NetMAX 防火墙, 那么您不得不购买一张 NetMAX 防火墙的光盘, 因为 NetMAX 防火墙并不支持网络安装模式。使用 CD-ROM 光盘安装模式安装 NetMAX 防火墙需要 10 分钟的时
page 20
间,这比起使用网络安装模式要快得多了。如 果您需要了解更多的 NetMAX 防火墙信息或者购买 NetMAX 防火墙光盘,敬请查询以下网址:Cybernet Systems Corporation: http://www.cybernet.com/
好,下面就让我们一起来看一看 NetMAX 防火墙的简单安装。 测试平台:
处理器: Pentium 200 MMX 内存: 64 MB RAM 硬盘: 2.1 GB
网络:两块 3Com ISA 3c509B NICs 系统平台:
操作系统: Red Hat Linux 6.2 Kernel: 2.2.16
安装之前,需要设置计算机主板上的 BIOS,使用 CD-ROM 驱动器引导计算机。放入 NetMAX 防火墙光盘。
NetMAX 防火墙的引导初始化屏幕和 RED HAT 的安装初始化界面是差不多的,令人惊异的是 NetMAX 防火墙的版权信息提示看上去就是把 RED HAT 这几个字换成了 NetMA 而已。安装过 RED HAT 的用户就一点也不觉得陌生。NetMAX 防火墙的开发公司称 NetMAX 防火墙就是基于 Red Hat Linux 发行版本而设计的。所以 Red Hat Linux 能和 NetMAX 防火墙相处得很好。
初始化界面载入后,NetMAX 防火墙和 Red Hat Linux 相似之处就更加明显了。接着 NetMAX 防火墙就会尝试着分析和查找计算机上的硬件设 备,因为 NetMAX 防火墙需要安装必要的 kernel 模块,如果 NetMAX 防火墙不能正确的识别硬件和载入 kernel 模块,它会显示错误的提示给用户。 NetMAX 防火墙是不会一次性安装所有的东西到 Linux 中取得。它首先会询问用户 Linux 系统中的网络配置参数让用户确认。然后询问用户是否同 意继续进行 console-based 安装。如果选择"NO",那么 NetMAX 防火墙就会启动 Apache 和提供用户一个基于网络的 URL 参数提供给用户指定和 修改。
好,如果我们选择"NO",那么就会出现下面的安装情况,NetMAX 防火墙就会在 Linux 系统中打开了 WEB 浏览器(KDE 2's Konqueror)。如果 这是我们填入一个 URL,那么一个错误的信息就会在屏幕上弹出来。当错误的信息弹出后,NetMAX 防火墙就要求用户修正 https URL。至于错误 信息弹出的原因,我们尚未清楚,不过,在我们平时安装和配置 Apache 的时候也会有类似的情况出现。
按照 NetMAX 防火墙的提示使用 https 修正初始化安装之后,NetMAX 防火墙这是才真正显示出它的授权和放弃信息。这和一般软件在一开始 安装就显示版权, 授权等信息是不同的。 点?quot;Click here to continue" 就可以进一步安装了。 需要注意的是, 如果您仔细观察, 您就会发现 NetMAX 防火墙的使用手册有 228 页之多。手册里面有"基本问题解决方法",如果在安装和使用 NetMAX 防火墙遇到问题的时候就可以查看这本手册了。但 是不是所有我们在安装的时候遇到的问题都能找到解决的方法。手册上列有的问题解决方法毕竟是有限的。
由于 NetMAX 防火墙采用了图形用户界面的安装模式, 所以只要您对 Linux 系统中的应用软件的安装比较熟悉的话, 安装和测试 NetMAX 防火 墙应该是一件非常轻松的事情的。
深入分析 Linux 防火墙 深入分析 Linux 防火墙. linux 宝库. 关于网络安全的研究分析中,防火墙(Firewall)是被经常强调的重点,它基本功能是过滤并可能阻挡本地网络 或者网络的某个部分与 Internet 之间的数据传送(数据包)。数据包其实就是一段段的数据,其中同时包括了用来把它们 http://www.itlang.cn/doc/200605/49207.html
操作系统深度安全加固深入分析 Linux 操作系统深度安全加固 深入分析 Linux 操作系统深度安全 深入分析 Linux 操作系统深度安全加固- 深入分析 Linux 操作系统深度安全加固- 希赛网新手教程. 对攻击有所了解的人都知道“端口重定向+反向管 道”的美妙结合来穿越防火墙的例子吧这种技巧已经运用太广,而危害很大为了对抗这种难以防御的攻击,我们必须以 http://help.csai.cn/Linux/200702021429341
page 21
873.htm
关于网络安全的研究分析中,防火墙(Firewall)是被经常强调的重点,它基本功能是过滤并可能阻挡本地网络或者网络的某个部分与 Internet 之间的数据传送(数据包)。数据包其实就是一段段的数据,其中同时包括了用来把它们发送到各自的目的地所必须的信息。你可以把数据包想象 成一个邮包:数据包本身就是邮包中的数据,而信封上则是所有用来把这些信息发送到正确的机器和正确的程序中去的书信抬头,它同时还包含着 回信地址等方面的信息。在其具体的过滤工作过程中,防火墙将接管在此之前从网络内部存取 Internet 和从 Internet 存取该内部网络的路由设置。
我们的感觉是以前的防火墙专门用来过滤一些非法的数据包,要么为什么其中的一种类型称为包过滤型防火墙呢?发展到现在,它的功能是日 益增多,不仅能够过滤数据包,还能够作网络地址转换,作代理等等。Linux 内核 2.4 中防火墙实现 NetFilter 就是这样的。
先来看看防火墙所处的位置,我的理解是要么它装在一台机器上作个人防火墙,要么装在一台机器上为一个局域网提供网关的功能,而后种情 况则如下图所示: 这副图概括了装在网关上的 NetFilter 的框架结构图,从图中可以看到一个数据包可能经过的路径,其中用[]扩起来的东东,称为检查点,当数 据包到达这个点时, 就要停下来进行一些检查。 这里检查点的名称使用的是 iptables 中名称, 具体到 NetFilter 中可能就要改为那些所谓的钩子 (Hook) 函数了。 NetFilter 概括起来说,它有下面的三个基本功能: 1、数据过滤(filter 表) 2、网络地址转换(nat 表) 3、数据包处理(mangle 表)
根据这三个功能,将上面的五个检查点按功能进行了分类。由于每个功能在 NetFilter 中对应一个表,而每个检查点又有若干个匹配规则,这些 规则组成一个链,所以就有下面的说法:“NetFilter 是表的容器,表是链的容器,链是规则的容器” 一个链(chain)其实就是众多规则(rules)中的一个检查清单(checklist)。每一条链中可以有一条或数条规则,每一条规则都是这样定义的“如果数 据包头符合这样的条件,就这样处理这个数据包”。当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件: 如果满足,系统将根据该条规则所定义的方法处理该数据包; 如果不满足则继续检查下一条规则。 最后, 如果该数据包不符合该链中任一条规则的话, 系统就会根据该链预先定义的策略(policy)来处理该数据包。
而一个 iptables 命令基本上包含如下五部分:希望工作在哪个表上、希望使用该表的哪个链、进行的操作(插入,添加,删除,修改)、对特定 规则的目标动作和匹配数据包条件。
基本的语法为:iptables -t table -Operation chain -j target match(es)(系统缺省的表为"filter") 基本操作如下:
-A 在链尾添加一条规则 -I 插入规则 -D 删除规则 -R 替代一条规则 -L 列出规则
基本目标动作,适用于所有的链: ACCEPT 接收该数据包 DROP 丢弃该数据包
QUEUE 排队该数据包到用户空间 RETURN 返回到前面调用的链 foobar 用户自定义链
基本匹配条件,适用于所有的链:
page 22
-p 指定协议(tcp/icmp/udp/……) -s 源地址(ip address/masklen) -d 目的地址(ip address/masklen) -i 数据包输入接口 -o 数据包输出接口 匹配条件扩展:
TCP匹配源端口,目的端口,及 tcp 标记的任意组合,tcp 选项等。 UPD匹配源端口和目的端口 ICMP匹配 ICMP 类型
MAC匹配接收到的数据的 mac 地址 MARK匹配 nfmark
OWNE(仅仅应用于本地产生的数据包)来匹配用户 ID,组 ID,进程 ID 及会话 ID
LIMIT匹配特定时间段内的数据包。这个扩展匹配对于 dos 攻击数据流非常有用。
STATE匹配特定状态下的数据包(由连接跟踪子系统来决定状态),可能的状态包括:
INVALID (不匹配于任何连接)
ESTABLISHED (属于某个已经建立的链接的数据包) NEW (建立连接的数据包)
RELATED (和某个已经建立的连接有一定相关的数据包,例如一个 ICMP 错误消息或 ftp 数据连接)
TOS——匹配 IP 头的 TOS 字段的值。 目标动作扩展:
LOG 将匹配的数据包传递给 syslog()进行记录
ULOG 将匹配的数据适用用户空间的 log 进程进行记录
REJECT 不仅仅丢弃数据包,同时返回给发送者一个可配置的错误信息 MIRROR 互换源和目的地址以后重新传输该数据包
Ipchains 是一种 Linux 下使用比较广泛的工具软件,可以实现数据包过滤的防火墙功能(Linux 的内核为 2.1 及以上的内核版本都能够支持这 个软件包) 这个软件包管理着对 Linux 操作系统内核本身极为重要的那些 IP 帐户和防火墙功能。 。 用户使用的内核必须已经在编译时激活 ipchains 功能;如果想掌握 ipchains 运行在哪一个层次,就必须在数据包级别上精通 TCP/IP 网络的数据传输情况。ipchains 是一个数据包过滤器,即是一 个用来检查数据包的信封内容的程序;同时,根据用户设定的一系列规则,还可以决定是否允许某些数据包通过和把它们发送到什么地方。
安装 ipchains: 首先下载或在光盘上找到它的 rpm 包, 然后以 root 身份登录进入系统, 敲入“rpm -ivh ipchains*”的命令来安装 ipchains 软件包。
配置 ipchains 的数据包过滤功能:首先依然以 root 用户身份登录进入系统,接着输入“ipchains-L”命令,查看当前已经存在的链。如果你还没 有对这些选项进行过配置的话,应该会看到下面这样的几行: >chaininput(policyACCEPT); >chainforward(policyACCEPT); >chainoutput(policyACCEPT); >
选择打算配置的链: 一个链就是一系列加在一组数据包类型上的规则。 inputchain (输入链) 指的是进入到防火墙机器中的数据包。 forwardchain (转发链) 指的是进入到防火墙机器中而现在又需要发送到网络中的另外一台机器上的数据包。 outputchain (输出链) 指的是要向外发送的数据包。
然后输入“ipchains -L chain”命令,列出打算编辑的链中当前已经存在的规则。在缺省的情况下,所有的链中的规则都是空白的。再输入 “ipchain-Achain”,告诉 ipchains 程序需要针对哪个链建立一个新的数据包过滤规则。举例来说,用户
page 23
可能想对输入链建立些新规则,那么就输入 “ipchains -A input”。现在还不能按回车键,还有事情要做。现在需要键入规则本身的内容。我们假定用户想做的设置是:除了从某一台特定的远程 工作站点之外,人们没有办法远程登录连接到防火墙后面的任何机器。在你正在建立的那个规则的格式中使用-s(source)标志设置地址(或地址范 围),如下:
(1)单个完整的 IP 地址,比如:192.168.152.24。
(2)整个一类的 IP 地址范围,比如:192.168.152.0/255.255.255.0—它表示从 192.168.152.0 到 192.168.152.255 范围内的地址。 (3)主机名,比如:blue。
(4)完整的域名,比如:blue.cdors.org。
(5)某个 IP 地址范围,要使用 IP 地址和网络屏蔽码(netmask)认真地构造之。
我们这个示例的目标是只允许从三台特定的机器上接入远程登录服务,它们的 IP 地址是 192.156.12.1 到 192.156.12.3。表示这个地址范围的 IP 地址和网络屏蔽码组合是 192.156.12.1/255.255.255.252。现在用户的规则语句看起来应该是这个样子的: ipchains-Ainput-s192.156.12.1/255.255.255.252 还是不能按回车键,你还有事情要做。
除了来自这三台机器以外,还可以继续细化,告诉 ipchains 程序允许通过防火墙进入的接收程序必须要使用哪一种协议。用户可以使用-p (protocol,协议)标志。远程登录进程使用的是 TCP 协议。现在这条规则看起来像是:ipchains- Ainput-s192.156.12.1/255.255.255.252-pTCP 还是不要按回车键。
围绕某个特定的协议建立一条规则的选择太多了,但是用户可以为你选定的进程指定其端口(port)来细化那条规则。用户可以把端口的名称 加到规则的末尾,也可以用一个冒号引导该端口的端口号。从/etc/services 文件中可以查到任何网络服务所使用的端口号。现在这条规则看起来是 下列这两行文字中的某个样子: ipchains-Ainput-s192.156.12.1/255.255.255.252-pTCP:23ALLOW ipchains-Ainput-s192.156.12.1/255.255.255.252-pTCPTelnetALLOW
现在可以按下回车键了。用户在确实屏蔽了其他接入类型之前,这条规则实际上还是没有什么用处的。最好的解决方法(因为我们的目的是为用 户所有希望允许的东西建立规则)是使用-P(policy)标志(注意是大写字母)屏蔽所有的输入,然后 ipchains 就会去检查特定的规则看看到底什么 才能被允许进入。这样的一个策略语句如下所示:ipchains-PinputDENY
在重启动/关机之前保存数据包过滤规则:没有哪个配置文件是用来自动保存数据包过滤规则供你下次启动机器的时候使用的。因此,选择某种 方法自己来完成这项工作就十分重要,否则下一次你就还得从头一点一滴地重新写出所有的规则。下面介绍一个保存数据包过滤规则的方法:先以 root 身份登录进入系统,再使用 ipchains-save 脚本程序把用户已经编写好的规则设置保存到一个文件中去,比如/root/ipchains-settings 文件。输 入“ipchains-save>/root/ipchains-settings”。
开机引导后恢复数据包过滤规则:用户在计算机重启动之后,必须恢复数据包过滤规则。请按照下面的方法完成这项任务:先以 root 身份登录 进入系统, 再使用 ipchains-restore 脚本程序在某个文件中检索用户已经编写好的规则, 比如从文件/root/ipchains-settings 中恢复数据包过滤规则。 如下所示,输入“ipchains-restore<>
如果要想实现代理防火墙功能,需要安装能够控制用户从某个网络的外部可以使用和不可以使用什么样的网络服务功能的软件。代理防火墙不 允许有任何连接接入到它后面的机器上(当然也不是绝对的),不存在任何数据包过滤的效果,从接入连接的角度考虑,它就是一堵密不透风的砖 墙。可以如下设置:
首先在/etc/inetd.conf 文件中禁用任何你不打算使用的服务功能,方法是把它们改为注释语句(即在那些语句开头加上一个#符号)。任何一种 服务都会为试图进入系统的那些人多打开一条通路,因此应该只使用你确实需要的服务。
接着编辑/etc/issue.net 文件, 删除其中关于在你的机器上运行的特定硬件和 Linux 发行版本的介绍信息。 这些信息会在诸如 Telnet 之类的远程 登录任务操作
page 24
过程中显示在登录端的屏幕上。如果他们对屏幕上显示的安装方式熟悉的话,任何暴露了你机器上这些特殊信息的东西都会使那些试 图闯入的人们了解应该去攻击哪些薄弱环节(如 Sendmail8.7-8.8.2 for Linux 这个漏洞)。
再接着把某些特殊的用户们分配到 console 用户组中,这样就是这帮人实际坐在服务器计算机前面时确实可以执行命令,但同时要禁止任何其 他人调用这些命令。举例来说,如果需要强调安全性,那就应该只允许 console 用户组的成员可以挂装磁盘。
然后查看/etc/securetty 文件,确定其中列出的设备都是真实存在的物理 ttys(比如 tty1 到 tty8)端口。这个文件了人们能够以根用户身份 登录进入系统的位置。 允许任何远端用户以根用户身份登录进入系统是极其危险的, 因为这样做就为潜在的侵入者缩短了侵入超级用户帐户的过程。
最后是最好不设匿名帐户或来宾帐户(anonymouse & guest)如果一定要设,请在/etc/passwd 中将其 shell 设为/bin/failure,使其不能访问任 何 shell。(注意:Linux 中是设为/bin/false)。打开 chroot(如 chroot -s),使其访问的文件限定在一定目录下。一定要保证在 FTP 服务器上唯一 允许匿名用户进行写入操作的部分是/incoming 目录。列出成功登录的记录清单如果想查看都有哪些人最近成功地登录进入了系统,可以使用 last 命令。如果想列出比缺省数目更多的记录,可以使用格式“last -nnumber”告诉 last 命令需要显示多少登录记录。如果这个命令执行失败,说明登录 操作还没有被记录下来。为了确保它们能够被记录下来,请以根用户身份执行“touch/sar/log/wtmp”命令来建立日志记录文件。列出不成功登录的记 录清单如果想查看都有哪些人最近没有成功地登录进入系统,可以使用 lastb 命令。和 last 命令相类似,如果你想列出比缺省数目更多的不成功尝 试记录的话,可以使用“lastb -nnumber”格式。如果这个命令执行失败,说明不成功登录操作还没有被记录下来。为了确保它们能够被记录下来,请 以根用户身份执行 “touch/var/log/btmp”命令来建立日志记录文件。
如果安全出现了漏洞,或者你认为已经出现了漏洞的话,就可以抓住这个机会从系统登录记录或者其他地方查找蛛丝马迹。系统会记录下每一 次成功的登录操作和不成功的登录尝试操作。特别是那个“列出不成功的尝试登录记录清单”,它能够让你很快地查找出是否有人在千方百计地获取 根用户权限或者猜试某个用户的口令字。 如果你使用的是 shadow 隐藏口令字软件,请检查/etc/passwd 文件,看看其中是否禁用了 shadow 隐藏口令字功能——如果是这样,口令字 将会被保存在/etc/passwd 文件里。Linux 系统中的/etc/passwd 文件是整个系统中最重要的文件,它包含了每个用户的信息(加密后的口令也可能 存与/etc/shadow 文件中)。它每一行分为 7 个部分,依次为用户登录名,加密过的口令,用户号,用户组号,用户全名,用户主目录和用户所用 的 Shell 程序,其中用户号(UID)和用户组号(GID)用于 Unix 系统唯一地标识用户和同组用户及用户的访问权限。这个文件是用 DES 不可逆算 法加密的,只能用 John 之类的软件穷举,因此,此文件成为入侵者的首要目标。通常黑客用 FTP 匿名登录后将 passwd Get 回去,就用 John 开 始跑了。所以一定要把此文件设为不可读不可写。另注意,opasswd 或 passwd.old 是 passwd 的备份,它们可能存在,如果存在,一定也要设为 不可读不可写修改。进行以上设置必须 root 用户的权限,所以如果情况真的如上面所说的这样,你就应该知道在这台机器上黑客已经获得了 root 的操作权限。
检查是否有不熟悉的用户帐户拥有特殊的优先权:一个拥有高级工具和丰富经验的黑客能够替换某些重要的系统功能。用一立的计算机或 者一台你相信没有遭到攻击的机器把诸如 ls 之类的命令备份到一张软盘上去,当然最好是将安装光盘再刻录一张,然后检查程序 ls、find、ps 和所 有网络守护进程的系统版本中的日期与它们生成时的日期数据是否一致。
最后你应该经常到下面的地方去查看是否有提高安全性方面的建议和那些修补最新发现的系统漏洞的网站:如 Root Shell (http://www.rootshell.com)、 Computer Emergency Response Team (计算机紧急情况快速反应组——http://www.cert.com) 和你机器上安装的 Linux 版本的软件服务商网页,并最好订阅一些最新系统漏洞的电子杂志。
page 25
解析实现防火墙客户的重定向(图 妙用 DNS 解析实现防火墙客户的重定向 图) - PCDOG.COM 妙用 DNS 解析实现防火墙客户的重定向(图)(图一). 该公司使用 ISA 2004 作为代理服务器。 公司内部网络采用单林单域模式,内部 DNS 名为 contoso.com,在 Internet 上注册的域名亦为 contoso.com。公司有 50 多台服务器,包括邮件服务器、数据库服务器、OA http://www.pcdog.com/network/server/2005/12/n053992.html
解析实现防火墙客户的重定向(图 服务器技术 器技术妙用 DNS 解析实现防火墙客户的重定向 图) - 服务器技术 ISA Server 源码爱好者每天更新大量各类精品软件及技术文章,内容涵盖各种工具软件、办公软件、网页设计、平面设计、三维设计、操作系统、网络安全、 病毒、程序开发基础、开发技巧、开发实例等,全面系统介绍各类软件用法、技巧以及应用解决方案,为读者提供最新最全 http://www.codesfan.com/Windows/WIN/SERVER/ISAS/Win_71400.shtml
前言:现在很多公司都使用微软的活动目录对网络进行管理,其中内部 DNS 服务器是不可或缺的一个组成部分。我们知道,对于 ISA 的防火 墙客户端通过 ISA 访问网络资源时,其 DNS 解析由 ISA 服务器帮助完成,你是否有想过,通过的内部 DNS 服务器和防火墙客户端结合,能够巧 妙的解决很多实际问题。
这篇文章里,我将通过两个 CASE,讲述使用两者结合的方法解决两个实际问题。
声明:这两个 CASE 都是我近期遇到的问题,其中解决第一个 CASE 的是我的一个同事,他为我提供了一种新的思路;第二个 CASE 则是我 沿用这种思路,解决新的问题。
CASE1:
问题描述:Contoso 公司的网络环境如下图所示: 该公司使用 ISA 2004 作为代理服务器。
公司内部网络采用单林单域模式,内部 DNS 名为 contoso.com,在 Internet 上注册的域名亦为 contoso.com。公司有 50 多台服务器,包括邮 件服务器、数据库服务器、OA 服务器、FTP 服务器与 Web 服务器等,其中邮件服务器、OA 服务器均为双网卡,而 FTP 服务器与 Web 服务器均 只有卡,数据库服务器只有内网卡。有卡的服务器均直接与外线交换机相连,且在 Internet 上注册有合法的 DNS 名。 公司内部客户机的 TCP/IP 配置中,将 DNS 指向内部的 DNS 服务器,有访问互联网权限的客户机均使用 FWC 方式访问 Internet。现公司为了 提高访问 OA 服务器和邮件服务器的速度,要求客户机通过服务器的内部网卡进行访问邮件服务器和 OA 服务器。
分析存在的问题:OA 服务器和邮件服务器数量总和大约在 30 台,如果一台一台在 ISA 控制台上设置“访问不通过代理服务器”,工作量较大, 且将来添加新服务器时,需要在 ISA 上添加相应的纪录;另一方面,如果在 ISA 上直接设置 Bypass *.contoso.com,那么会造成安装有防火墙客户 端用户无法访问 ftp.contoso.com 和 www.contoso.com(因为这几台 Server 没有内网卡)。
解决方案:其实解决的方案有很多,但下面这种最简单的不知道你想到没有: 在 ISA Server 上对*.contoso.com 进行 Bypass,然后在内部 DNS 为 ftp.contoso.com 和 www.contoso.com 分别新建两条 A 纪录,指向各自 的 IP。 我们以 www.contoso.com 为例,来考虑一下现在的客户机访问过程:
1、用户通过 IE 访问 www.contoso.com,通过防火墙客户端向 ISA Server 发送请求,要求进行解析;
2、ISA 判定访问此 web 站点不需要经过 ISA Server;
3、客户端向内网 DNS 查询 www.contoso.com 的地址,内部 DNS 返回这台服务器的 IP;
4、客户端判定 IP 地址在,向 ISA 发送访问此 IP 的请求; 5、代理服务器通过策略处理,响应请求,连接建立。
正如上述过程所描述的,防火墙客户端模式的客户机通过使用内部 DNS 服务器的解析,实现了对外部资源的访问。
page 26
请仔细体会一下其中的过程,然后接着看 CASE2。 CASE2:
背景描述:BlueEye 公司位于上海,是总部位于深圳的 Contoso 收购的一家公司。Contoso 收购 Blueeye 后,未对 BlueEye 的 AD 架构进行 更改,而保持了其原有的内部 DNS 名:BlueEye.com,只是将其电子邮件名统一为 Contoso.com,且要求其通过使用总部的邮件服务器进行邮件 的发送与接受,便于邮件的监控。 两家公司的网络结构图简单表示如下所示:
BlueEye 内部有收发邮件的客户机均安装了防火墙客户端软件,使用 Outlook Express 收发邮件,且总部指定其使用的 POP3 服务器为 POP3.contoso.com,SMTP 服务器为 SMTP.contoso.com。Contoso 公司另有一台 SMTP2.contoso.com 供另一家分公司使用。
某日,Contoso 通知 BlueEye 其 SMTP.contoso.com 突然 Down 机,正在进行抢修,要求 BlueEye 的 IT 部门通知 BlueEye 的内部用户(1000 多人)更改 OE 的设置,使用 SMTP2.contoso.com 作为临时的 SMTP 服务器。
分析:如果通知所有用户修改 OE 设置,等原先的 SMTP 服务器修复后还需要再更改回来,必定会造成用户的不满;同时,总部的 SMTP2.contoso.com 服务器供另一家分公司使用,暂时不会考虑去 ISP 的 DNS 注册别名。那么如何才能够快速解决此问题呢?
解决方案:如果你看过 CASE1,应该会有一个思路:能不能让用户的客户机将 SMTP.contoso.com 解析为 SMTP2.contoso.com 的 IP,然后 再向 ISA 发送访问请求呢?
自然是可以的,方法如下:
(1)在 BlueEye.com 的内部 DNS 上新建一个主区域(不需要选择与 AD 集成),命名为 contoso.com
(2)在 contoso.com 中新建一条 A 纪录,将 SMTP.contoso.com 指向 61.0.0.2
(3)在 ISA Server 上中将 SMTP.contoso.com 添加到标签 Domains 中; (4)客户机刷新防火墙策略后,即可成功接收和发送邮件。待 smtp 服务器修复后,删除所作的更改即可恢复原来的状态,而不需要在客户端 进行任何的修改。 上述两个 CASE,没有用到什么高深的知识,只是通过思路的转变,就解决了两个比较棘手的问题。希望这篇文章能够给你提供一种新的解决 问题的思路。
搭建防火墙的规则-红旋风联盟 技术文档中心|RHU 红旋风联盟-技术文档中心 构筑防火墙之 IPtables 搭建防火墙的规则 红旋风联盟 技术文档中心 构筑防火墙之 IPtables 搭建防火墙的规则 ・如何使用 Linux LiveCD 评估系统的安全性 ・磨炼 Gentoo 的锋芒之只要敢想就有 Gentoo ・揭秘 Linux 内 核调试器之内幕 前面介绍了 iptables 的基本概念和用法,下面我们就开始正式使用 iptables 来创建我们的防火墙。 http://www.rhutech.net/article/info/2211-1.htm
构筑防火墙之 IPtables 搭建防火墙的规则 构筑防火墙之 IPtables 搭建防火墙的规则. 前面介绍了 iptables 的基本概念和用法,下面我们就开始正式使用 iptables 来创建我们的防火墙。启动 和停止 iptables 的方法取决于所使用的 Linux 发行版,你可以查看所使用 Linux 版本的文档。在 Red Hat 中,启动 iptables 用 http://bbs.31896.net/Html/2007-4/12/20130968433.shtml
了解了 iptables 的基本概念和用法, 下面我们就开始正式使用 iptables 来创建我们的防火墙。 启动和停止 iptables 的方法取决于所使用的 Linux 发行版,你可以查看所使用 Linux 版本的文档。在 Red Hat 中,启动 iptables 用: #service iptables start
一般情况下,iptables 已经包含在了 Linux 发行版中,可以运行 iptables --version 来查看系统是否安装了 iptables。在我使用的 Fedora Core 1 中,安装的版本是 iptables v1.2.8。如果你的系统确实没有安装 iptables,那么可以从以下地址下载:
http://www.netfilter.org/ 查看规则集
page 27
虽然上文对 iptables 的用法作一个简单介绍,但现实中我们可能需要知道更完整的信息,这时我们可以运行 man iptables 来查看所有命令和选 项的完整介绍,也可以运行 iptables help 来查看一个快速帮助。要查看系统中现有的 iptables 规划集,可以运行以下命令: iptables list
下面是没有定义规划时 iptables 的样子: Chain INPUT (policy ACCEPT) target
prot opt source destination
Chain FORWARD (policy ACCEPT) target
prot opt source destination
Chain OUTPUT (policy ACCEPT) target
prot opt source destination
如上面的例子所示,每一个数据包都要通过三个内建的链(INPUT、OUTPUT 和 FORWARD)中的一个。 filter 是最常用的表,上文所示设置所 有的表规则的基本语法:iptables [-t table] command [match] [target]。
现实中,不一定要用到这里所列出的所有选项,也不一定是以这个顺序。当然,这是一种惯例,因为规则一般都比较长,为了清晰起见,最好 能够按照这个顺序。 在没有指定规则表的情况下,缺省时使用的 filter 表。在 filter 表中最常用的三个目标是 ACCEPT、DROP 和 REJECT。DROP 会丢弃数据包, 不再对其进行任何处理。REJECT 会把出错信息传送至发送数据包的主机。虽然有时会有一些预想不到的影响,但在很多时候它还是非常有用。 增加规则
本例中的规则将会阻止来自某一特定 IP 范围内的数据包,因为该 IP 地址范围被管理员怀疑有大量恶意的攻击者在活动:
# iptables -t filter -A INPUT -s 123.456.789.0/24 -j DROP
要了解有关 iptables 详细的参数和命令格式,请使用 man iptables 查看。可以说,现在我们对于网络上的恶意攻击者已经深恶痛绝,但不管怎 么说,我们也不能因为憎恨它们就以同样的方法对其实行简单的报复,至少这种事情不能在你的网络里发生。因此,我们也可以很轻易地阻止所有 流向攻击者 IP 地址的数据包,该命令也只是稍有不同:
# iptables -t filter -A OUTPUT -d 123.456.789.0/24 -j DROP 注意这里的 A 选项,如前所述,使用它说明是给现有的链添加规则。 删除规则
网络上的恶意攻击者总是在变化着的,因此我们也要不断改变 IP。假设我们了解的一个网上攻击者转移到了新的 IP 地址,而其老的 IP 地址被 分配给了一些清白的用户,那么这时这些用户的数据包就无法通过你的网络了。这种情况下,我们可以使用带-D 选项的命令来删除现有的规则:
# iptables -t filter -D OUTPUT -d 123.456.789.0/24 -j DROP 缺省的策略
创建一个具有很好灵活性,可以抵御各种意外事件的规则需要花大量的时间。对于那些不想这样做的人,最基本的原则就是“先拒绝所有的数据 包,然后再允许需要的”。下面我们来为每一个链设置缺省的规则: # iptables -P INPUT DROP # iptables -P FORWARD DROP # iptables -P OUTPUT ACCEPT
这里选项-P 用于设置链的策略,只有三个内建的链才有策略。这些策略可以让
page 28
信息毫无地流出,但不允许信息流入。但很多时候,我们还 是需要接收外部信息的。这时可使用以下命令:
# iptables -t filter -A INPUT -s 123.456.789.0/24 -j ACCEPT SYN 的使用
我们不能关闭所有的端口,那将会把我们自己完全“与世隔绝”。我们也不能只指定某些端口处于打开状态,因为我们无法预见哪一个端口将会 被使用。事实上,只简单地允许目的地为某一特定端口的数据流通过将对阻止恶意的攻击毫无意义。那么我们怎样才能设置一个有效的规则,即可 以允许普通用户正常通过,又可以阻止恶意攻击者访问我们的网络呢?
对于刚开始使用 iptables 的人,我们可以充分利用 syn 标识来阻止那些未经授权的访问。因为 iptables 只检测数据包的报头,所以不会增加有 效负荷。事实上,除 iptables 以外,很多其它有用的数据包分析都是基于报头的。
比如,在进行 Web 冲浪时,一个请求从你的 PC 发送至其它某一个地方的 Web 服务器之上,接着该服务器就会响应请求并且向你发回一个数 据包,并且得到你的系统上的一个临时端口。与响应请求不同的是,服务器并不关心你所传送的内容。这们可以利用这种特点,来设置一个规则, 让它阻止所有没有经过你的系统授权的 TCP 连接:
# iptables -t filter -A INPUT -i eth0 -p tcp --syn -j DROP
这里的-i 指的是网卡,-p 则是指协议,--syn 则表示带有 syn 标识设置的 TCP 数据包。从中我们可以看出,对 TCP/IP 的了解将非常有利于维 护网络安全。SYN 用于初始化一个 TCP 连接,如果你在自己的机器上没有运行任何服务器,别人自然也就不会向你发送 SYN 数据包了。
就这点而言,有人会说:何必如此麻烦?的确,我们有更简单的创建防火墙的方法,也有很多不错的软件也可以帮助我们来构建自己的规则集, 但是我们应该清楚,最简单的办法,往往不是最好的方法。既然我们有更好的方法,为什么不使用呢? 共享一个 Internet 连接
网络地址翻译和 IP 伪装都可以实现多台主机共享一个 Internet 连接,而这个局域网可以是 Linux 和 Windows 系统组成的多系统局域网。假设 现在我们有一台机器有两个网卡,其中 eth0 为“公共”网卡,eth1 为“私有”网卡。
换句话说,eth0 被分配了一个静态的,可路由的 IP 地址,而 eth1 则被分配给了一个私有的、不能路由的 IP,也就是说该 IP 是属于该局域网 子网的。要实现上述功能,我们需要向 nat 和 filter 表中添加一些链:
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -t filter -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -t filter -A FORWARD -i eth1 -o eth0 -j ACCEPT
这显示了有状态的数据包检测的价值。请注意,我们这里是如何实现流入数据包只有在属于一个已经存在的连接时才被允许的,而所有来自局 域网内流向外的数据包则都允许通过 (注意:这里的 filter 是缺省的表,但它并不是必须的)。第一条规则让所有流出的信息看起来都是来自防火墙 机器的,而并不会显示出防火墙后面还有一个局域网。
下面的例子是为 FORWARD 和 POSTROUTING 链设置了缺省的策略,在使用伪装时,有一个缺省的 POSTROUTING DROP 策略是非常重 要的,否则,就有可能有心怀恶意的用户突破网关后伪装它自己的身份。
# iptables -t filter -P FORWARD DROP # iptables -t nat -P POSTROUTING DROP
下面的例子是为了拨号连接设置的,它可以动态地分配 IP 地址: # iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 规则的保存
使用脚本更改规则的问题是:改动每个规则都要调用命令 iptables,而每一次调用 iptables,它首先要把 netfilter 内核空间中的整个规则集都提 取出来,然后再插入或附加,或做其他的改动,最后,再把新的规则集从它的内存空间插入到内核
page 29
空间中,这显然会花费很多时间。
为了解决这个问题, 可以使用命令 iptables-save 和 restore 。 iptables-save 用来把规则集保存到一个特殊格式的文本文件里, iptables-restore 而 则用来把这个文件重新装入到内核空间中。
这两个命令最好的地方在于一次调用就可以装载和保存规则集,而不像脚本中每个规则都要调用一次 iptables。
iptables-save 运行一次就可以把整个规则集从内核里提取出来,并保存到文件里,而 iptables-restore 每次装入一个规则表。换句话说,对于 一个很大的规则集,如果用脚本来设置,那这些规则就会反复地被卸载、安装很多次,而我们现在可以把整个规则集一次就保存下来,安装时则是 一次一个表,这可是节省了大量的时间。所以,一旦测试结果令你满意,你就可以将它们保存为脚本: # iptables-save > iptables-script
现在,信息包过滤表中的所有规则都被保存在文件 iptables-script 中。无论何时再次引导系统,都可以使用 iptables-restore 命令将规则集从 该脚本文件恢复到信息包过滤表,恢复指令如下所示: # iptables-restore iptables-script
如果您愿意在每次引导系统时自动恢复该规则集,则可以将上面指定的这条命令放到任何一个初始化 shell 脚本中。
事实上,大部分发行版都为用户提供了一个可以自动加载的文件,让用户在其中编辑规则集,并且大部分发行版都会有一个已经预先配置好的 防火墙。不同的发行版的配置文件位置不尽相同,我们可以使用命令 locate iptables 来找到配置文件。对于 Red Hat 或者 Fedora Core 而言,这 个配置文件位于/etc/sysconfig/iptables。该文件初始的内容如下:
1 # Firewall configuration 2 *filter
3 :INPUT <target> [0:0] 4 :FORWARD <target> [0:0] 5 :OUTPUT <target> [0:0] 6
7 # your rules here 8
9 COMMIT
建议将其基本框架改成以下内容: 1 *filter
2 :INPUT DROP [0:0] 3 :FORWARD DROP [0:0] 4 :OUTPUT ACCEPT [0:0] 5
6 # allow local loopback connections 7 -A INPUT -i lo -j ACCEPT 8
9 # drop INVALID connections 10 -A INPUT
-m state --state INVALID -j DROP 11 -A OUTPUT
-m state --state INVALID -j DROP
12 -A FORWARD -m state --state INVALID -j DROP 13
14 # allow all established and related
15 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 16
17 # add anymore rules here
page 30
18
19 COMMIT
的概念与用法_防火墙 基础信息化_信息化文库 防火墙_基础信息化 构筑 Linux 防火墙之 IPtables 的概念与用法 防火墙 基础信息化 信息化文库 荟萃防火墙领域,包括网络防火墙,硬件防火墙,软件防火墙,边界防火墙的概念入门、理论研究、市场分析、选型、应用案例等方面精品文章, 提供防火墙名家文章,防火墙解决方案,防火墙资料下载. http://articles.e-works.net.cn/512/Article32998.htm Linux 防火墙之 IPtables 概念与用法 Linux 防火墙之 IPtables 概念与用法. 2007-04-21 09:27:15. 防火墙典型的设置是有两个网卡,一个流入,一个流出。iptables 读取流入和流出的数 据包的报头,然后将它们与规划集(ruleset)相比较,然后将可接受的数据包从一个网卡转发至另外一个网卡。 http://www.safe123.net/e/DoPrint/?classid=69&id=1438
防火墙典型的设置是有两个网卡,一个流入,一个流出。iptables 读取流入和流出的数据包的报头,然后将它们与规划集(ruleset)相比较,然后 将可接受的数据包从一个网卡转发至另外一个网卡。对于被拒绝的数据包,可以被丢弃或者按照你所定义的方式来处理。
通过向防火墙提供有关对来自某个源、到某个目的地或具有特定协议类型的信息包要做些什么的指令的规则,控制信息包的过滤。通过使用 iptables 系统提供的特殊命令 iptables,建立这些规则,并将其添加到内核空间的特定信息包过滤表内的链中。关于添加、除去、编辑规则的命令 的一般语法如下: iptables [-t table] command [match] [target]
现实中,为了易读,我们一般都用这种语法。大部分规则都是按这种语法写的,因此,如果看到别人写的规则,你很可能会发现用的也是这种 语法。
如果不想用标准的表,就要在[table]处指定表名。一般情况下没有必要指定使用的表,因为 iptables 默认使用 filter 表来执行所有的命令。也没 有必要非得在这里指定表名,实际上几乎可在规则的任何地方指定表名。当然,把表名放在开始处已经是约定俗成的标准。尽管命令总是放在开头, 或者是直接放在表名后面,我们也要考虑到底放在哪儿易读。
“command”告诉程序该做什么,比如:插入一个规则,还是在链的末尾增加一个规则,还是删除一个规则。下面会仔细地介绍。
“match”细致地描述了包的某个特点,以使这个包区别于其它所有的包。在这里,我们可以指定包的来源 IP 地址、网络接口、端口、协议类型, 或者其他什么。下面我们将会看到许多不同的 match。
最后是数据包的目标所在“target”。若数据包符合所有的 match,内核就用 target 来处理它,或者说把包发往 target。比如,我们可以让内核把 包发送到当前表中的其他链(可能是我们自己建立的),或者只是丢弃这个包而不做任何处理,或者向发送者返回某个特殊的应答。下面我们来逐 个讨论这些选项: 表(table)
[-t table]选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。有三种可用的表选项:filter、nat 和 mangle。该选项不是必需的,如果未指定,则 filter 用作缺省表。下面介绍各表实现的功能。 filter
filter 表用来过滤数据包,我们可以在任何时候匹配包并过滤它们。我们就是在这里根据包的内容对包做 DROP 或 ACCEPT 的。当然,我们也 可以预先在其他地方做些过滤,但是这个表才是设计用来过滤的。几乎所有的 target 都可以在这儿使用。
nat
nat 表的主要用处是网络地址转换,即 Network Address Translation,缩写为 NAT。做过 NAT 操作的数据包的地址就被改变了,当然这种改 变是根据我们的规则进行的。属于一个流的包只会经过这个表一次。
如果第一个包被允许做 NAT 或 Masqueraded,那么余下的包都会自动地被做相同的操作。也就是说,余下的包不会再通过这个表,一个一个 的被 NAT,而是自动地
page 31
完成。这就是我们为什么不应该在这个表中做任何过滤的主要原因。PREROUTING 链的作用是在包刚刚到达防火墙时改 变它的目的地址,如果需要的话。OUTPUT 链改变本地产生的包的目的地址。
POSTROUTING 链在包就要离开防火墙之前改变其源地址此表仅用于 NAT,也就是转换包的源或目标地址。注意,只有流的第一个包会被这 个链匹配,其后的包会自动被做相同的处理。实际的操作分为以下几类: ◆ DNAT ◆ SNAT
◆ MASQUERADE
DNAT 操作主要用在这样一种情况,你有一个合法的 IP 地址,要把对防火墙的访问 重定向到其他的机子上(比如 DMZ)。也就是说,我们改 变的是目的地址,以使包能重路由到某台主机。
SNAT 改变包的源地址,这在极大程度上可以隐藏你的本地网络或者 DMZ 等。一个很好的例子是我们知道防火墙的外部地址,但必须用这个 地址替换本地网络地址。有了这个操作,防火墙就 能自动地对包做 SNAT 和 De-SNAT(就是反向的 SNAT),以使 LAN 能连接到 Internet。
如果使用类似 192.168.0.0/24 这样的地址,是不会从 Internet 得到任何回应的。因为 IANA 定义这些网络(还有其他的)为私有的,只能用于 LAN 内部。
MASQUERADE 的作用和 MASQUERADE 完全一样,只是计算机 的负荷稍微多一点。因为对每个匹配的包,MASQUERADE 都要查找可用 的 IP 地址,而不象 SNAT 用的 IP 地址是配置好的。当然,这也有好处,就是我们可以使用通过 PPP、 PPPOE、SLIP 等拨号得到的地址,这些 地址可是由 ISP 的 DHCP 随机分配的。 Mangle
这个表主要用来 mangle 数据包。我们可以改变不同的包及包头的内容,比如 TTL,TOS 或 MARK。 注意 MARK 并没有真正地改动数据包, 它只是在内核空间为包设了一个标记。防火墙内的其他的规则或程序(如 tc)可以使用这种标记对包进行过滤或高级路由。这个表有五个内建的链: PREROUTING,POSTROUTING, OUTPUT,INPUT 和 FORWARD。
PREROUTING 在包进入防火墙之后、路由判断之前改变包,POSTROUTING 是在所有路由判断之后。 OUTPUT 在确定包的目的之前更改数 据包。 INPUT 在包被路由到本地之后,但在用户空间的程序看到它之前改变包。 注意,mangle 表不能做任何 NAT, 它只是改变数据包的 TTL, TOS 或 MARK,而不是其源目的地址。NAT 是在 nat 表中操作的,以下是 mangle 表中仅有的几种操作: ◆ TOS ◆ TTL ◆ MARK
TOS 操作用来设置或改变数据包的服务类型域。这常用来设置网络上的数据包如何被路由等策略。 注意这个操作并不完善,有时得不所愿。 它在 Internet 上还不能使用,而且很多路由器不会注意到这个域值。换句话说,不要设置发往 Internet 的包,除非你打算依靠 TOS 来路由,比如用 iproute2。
TTL 操作用来改变数据包的生存时间域,我们可以让所有数据包只有一个特殊的 TTL。它的存在有一个很好的理由,那就是我们可以欺骗一些 ISP。为什么要欺骗他们呢?因为他们不愿意让我们共享 一个连接。
那些 ISP 会查找一台单独的计算机是否使用不同的 TTL,并且以此作为判断连接是否被共享的标志。
MARK 用来给包设置特殊的标记。iproute2 能识别这些标记,并根据不同的标记(或没有标记) 决定不同的路由。用这些标记我们可以做带 宽和基于请求的分类。
命令(command)
命令中必要的组成部分 command 是 iptables 命令的最重要部分。它告诉 iptables 命令要做什么,例如,插入规则、将规则添加到链的末尾或 删除规则。
在使用 iptables 时,如果必须的参数没有输入就按了回车,那么它就会给出一
page 32
些提示信息,告诉你需要哪些参数等。iptables 的选项-v 用来显 示 iptables 的版本,-h 给出语法的简短说明。 匹配(match)
iptables 命令的可选 match 部分指定信息包与规则匹配所应具有的特征(如源和目的地地址、协议等)。可把它们归为五类:第一类是 generic matches(通用的匹配),适用于所有的规则;第二类是 TCP matches,顾名思义,这只能用于 TCP 包;第三类是 UDP matches, 当然它只能 用在 UDP 包上了;第四类是 ICMP matches ,针对 ICMP 包的;第五类比较特殊,针对的是状态,指所有者和访问的频率等。在此,只介绍 通用匹配,熟悉了通用匹配,其它的几种也就比较容易理解了。 目标(target)
我们已经知道,目标是由规则指定的操作,那些与规则匹配的信息包执行这些操作。除了允许用户定义的目标之外,还有许多可用的目标选项。 用于建立高级规则的目标,如 LOG、REDIRECT、MARK、MIRROR 和 MASQUERADE 等。 状态机制
状态机制是 iptables 中特殊的一部分,其实它不应该叫状态机制,因为它只是一种连接跟踪机制。但是,很多人都认可状态机制这个名字。连 接跟踪可以让 netfilter 知道某个特定连接的状态。运行连接跟踪的防火墙称作带有状态机制的防火墙,以下简称为状态防火墙。状态防火墙比非状 态防火墙要安全,因为它允许我们编写更严密的规则。
在 iptables 里,包是和被跟踪连接的四种不同状态有关的。它们是 NEW、ESTABLISHED、RELATED 和 INVALID。使用--state 匹配操作, 我们能很容易地控制“谁或什么能发起新的会话”。
所有在内核中由 netfilter 的特定框架做的连接跟踪称作 conntrack(就是 connection tracking 的首字母缩写)。conntrack 可以作为模块安装, 也可以作为内核的一部分。大部分情况下,我们需要更详细的连接跟踪。因此,conntrack 中有许多用来处理 TCP、UDP 或 ICMP 协议的部件。这 些模块从数据包中提取详细的、唯一的信息,因此能保持对每一个数据流的跟踪。这些信息也告知 conntrack 流当前的状态。例如,UDP 流一般由 他们的目的地址、源地址、目的端口和源端口唯一确定。 在以前的内核里,我们可以打开或关闭重组功能。然而,自从 iptables 和 netfilter,尤其是连接跟踪被引入内核,这个选项就被取消了。因为 没有包的重组,连接跟踪就不能正常工作。现在重组已经整合入 conntrack,并且在 conntrack 启动时自动启动。不要关闭重组功能,除非你要关 闭连接跟踪。
除了本地产生的包由 OUTPUT 链处理外,所有连接跟踪都是在 PREROUTING 链里进行处理的,意思就是说 iptables 会在 PREROUTING 链 里重新计算所有的状态。如果我们发送一个流的初始化包,状态就会在 OUTPUT 链里被设置为 NEW,当我们收到回应的包时,状态就会在 PREROUTING 链里被设置为 ESTABLISHED。如果第一个包不是本地产生的,那就会在 PREROUTING 链里被设置为 NEW 状态。综上所述,所 有状态的改变和计算都是在 nat 表中的 PREROUTING 链和 OUTPUT 链里完成的。
正如前面说的, 包的状态依据 IP 所包含的协议不同而不同, 但在内核外部, 也就是用户空间里, 只有 4 种状态: NEW、 ESTABLISHED、 RELATED 和 INVALID。它们主要是和状态匹配一起使用。 NEW
NEW 说明这个包是我们看到的第一个包。意思就是,这是 conntrack 模块看到的某个连接第一个包,它即将被匹配了。比如,我们看到一个 SYN 包,是我们所留意的连接的第一个包,就要匹配它。第一个包也可能不是 SYN 包,但它仍会被认为是 NEW 状态。
ESTABLISHED
ESTABLISHED 已经注意到两个方向上的数据传输,而且会继续匹配这个连接的包。处于 ESTABLISHED 状态的连接是非常容易理解的。只 要发送并接到应答,连接就是 ESTABLISHED 的了。一个连接要从 NEW 变为 ESTABLISHED,只需要接到应答包即可,不管这个包是发往防火墙 的,还是要由防火墙转发的。ICMP 的错误和重定向等
page 33
信息包也被看作是 ESTABLISHED,只要它们是我们所发出的信息的应答。 RELATED
RELATED 是个比较麻烦的状态。当一个连接和某个已处于 ESTABLISHED 状态的连接有关系时,就被认为是 RELATED 的了。换句话说,一 个连接要想是 RELATED 的,首先要有一个 ESTABLISHED 的连接。这个 ESTABLISHED 连接再产生一个主连接之外的连接,这个新的连接就是 RELATED 的了,当然前提是 conntrack 模块要能理解 RELATED。ftp 是个很好的例子,FTP-data 连接就是和 FTP-control 有 RELATED 的。
INVALID
INVALID 说明数据包不能被识别属于哪个连接或没有任何状态。 有几个原因可以产生这种情况, 比如, 内存溢出, 收到不知属于哪个连接的 ICMP 错误信息。一般地,我们 DROP 这个状态的任何东西。
这些状态可以一起使用,以便匹配数据包。这可以使我们的防火墙非常强壮和有效。以前,我们经常打开 1024 以上的所有端口来放行应答的 数据。现在,有了状态机制,就不需再这样了。因为我们可以只开放那些有应答数据的端口,其他的都可以关闭。这样就安全多了。
iptables 基础和应用- 技术文档- - 资料共享- 51CTO 技术论坛-中国最大的 基础和应用 技术文档 资料共享 技术论坛 中国最大的 51CTO 技术论坛资料共享技术文档 iptables 基础和应用- Discuz! Board. IT 技术自测, > 意见建议. 标题: iptables 基础和应用 ( 查看:166 回复:8 ). 全文, 标题. 本版搜索, 全坛搜索. lnan 技术员 点击可查看详细 注册日期 2006-4-1. 最后登录 2007-3-26 http://bbs.51cto.com/thread-123455-1-1.html
iptables 基础和应用 网络安全技术频道 安全资讯 安全基础 病毒专区 基础和应用- 网络安全技术频道| 安全资讯| 安全基础| iptables 基础和应用,安全资讯,安全资讯,eNet 硅谷动力网络安全频道, 中国最大, 信息最全的网络安全网站, 提供最新网络安全资讯, 即时病毒播报, 4.1.1 Set policies # 定义安全为正面表列 ¥IPTABLES -P INPUT DROP ¥IPTABLES -P OUTPUT DROP
http://www.stcore.com/security/2006-09-18/1158543336d104557_7.html 壹、什么是防火墙
防火墙是一套能够在两个或两个以上的网络之间,明显区隔出实体线路联机的软硬件设备组合。被区隔开来的网络,可以透过封包转送技术来 相互通讯,透过防火墙的安全管理机制,可以决定哪些数据可以流通,哪些资料无法流通,藉此达到网络安全保护的目的。
防火墙产品可以概略归类为硬件式防火墙和软件式防火墙,但实际上无论是硬件式或软件式防火墙,它们都需要使用硬件来作为联机介接,也 需要使用软件来设定安全,严格说两者间的差别并不太大。我们只能从使用的硬件与操作系统来加以区分,硬件式防火墙是使用专有的硬件, 而软件式防火墙则使用一般的计算机硬件,硬件式防火墙使用专有的操作系统,而软件式防火墙则使用一般的操作系统。
防火墙依照其运作方式来分类,可以区分为封包过滤式防火墙 (Packet Filter) 、应用层网关式防火墙 (Application-Level Gateway,也有人把 它称为 Proxy 防火墙)、电路层网关式防火墙 (Circuit-Level Gateway)。其中被广为采用的是封包过滤式防火墙,本文要介绍的 iptables 防火墙就 是属于这一种。
封包过滤是最早被实作出来的防火墙技术,它是在 TCP/IP 四层架构下的 IP 层中运作。封包过滤器的功能主要是检查通过的每一个 IP 数据 封包, 如果其标头中所含的数据内容符合过滤条件的设定就进行进一步的处理, 主要的处理方式包含: (accept) 丢弃 放行 、 (drop) 或拒绝 (reject) 。 要进行封包过滤,防火墙必须要能分析通过封包的来源 IP 与目的地 IP,还必须能检查封包类型、来源埠号与目的埠号、封包流向、封包进入防火 墙的网卡接口、TCP 的联机状态等数据。 防火墙由于种种理由价格一直居高不下,对于贫穷的中小学来讲要采购一台防火墙,简直是不可能的任务,而由于 Linux 的风行,使用 Linux 来充作软件式防火墙,似乎是不错的解决之道,本文拟介绍以 Linux 上最新最强大的 iptables 防火墙软件,建置出适合学校使用的过滤规则,让 缺钱的学校能有一套好用的防火墙来看守校
page 34
园网络的大门。
贰、Linux 防火墙演变简史
Linux 最早出现的防火墙软件称为 ipfw,ipfw 能透过 IP 封包标头的分析,分辨出封包的来源 IP 与目的地 IP、封包类型、来源埠号与目的 埠号、封包流向、封包进入防火墙的网卡界面……等,并藉此分析结果来比对规则进行封包过滤,同时也支持 IP 伪装的功能,利用这个功能可以 解决 IP 不足的问题,可惜这支程序缺乏弹性设计,无法自行建立规则组合(ruleset)作更精简的设定,同时也缺乏网址转译功能,无法应付越来 越复杂的网络环境,而逐渐被淘汰。
取而代之的 ipchains,不但指令语法更容易理解,功能也较 ipfw 优越;ipchains 允许自订规则组合(ruleset),称之为 user-define chains, 透过这种设计,我们可以将彼此相关的规则组合在一起,在需要的时候跳到该组规则进行过滤,有效将规则的数量大幅缩减,以往 ipfw 仅能进行 循序过滤,导致规则又臭又长的毛病,就不药而愈了。除了这个明显的好处以外,ipchains 并能结合本身的端口对应功能和 redir 程序的封包转送 机制,模拟出网址转译的能力,而满足 NAT 的完整需求,堪称为一套成熟的防火墙作品。
防火墙软件的出现,确实曾经让骇客们晚上睡不着觉,因为防火墙的阻隔能够有效让内部网络不设防的单机不致于暴露在外,也能有效降低服 务器的能见度,减少被攻击的机会,骇客过去所用的网络探测技术因此受到严格的挑战,越来越多的攻击对象躲藏在防火墙后方,让骇客难以接近, 因此必须针对新的情势,研究出新的探测技术,藉以规避防火墙的检查,达到发现目标并进而攻击入侵的目的,新的技术非常多,本文并不拟进一 步讨论,请自行参考 CERT 组织的技术文件,网址是 www.cert.org ,想看中文请连到 www.cert.org.tw。
iptables 作为 ipchains 的新一代继承人,当然也针对骇客不断推陈出新的探测技术拟出一些因应之道,那就是对封包的联机状态,作出更详 细的分析,例如:是否为新联机或响应封包、是否为转向联机、联机是否失去响应,联机时间是否过长……等等,透过这样的分析能对一些可能被 骇客利用的弱点加以阻隔 (请详见后文的说明) 另外也开发出真正的封包改写能力, , 不需要透过其它程序的协助来仿真网址转译, 除此之外, iptables 也获得系统核心的直接支持,不需要像 ipchains 那样需要自行重新编译核心。
iptables 优越的性能使它取代了 ipchains,成为网络防火墙的主流,而 ipchains 并未被淘汰,目前 ipchains 已经转型成单机防火墙,在安 装新版 Linux 时,会自动被安装启用,以保护单机上未被使用的通讯端口。 参、iptables 防火墙概论
iptables 防火墙的指令非常类似于 ipchains,使用过 ipchains 的人应该很容易上手,但是 iptables 的机制与 ipchains 有很大的不同,使用 ipchains 的概念来设定规则,将会使防火墙无法正常运作。ipchains 跟 iptables 最大的不同在于对 INPUT、FORWARD 、OUTPUT 三个网络 函式的定义不同,这三个网络函式是 TCP/IP 驱动程序的一部分,结构如下图所示,是介于网卡驱动程序和应用程序的中间,Linux 核心预设会启 用 INPUT、OUTPUT 和 LOOPBACK,而 FORWARD 函式则必须自行启用,可以使用下面指令,或直接修改 /etc/sysconfig/network 组态档: echo "1" > /proc/sys/net/ipv4/ip_forward 左图为 ipchains 概念下的运作图
从上图可以知道 ipchains 如何处理封包的流动,分述如下:
IP INPUT:所有封包都由 IP INPUT 函式负责处理,所以设定过滤规则时,几乎都是设定在 INPUT 规则炼上。
IP FORWARD:目的 IP 非本机的 IP,这些封包需要进一步作转送处理,此函式用来处理 IP 伪装和 Port 转送。
IP OUTPUT:所有流出的封包都由这个函式处理,通常不需设定任何规则。 iptables 除了上述三支函式以外,还使用两个新的函式:Prerouting、Postrouting。现在来比较一下 iptables 的运作模式(loopback 接口与 上图相同,所以省略不画):
从上图可以知道 iptables 如何处理封包的流动,分述如下:
page 35
IP INPUT:只有要到达本机的封包才会 由 INPUT 函式处理,所以会让来自内部网络的封包无条件放行,来自外部网络的封包则过滤是否为 响应封包,若是则放行。 PREROUTING:需要转送处理的封包由此函式负责处理,此函式用来做目的地 IP 的转译动作(DNAT)。
IP FORWARD:所有转送封包都在这里处理,这部分的过滤规则最复杂。
POSTROUTING:转送封包送出之前,先透过这个函式进行来源 IP 的转译动作(SNAT)。
IP OUTPUT:从本机送出去的封包由这个函式处理,通常会放行所有封包。 iptables 和 ipchains 都可以自行定义规则群组(rule-set),规则群组被称为规则炼(chains),前面所描述的函式,也都有相对应的规则炼 (INPUT、 FORWARD、OUTPUT、Prerouting、Postrouting),为了有别于自行定义的规则炼,这些规则炼我们就称为内建规则炼,其运作流 程仿真如下图:
从上面两张假想图,学员们不难了解 ipchains 为什么要叫做 chains,因为它是将所有规则串接成一个序列逐一检查过滤,就像一条铁链一样 一个环接一个环,在过滤过程中只要符合其中一条规则就会立即进行处理,如果处理动作是跳到某个规则群组,则继续检查群组内之规则设定,但 如果处理动作是 ACCEPT、REJECT、DROP、REDIRECT 或 MASQUERADE,则会中断过滤程序,而不再继续检查后面的规则设定,在这样 的结构之下,有时候规则顺序的对调会产生完全相反的结果,这一点在设定防火墙时不能不谨慎。
而 iptables 是采用规则堆栈的方式来进行过滤,当一个封包进入网卡,会先检查 Prerouting,然后检查目的 IP 判断是否需要转送出去,接 着就会跳到 INPUT 或 Forward 进行过滤,如果封包需转送处理则检查 Postrouting,如果是来自本机封包,则检查 OUTPUT 以及 Postrouting。 过程中如果符合某条规则将会进行处理, 处理动作除了 ACCEPT、 REJECT、 DROP、 REDIRECT 和 MASQUERADE 以外, 还多出 LOG、 ULOG、 DNAT、SNAT、MIRROR、QUEUE、RETURN、TOS、TTL、MARK 等,其中某些处理动作不会中断过滤程序,某些处理动作则会中断同一规则 炼的过滤,并依照前述流程继续进行下一个规则炼的过滤(注意:这一点与 ipchains 不同),一直到堆栈中的规则检查完毕为止。透过这种机制 所带来的好处是,我们可以进行复杂、多重的封包过滤,简单的说,iptables 可以进行纵横交错式的过滤(tables)而非炼状过滤(chains)。
虽然 iptables 为了扩充防火墙功能,而必须采用比较复杂的过滤流程,但在实际应用时,同一规则炼下的规则设定还是有先后顺序的关系, 因此在设定规则时还是必须注意其中的逻辑。
肆、订定校园网络安全
在实际设定防火墙之前,我们必须根据校园网络的安全需求,先拟定一份安全,拟定安全前必须搜集以下资料: 1. 找出需要过滤保护的服务器
2. 条列出被保护的服务器将提供何种网络服务 3. 一般工作站,需要何种等级的保护 4. 了解网络架构与服务器摆放位置
根据这些数据,我们可以决定安全,以石牌国小为例:
1. 校内使用 NAT 虚拟网络,IP 数量需要两组 C,所有 IP 均需作 IP 伪装 2. 校园内安全需求不高,服务器与工作站摆在同一网段,不需采用 DMZ 设计 3. 由于服务器功能经常扩充,所有服务器均采用一对一对应,不使用 port 转送功能
4. 所有工作站均能自由使用网络资源,不只能看网页
5. 服务器提供之服务包含:dns、web、mail、ftp、wam、webmin、ssh、rdp、pcaw,不提供 proxy 及其它网络服务
6. 为增进校园网络之安全性,采用正面表列方式进行封包过滤(定义想放行之封包,其余封包一律阻挡)
还有一些网络安全须注意的事项,则是每所学校都应防范的,没有等差之别,例
page 36
如:联机被绑架、阻断式攻击、连接端口扫描……等。 伍、iptables 指令 语法:
iptables [-t table] command [match] [-j target/jump]
-t 参数用来指定规则表,内建的规则表有三个,分别是:nat、mangle 和 filter,当未指定规则表时,则一律视为是 filter。各个规则表的功能 如下:
nat 此规则表拥有 Prerouting 和 postrouting 两个规则炼,主要功能为进行一对一、一对多、多对多等网址转译工作(SNAT、DNAT),由 于转译工作的特性,需进行目的地网址转译的封包,就不需要进行来源网址转译,反之亦然,因此为了提升改写封包的效率,在防火墙运作时,每 个封包只会经过这个规则表一次。如果我们把封包过滤的规则定义在这个数据表里,将会造成无法对同一封包进行多次比对,因此这个规则表除了 作网址转译外,请不要做其它用途。
mangle 此规则表拥有 Prerouting、FORWARD 和 postrouting 三个规则炼。 除了进行网址转译工作会改写封包外,在某些特殊应用可能也必须去改写封包(TTL、TOS)或者是设定 MARK(将封包作记号,以便进行后 续的过滤),这时就必须将这些工作定义在 mangle 规则表中,由于使用率不高,我们不打算在这里讨论 mangle 的用法。
filter 这个规则表是预设规则表,拥有 INPUT、FORWARD 和 OUTPUT 三个规则炼,这个规则表顾名思义是用来进行封包过滤的处理动作 (例如:DROP、 LOG、 ACCEPT 或 REJECT),我们会将基本规则都建立在此规则表中。 常用命令列表: 命令 -A, --append
范例 iptables -A INPUT ……
说明 新增规则到某个规则炼中,该规则将会成为规则炼中的最后一条规则。 命令 -D, --delete
范例 iptables -D INPUT --dport 80 -j DROP iptables -D INPUT 1
说明 从某个规则炼中删除一条规则,可以输入完整规则,或直接指定规则编号加以删除。
命令 -R, --replace
范例 iptables -R INPUT 1 -s 192.168.0.1 -j DROP 说明 取代现行规则,规则被取代后并不会改变顺序。 命令 -I, --insert
范例 iptables -I INPUT 1 --dport 80 -j ACCEPT
说明 插入一条规则,原本该位置上的规则将会往后移动一个顺位。 命令 -L, --list
范例 iptables -L INPUT
说明 列出某规则炼中的所有规则。 命令 -F, --flush
范例 iptables -F INPUT
说明 删除某规则炼中的所有规则。 命令 -Z, --zero
范例 iptables -Z INPUT
说明 将封包计数器归零。封包计数器是用来计算同一封包出现次数,是过滤阻断式攻击不可或缺的工具。 命令 -N, --new-chain 范例 iptables -N allowed 说明 定义新的规则炼。 命令 -X, --delete-chain 范例 iptables -X allowed 说明 删除某个规则炼。 命令 -P, --policy
page 37
范例 iptables -P INPUT DROP
说明 定义过滤。 也就是未符合过滤条件之封包,预设的处理方式。 命令 -E, --rename-chain
范例 iptables -E allowed disallowed 说明 修改某自订规则炼的名称。 常用封包比对参数: 参数 -p, --protocol
范例 iptables -A INPUT -p tcp
说明 比对通讯协议类型是否相符,可以使用 ! 运算子进行反向比对,例如:-p ! tcp ,意思是指除 tcp 以外的其它类型,包含 udp、icmp …… 等。如果要比对所有类型,则可以使用 all 关键词,例如:-p all。 参数 -s, --src, --source
范例 iptables -A INPUT -s 192.168.1.1
说明 用来比对封包的来源 IP, 可以比对单机或网络, 比对网络时请用数字来表示屏蔽, 例如: 192.168.0.0/24, -s 比对 IP 时也可以使用 ! 运 算子进行反向比对,例如:-s ! 192.168.0.0/24。 参数 -d, --dst, --destination
范例 iptables -A INPUT -d 192.168.1.1
说明 用来比对封包的目的地 IP,设定方式同上。 参数 -i, --in-interface
范例 iptables -A INPUT -i eth0
说明 用来比对封包是从哪片网卡进入,可以使用通配字符 + 来做大范围比对,例如:-i eth+ 表示所有的 ethernet 网卡,也可以使用 ! 运算 子进行反向比对,例如:-i ! eth0。
参数 -o, --out-interface
范例 iptables -A FORWARD -o eth0
说明 用来比对封包要从哪片网卡送出,设定方式同上。 参数 --sport, --source-port
范例 iptables -A INPUT -p tcp --sport 22
说明 用来比对封包的来源埠号,可以比对单一埠,或是一个范围,例如:--sport 22:80,表示从 22 到 80 埠之间都算是符合条件,如果要 比对不连续的多个埠,则必须使用 --multiport 参数,详见后文。比对埠号时,可以使用 ! 运算子进行反向比对。
参数 --dport, --destination-port
范例 iptables -A INPUT -p tcp --dport 22
说明 用来比对封包的目的地埠号,设定方式同上。 参数 --tcp-flags
范例 iptables -p tcp --tcp-flags SYN,FIN,ACK SYN
说明 比对 TCP 封包的状态旗号,参数分为两个部分,第一个部分列举出想比对的旗号,第二部分则列举前述旗号中哪些有被设定,未被列 举的旗号必须是空的。TCP 状态旗号包括:SYN(同步)、ACK(应答)、FIN(结束)、RST(重设)、URG(紧急)、PSH(强迫推送)等 均可使用于参数中,除此之外还可以使用关键词 ALL 和 NONE 进行比对。比对旗号时,可以使用 ! 运算子进行反向比对。 参数 --syn
范例 iptables -p tcp --syn
说明 用来比对是否为要求联机之 TCP 封包,与 iptables -p tcp --tcp-flags SYN,FIN,ACK SYN 的作用完全相同,如果使用 ! 运算子,可用 来比对非要求联机封包。
参数 -m multiport --source-port
范例 iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110 说明 用来比对不连续的多个来源埠号,一次最多可以比对 15 个埠,可以使用
page 38
! 运算子进行反向比对。
参数 -m multiport --destination-port
范例 iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80,110
说明 用来比对不连续的多个目的地埠号,设定方式同上。 参数 -m multiport --port
范例 iptables -A INPUT -p tcp -m multiport --port 22,53,80,110
说明 这个参数比较特殊,用来比对来源埠号和目的埠号相同的封包,设定方式同上。注意:在本范例中,如果来源端口号为 80 但目的地埠 号为 110,这种封包并不算符合条件。
参数 --icmp-type
范例 iptables -A INPUT -p icmp --icmp-type 8
说明 用来比对 ICMP 的类型编号,可以使用代码或数字编号来进行比对。请打 iptables -p icmp --help 来查看有哪些代码可以用。 参数 -m limit --limit
范例 iptables -A INPUT -m limit --limit 3/hour
说明 用来比对某段时间内封包的平均流量,上面的例子是用来比对:每小时平均流量是否超过一次 3 个封包。除了每小时平均一次外,也可 以每秒钟、每分钟或每天平均一次,默认值为每小时平均一次,参数如后: /second、 /minute、/day。除了进行封包数量的比对外,设定这个参 数也会在条件达成时,暂停封包的比对动作,以避免因骇客使用洪水攻击法,导致服务被阻断。 参数 --limit-burst
范例 iptables -A INPUT -m limit --limit-burst 5
说明 用来比对瞬间大量封包的数量,上面的例子是用来比对一次同时涌入的封包是否超过 5 个(这是默认值),超过此上限的封包将被直接 丢弃。使用效果同上。
参数 -m mac --mac-source
范例 iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01
说明 用来比对封包来源网络接口的硬件地址,这个参数不能用在 OUTPUT 和 Postrouting 规则炼上,这是因为封包要送出到网卡后,才能 由网卡驱动程序透过 ARP 通讯协议查出目的地的 MAC 地址,所以 iptables 在进行封包比对时,并不知道封包会送到哪个网络接口去。 参数 --mark
范例 iptables -t mangle -A INPUT -m mark --mark 1
说明 用来比对封包是否被表示某个号码,当封包被比对成功时,我们可以透过 MARK 处理动作,将该封包标示一个号码,号码最大不可以超 过 4294967296。 参数 -m owner --uid-owner
范例 iptables -A OUTPUT -m owner --uid-owner 500
说明 用来比对来自本机的封包,是否为某特定使用者所产生的,这样可以避免服务器使用 root 或其它身分将敏感数据传送出去,可以降低系 统被骇的损失。可惜这个功能无法比对出来自其它主机的封包。 参数 -m owner --gid-owner
范例 iptables -A OUTPUT -m owner --gid-owner 0
说明 用来比对来自本机的封包,是否为某特定使用者群组所产生的,使用时机同上。
参数 -m owner --pid-owner
范例 iptables -A OUTPUT -m owner --pid-owner 78
说明 用来比对来自本机的封包,是否为某特定行程所产生的,使用时机同上。 参数 -m owner --sid-owner
范例 iptables -A OUTPUT -m owner --sid-owner 100
说明 用来比对来自本机的封包,是否为某特定联机(Session ID)的响应封包
page 39
,使用时机同上。
参数 -m state --state
范例 iptables -A INPUT -m state --state RELATED,ESTABLISHED
说明 用来比对联机状态,联机状态共有四种:INVALID、ESTABLISHED、NEW 和 RELATED。
INVALID 表示该封包的联机编号(Session ID)无法辨识或编号不正确。 ESTABLISHED 表示该封包属于某个已经建立的联机。
NEW 表示该封包想要起始一个联机(重设联机或将联机重导向)。
RELATED 表示该封包是属于某个已经建立的联机,所建立的新联机。例如:FTP-DATA 联机必定是源自某个 FTP 联机。 常用的处理动作:
-j 参数用来指定要进行的处理动作, 常用的处理动作包括: ACCEPT、 REJECT、 DROP、 REDIRECT、 MASQUERADE、 LOG、 DNAT、 SNAT、 MIRROR、QUEUE、RETURN、MARK,分别说明如下:
ACCEPT 将封包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则炼(nat:postrouting)。
REJECT 拦阻该封包,并传送封包通知对方,可以传送的封包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(这个 封包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接 中断过滤程序。 范例如下:
iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset
DROP 丢弃封包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
REDIRECT 将封包重新导向到另一个端口(PNAT),进行完此处理动作后,将 会继续比对其它规则。 这个功能可以用来实作通透式 porxy 或用来保护 web 服务器。例如:iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
MASQUERADE 改写封包来源 IP 为防火墙 NIC IP,可以指定 port 对应的范围,进行完此处理动作后,直接跳往下一个规则炼 (mangle:postrouting)。这个功能与 SNAT 略有不同,当进行 IP 伪装时,不需指定要伪装成哪个 IP,IP 会从网卡直接读取,当使用拨接连线 时,IP 通常是由 ISP 公司的 DHCP 服务器指派的,这个时候 MASQUERADE 特别有用。范例如下:
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000
LOG 将封包相关讯息纪录在 /var/log 中,详细位置请查阅 /etc/syslog.conf 组态档,进行完此处理动作后,将会继续比对其它规则。例如:
iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets"
SNAT 改写封包来源 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将直接跳往下一个规则炼 (mangle:postrouting)。范例如下:
iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000
DNAT 改写封包目的地 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将会直接跳往下一个规则炼 (filter:input 或 filter:forward)。范例如下:
iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10:80-100
MIRROR 镜射封包,也就是将来源 IP 与目的地 IP 对调后,将封包送回,进行完此处理动作后,将会中断过滤程序。
QUEUE 中断过滤程序,将封包放入队列,交给其它程序处理。透过自行开发的处理程序,可以进行其它应用,例如:计算联机费用……等。
page 40
RETURN 结束在目前规则炼中的过滤程序,返回主规则炼继续过滤,如果把自订规则炼看成是一个子程序,那么这个动作,就相当于提早结 束子程序并返回到主程序中。
MARK 将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则。范例如下:
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2
iptables 基础和应用 iptables 基础, 绝对的基础使用 iptables 建置 Linux 防火墙作者: 李忠宪 shane@mail.spps.tp.edu.tw 2002/11/28 范例如下: iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2 陆、应用实例 #!/bin/sh http://xuexi.hao500.net/unix/a288739.htm
iptables 基础和应用 iptables 基础和应用,iptables 基础和应用. 2. 在防火墙上设定规则,仅允许来自内部的网络,进行 HTTP 和 MySql 联机,这个方法比较简单,本 文所介绍的 iptables 范例也是采用此法,缺点是无法在校外查看 LOG 分析结果 http://www.myfaq.com.cn/2005September/2005-09-13/208446.html 陆、应用实例 #!/bin/sh #
# 石牌国小防火墙设定指令稿 # 2002/8/27
# 设定者:李忠宪(修改自 iptables tutorial 1.1.11 by Oskar Andreasson )
# 原文件是依 DMZ 需求设计,已根据校园 NAT 网络之需求修改,其余改动部份包括:
# 新增通讯协议定义区块
# 新增执行时,自动清除已设定之规则 # 支援 FTP
# 修改所有规则,改采 multiport 方式以简化规则
# 原文件仅支持 IP 伪装(多对一对应),已扩充为支持一对一对应及多对多对应
# 原文件仅支援 DNS 及 WEB,新增 ftp、mail、wam、PCAnywhere、ssh……等多种服务器
# 修改若干规则设定上的小错误 #
# Copyright (C) 2001 Oskar Andreasson #
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License. #
# This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. #
# You should have received a copy of the GNU General Public License # along with this program or from the site that you downloaded it # from; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA 02111-1307 USA
page 41
#
########################################################################### #
# 1. Configuration options. #
# 1.0 Protocols Configuration. # 定义会用到的通讯协议 HTTP="80" HTTPS="443" FTP="21"
FTP_DATA="20" SMTP="25" POP3="110" IMAP="143" SSH="22" TELNET="23" PCAW_TCP="5631" PCAW_UDP="5632" WEBMIN="10000" WAM="12000" DNS="53" #
# 1.1 Internet Configuration. #
# 定义 NIC IP 及 WAN 接口 INET_IP="163.21.xxx.253" HTTP1_IP="163.21.xxx.2" HTTP2_IP="163.21.xxx.4" HTTP3_IP="163.21.xxx.9" HTTP4_IP="163.21.xxx.6" HTTP5_IP="163.21.xxx.7" HTTP6_IP="163.21.xxx.10" FTP1_IP="163.21.xxx.2" FTP2_IP="163.21.xxx.6" FTP3_IP="163.21.xxx.7" MAIL1_IP="163.21.xxx.6" MAIL2_IP="163.21.xxx.7" PCAW1_IP="163.21.xxx.2" PCAW2_IP="163.21.xxx.4" WAM1_IP="163.21.xxx.6" WAM2_IP="163.21.xxx.7" DNS_IP="163.21.xxx.2"
IP_POOL="163.21.xxx.240-163.21.xxx.250" INET_IFACE="eth1" #
# 1.2 Local Area Network configuration. #
# 定义 NAT IP 及 LAN 接口 LAN_IP="192.168.1.253" LAN_HTTP1_IP="192.168.1.2" LAN_HTTP2_IP="192.168.1.4"
page 42
LAN_HTTP3_IP="192.168.1.9" LAN_HTTP4_IP="192.168.1.6" LAN_HTTP5_IP="192.168.1.7" LAN_HTTP6_IP="192.168.1.53" LAN_FTP1_IP="192.168.1.2" LAN_FTP2_IP="192.168.1.6" LAN_FTP3_IP="192.168.1.7" LAN_MAIL1_IP="192.168.1.6" LAN_MAIL2_IP="192.168.1.7" LAN_PCAW1_IP="192.168.1.2" LAN_PCAW2_IP="192.168.1.4" LAN_WAM1_IP="192.168.1.6" LAN_WAM2_IP="192.168.1.7" LAN_DNS_IP="192.168.1.2"
LAN_IP_RANGE="192.168.0.0/16"
LAN_BROADCAST_ADDRESS="192.168.1.255" LAN_IFACE="eth0" #
# 1.4 Localhost Configuration. #
# 定义 Loopback IP 及接口 LO_IFACE="lo" LO_IP="127.0.0.1" #
# 1.5 IPTables Configuration. #
# 设定 iptables 指令路径 IPTABLES="/sbin/iptables" #
# 1.6 Other Configuration. #
########################################################################### #
# 2. Module loading. # #
# Needed to initially load modules # 整理核心支持模块之清单 /sbin/depmod -a #
# 2.1 Required modules # 加载会用到的模块
/sbin/modprobe ip_tables /sbin/modprobe ip_conntrack /sbin/modprobe iptable_filter /sbin/modprobe iptable_mangle /sbin/modprobe iptable_nat /sbin/modprobe ipt_LOG /sbin/modprobe ipt_limit /sbin/modprobe ipt_state
/sbin/modprobe ip_conntrack_ftp
page 43
/sbin/modprobe ip_nat_ftp #
# 2.2 Non-Required modules # 其余未使用之模块
#/sbin/modprobe ipt_owner #/sbin/modprobe ipt_REJECT #/sbin/modprobe ipt_MASQUERADE #/sbin/modprobe ip_conntrack_irc #/sbin/modprobe ip_nat_irc
########################################################################### #
# 3. /proc set up. # #
# 3.1 Required proc configuration # 启动 Forward 接口
echo "1" > /proc/sys/net/ipv4/ip_forward #
# 3.2 Non-Required proc configuration # 其余未使用之接口
#echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter #echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp #echo "1" > /proc/sys/net/ipv4/ip_dynaddr
########################################################################### #
# 4. rules set up. #
######
# 4.1 Filter table #
# 4.1.0 Reset the default policies in the nat table. # 清除所有已设定之规则,回复到不设防状态 ¥IPTABLES -P INPUT ACCEPT ¥IPTABLES -P FORWARD ACCEPT ¥IPTABLES -P OUTPUT ACCEPT
¥IPTABLES -t nat -P PREROUTING ACCEPT ¥IPTABLES -t nat -P POSTROUTING ACCEPT ¥IPTABLES -t nat -P OUTPUT ACCEPT
¥IPTABLES -t mangle -P PREROUTING ACCEPT ¥IPTABLES -t mangle -P OUTPUT ACCEPT ¥IPTABLES -F
¥IPTABLES -t nat -F ¥IPTABLES -t mangle -F ¥IPTABLES -X
¥IPTABLES -t nat -X ¥IPTABLES -t mangle -X
page 44
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- obuygou.com 版权所有 赣ICP备2024042798号-5
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务