防火墙技术
时间:2006-03-25 来源:dongjincai
1)功能:
1>把内网和外网(如Internet)隔离
2>限定外网上的哪些系统(IP和主机名)可以使用内网的哪些服务(如http\ssh\telne\mail)与内网连接
2)内网与外网的所有交互都要通过防火墙这台机器
1>它能阻止对某些内部端口的访问
2>把已知的端口重定向到受保护的端口
3>过滤进入的数据以检查是否有病毒及非法数据
3)但由于某个员工使用了一台不安全的移动电脑和一根电话线,则可能会使用精心构筑的防火墙被损害
1>如果有移动用户,则同样也要注意加固他们的安全
2>启动TCP Wrapper
3>禁止不需要的服务(包括telnet和ftp)
4>安装ssh
4)在/etc/ppp/if-up中添加一个表项来关掉eth0接口,再在if-down中添加一个表项把它打开,这样,调制解调器和公司的以太网之间没有一个路径,从而可以阻止一些黑客。可是聪明的黑客还是可以在一台膝上电脑里安装一个特别的木马程序,这个程序会等待eth0回来打开或自己打开
5)如果防火墙里面的机器上有调制解调器,那么这些调制解调器所而是主要的攻击目标
使用IP Chain和DMZ的防火墙,调制解调器应放在DMZ中,与拨入的电话线相关联的Virtual Private Network (虚拟专用网络,VPN)软件可以有助于你的网络保持安全。因此VPN应该处于一台膝上型电脑和你的内部网之间
可以得到一些Liinux的VPN组件 http://www.linuxdoc.org/HOWTO/VPN_HOWTO.html
http://www.linuxdoc.org/HOWTO/mini/VPN.html
http://linux.tucows.com
http://freshmeat.org
6)另外把那些带有提供拨入访问的调制解调器的公司系统配置成防火墙本身。典型情况下只有系统中允许登陆的账户(除根外)拥有pppd, PPP守护进程来用于其的登录shell。为了提供额外的保护,使得这些主机上带有调制解调器的系统与你的内网之间有一个分隔的防火墙,则应在你的非军事区(Demilitarized Zone, DMZ)中放置这些系统。
7)防火墙规则将只允许到类似SSH的端口和其他加密过的安全协议,如http\imap(SSL包装的IMAP)和pop3(SSL包装的pop3)的通信。这些系统还需要允许UDP端口53(DNS请求)从用于你的拨入用户(膝上型电脑和本地系统)的ppp接口启动.
8)防火墙后面的拨出电话线也是一个安全漏洞。网络是一个双向管道。如果数据能出去,那么它也能进来(但你不希望机密数据也流出去)
9)对于非移动计算机,要考虑去掉所有的调制解调器和软盘驱动器,移去上面的pppd\diald\cu\tip程序,还有任何其他支持调制解调器的软件(在非Linux平台上移去等价的软件)。考滤撤消调制解调器设备(典型情况下为/dev/cua* 和/dev/ttys*),并在cmos(bios)中禁用他们。
10)通过在一个防火墙允许的端口的顶层上运行一段程序而不是运行标准的telnet或该端口顶层上的浏览器来使用该端口(如23(telnet), 80(www))。对于这种情况pppd程序工作得很好,它只需建立一个新的“网络”设备,所有的流量都经过这个设备,使用你的保护不起作用。参考http://www.linuxdoc.org/HOWTO/mini/...l-Piercing.html
11)许多微软的产品用某种SOAP通过端口80(www)通信,微软官方选项可从http://msdn.microsoft.com/library/p...riod00/soap.com
因为soap作为一种传输机制信赖于HTTP,而且大多数防火墙允许http通过,所以从防火墙的任何一边调用soap端点,都不会遇到问题。 对于好的系统管理员来说,通过用soap特定的http报文标题可以把防火墙配置成有选择地阻止soap请求.
==========================================================
7.2. 使用 IPTables
使用 IPTables 的第一步是启动 IPTables 服务。这可以使用以下命令进行:
service iptables start
警告 你应该使用以下命令关闭 IP6Tables 服务才能使用 IPTables 服务:
service ip6tables stopchkconfig ip6tables off
要使 IPTables 在系统引导时默认启动,你必须使用 chkconfig 来改变服务的运行级别状态。
chkconfig --level 345 iptables onIPTables 的语法被分成几个层次。主要层次为“链”(chain)。“链”指定处理分组的状态。其用法为:
iptables -A chain -j target-A 在现存的规则集合内后补一条规则。chain 是规则所在“链”的名称。IPTables 中有三个内建的链(即影响每一个在网络中经过的分组的链):INPUT、OUTPUT、和 FORWARD。这些链是永久性的,不能被删除。
重要 在创建 IPTables 规则集合时,记住规则的顺序是至关重要的。例如:如果某个链指定了来自本地子网 192.168.100.0/24 的任何分组都应放弃,然后一个允许来自 192.168.100.13(在前面要放弃分组的子网范围内)的分组的链被补在这个规则后面(-A),那么这个后补的规则就会被忽略。你必须首先设置允许 192.168.100.13 的规则,然后再设置放弃规则。
要在现存规则链的任意处插入一条规则,使用 -I,随后是你想插入规则的链的名称,然后是你想放置规则的位置号码(1,2,3,...,n)。例如:
iptables -I INPUT 1 -i lo -p all -j ACCEPT这条规则被插入为 INPUT 链的第一条规则,它允许本地环回设备上的交通。
7.2.1. 基本防火墙策略
在一开始就建立的某些基本策略为建构更详细的用户定义的规则奠定了基础。IPTables 使用策略(policy, -P)来创建默认规则。对安全敏感的管理员通常想采取放弃所有分组、只逐一允许指定分组的策略。以下规则阻塞网络上所有的出入分组。
iptables -P INPUT DROPiptables -P OUTPUT DROP此外,还推荐你拒绝所有转发分组(forwarded packets) — 要从防火墙被选路发送到它的目标节点的网络交通 — 以便限制内部客户对互联网的无心暴露。要达到这个目的,使用以下规则:
iptables -P FORWARD DROP
注记 在处理添加的规则时,REJECT(拒绝)目标和 DROP(放弃)目标这两种行动有所不同。REJECT 会拒绝目标分组的进入,并给企图连接服务的用户返回一个 connection refused 的错误消息。DROP 会放弃分组,而对 telnet 用户不发出任何警告;不过,为了避免导致用户由于迷惑不解而不停试图连接的情况的发生,推荐你使用 REJECT 目标。
设置了策略链后,为你的特定网络和安全需要创建新规则。以下各节概述了一些你在建构 IPTables 防火墙时可能要实现的规则。
7.2.2. 保存和恢复 IPTables 规则
防火墙规则只在计算机处于开启状态时才有效。如果系统被重新引导,这些规则就会自动被清除并重设。要保存规则以便今后载入,请使用以下命令:
/sbin/service iptables save保存在 /etc/sysconfig/iptables 文件中的规则会在服务启动或重新启动时(包括机器被重新引导时)被应用。
7.3. 常用 iptables 过滤
把远程攻击者拒之“LAN”外是网络保安的一个重要方面。LAN 的完好性应该通过使用严格的防火墙规则来抵御蓄意不良的远程用户而被保护。但是,如果默认策略被设置为阻塞所有进入、输出、和转发的分组,防火墙/网关和内部 LAN 用户之间的通信就无法进行。要允许用户执行和网络相关的功能以及使用联网应用程序,管理员必须打开某些端口进行通信。
例如:要允许到防火墙上的端口80的通信,添加以下规则:
iptables -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT 这会允许用户浏览通过端口80通信的网站。要允许到安全网站(如 https://www.example.com/)的访问,你还必须打开端口443。
iptables -A INPUT -p tcp -m tcp --sport 443 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT 有时候,你可能会需要从 LAN 之外远程地进入 LAN。SSH 和 CIPE 之类的安全服务可以用于到 LAN 服务的加密远程连接。对于拥有基于 PPP 资源(如调制解调器池或批量 ISP 帐号)的管理员来说,拨号进入可以被用来安全地避开防火墙,因为调制解调器连接是直接连接,通常位于防火墙/网关之后。然而,对于有宽带连接的远程用户来说,你就需要制定些特殊规定。你可以配置 IPTables 接受来自远程 SSH 和 CIPE 客户的连接。例如,要允许远程 SSH 访问,你可以使用以下规则:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p udp --sport 22 -j ACCEPT来自外部的 CIPE 连接请求可以使用以下命令来接受(把 x 替换成你的设备号码):
iptables -A INPUT -p udp -i cipcbx -j ACCEPT
iptables -A OUTPUT -p udp -o cipcbx -j ACCEPT
CIPE 使用它自己的传输数据报(UDP)分组的虚拟设备,因此这条规则允许 cipcb 接口上的进入连接,而不是规定源地端口或目标端口(虽然它们可以被用来代替设备选项)。关于使用 CIPE 的信息,请参阅第6章 。
你可能还想为其它服务定义规则。关于 IPTables 及其各类选项的完整信息,请参阅《红帽企业 Linux 参考指南》。
这些规则允许到防火墙上的常规及安全服务的访问;然而,它们并不允许防火墙之后的机器使用这些服务。要允许 LAN 使用这些服务,你可以使用带有 IPTables 过滤规则的 NAT。
1>把内网和外网(如Internet)隔离
2>限定外网上的哪些系统(IP和主机名)可以使用内网的哪些服务(如http\ssh\telne\mail)与内网连接
2)内网与外网的所有交互都要通过防火墙这台机器
1>它能阻止对某些内部端口的访问
2>把已知的端口重定向到受保护的端口
3>过滤进入的数据以检查是否有病毒及非法数据
3)但由于某个员工使用了一台不安全的移动电脑和一根电话线,则可能会使用精心构筑的防火墙被损害
1>如果有移动用户,则同样也要注意加固他们的安全
2>启动TCP Wrapper
3>禁止不需要的服务(包括telnet和ftp)
4>安装ssh
4)在/etc/ppp/if-up中添加一个表项来关掉eth0接口,再在if-down中添加一个表项把它打开,这样,调制解调器和公司的以太网之间没有一个路径,从而可以阻止一些黑客。可是聪明的黑客还是可以在一台膝上电脑里安装一个特别的木马程序,这个程序会等待eth0回来打开或自己打开
5)如果防火墙里面的机器上有调制解调器,那么这些调制解调器所而是主要的攻击目标
使用IP Chain和DMZ的防火墙,调制解调器应放在DMZ中,与拨入的电话线相关联的Virtual Private Network (虚拟专用网络,VPN)软件可以有助于你的网络保持安全。因此VPN应该处于一台膝上型电脑和你的内部网之间
可以得到一些Liinux的VPN组件 http://www.linuxdoc.org/HOWTO/VPN_HOWTO.html
http://www.linuxdoc.org/HOWTO/mini/VPN.html
http://linux.tucows.com
http://freshmeat.org
6)另外把那些带有提供拨入访问的调制解调器的公司系统配置成防火墙本身。典型情况下只有系统中允许登陆的账户(除根外)拥有pppd, PPP守护进程来用于其的登录shell。为了提供额外的保护,使得这些主机上带有调制解调器的系统与你的内网之间有一个分隔的防火墙,则应在你的非军事区(Demilitarized Zone, DMZ)中放置这些系统。
7)防火墙规则将只允许到类似SSH的端口和其他加密过的安全协议,如http\imap(SSL包装的IMAP)和pop3(SSL包装的pop3)的通信。这些系统还需要允许UDP端口53(DNS请求)从用于你的拨入用户(膝上型电脑和本地系统)的ppp接口启动.
8)防火墙后面的拨出电话线也是一个安全漏洞。网络是一个双向管道。如果数据能出去,那么它也能进来(但你不希望机密数据也流出去)
9)对于非移动计算机,要考虑去掉所有的调制解调器和软盘驱动器,移去上面的pppd\diald\cu\tip程序,还有任何其他支持调制解调器的软件(在非Linux平台上移去等价的软件)。考滤撤消调制解调器设备(典型情况下为/dev/cua* 和/dev/ttys*),并在cmos(bios)中禁用他们。
10)通过在一个防火墙允许的端口的顶层上运行一段程序而不是运行标准的telnet或该端口顶层上的浏览器来使用该端口(如23(telnet), 80(www))。对于这种情况pppd程序工作得很好,它只需建立一个新的“网络”设备,所有的流量都经过这个设备,使用你的保护不起作用。参考http://www.linuxdoc.org/HOWTO/mini/...l-Piercing.html
11)许多微软的产品用某种SOAP通过端口80(www)通信,微软官方选项可从http://msdn.microsoft.com/library/p...riod00/soap.com
因为soap作为一种传输机制信赖于HTTP,而且大多数防火墙允许http通过,所以从防火墙的任何一边调用soap端点,都不会遇到问题。 对于好的系统管理员来说,通过用soap特定的http报文标题可以把防火墙配置成有选择地阻止soap请求.
==========================================================
7.2. 使用 IPTables
使用 IPTables 的第一步是启动 IPTables 服务。这可以使用以下命令进行:
service iptables start
警告 你应该使用以下命令关闭 IP6Tables 服务才能使用 IPTables 服务:
service ip6tables stopchkconfig ip6tables off
要使 IPTables 在系统引导时默认启动,你必须使用 chkconfig 来改变服务的运行级别状态。
chkconfig --level 345 iptables onIPTables 的语法被分成几个层次。主要层次为“链”(chain)。“链”指定处理分组的状态。其用法为:
iptables -A chain -j target-A 在现存的规则集合内后补一条规则。chain 是规则所在“链”的名称。IPTables 中有三个内建的链(即影响每一个在网络中经过的分组的链):INPUT、OUTPUT、和 FORWARD。这些链是永久性的,不能被删除。
重要 在创建 IPTables 规则集合时,记住规则的顺序是至关重要的。例如:如果某个链指定了来自本地子网 192.168.100.0/24 的任何分组都应放弃,然后一个允许来自 192.168.100.13(在前面要放弃分组的子网范围内)的分组的链被补在这个规则后面(-A),那么这个后补的规则就会被忽略。你必须首先设置允许 192.168.100.13 的规则,然后再设置放弃规则。
要在现存规则链的任意处插入一条规则,使用 -I,随后是你想插入规则的链的名称,然后是你想放置规则的位置号码(1,2,3,...,n)。例如:
iptables -I INPUT 1 -i lo -p all -j ACCEPT这条规则被插入为 INPUT 链的第一条规则,它允许本地环回设备上的交通。
7.2.1. 基本防火墙策略
在一开始就建立的某些基本策略为建构更详细的用户定义的规则奠定了基础。IPTables 使用策略(policy, -P)来创建默认规则。对安全敏感的管理员通常想采取放弃所有分组、只逐一允许指定分组的策略。以下规则阻塞网络上所有的出入分组。
iptables -P INPUT DROPiptables -P OUTPUT DROP此外,还推荐你拒绝所有转发分组(forwarded packets) — 要从防火墙被选路发送到它的目标节点的网络交通 — 以便限制内部客户对互联网的无心暴露。要达到这个目的,使用以下规则:
iptables -P FORWARD DROP
注记 在处理添加的规则时,REJECT(拒绝)目标和 DROP(放弃)目标这两种行动有所不同。REJECT 会拒绝目标分组的进入,并给企图连接服务的用户返回一个 connection refused 的错误消息。DROP 会放弃分组,而对 telnet 用户不发出任何警告;不过,为了避免导致用户由于迷惑不解而不停试图连接的情况的发生,推荐你使用 REJECT 目标。
设置了策略链后,为你的特定网络和安全需要创建新规则。以下各节概述了一些你在建构 IPTables 防火墙时可能要实现的规则。
7.2.2. 保存和恢复 IPTables 规则
防火墙规则只在计算机处于开启状态时才有效。如果系统被重新引导,这些规则就会自动被清除并重设。要保存规则以便今后载入,请使用以下命令:
/sbin/service iptables save保存在 /etc/sysconfig/iptables 文件中的规则会在服务启动或重新启动时(包括机器被重新引导时)被应用。
7.3. 常用 iptables 过滤
把远程攻击者拒之“LAN”外是网络保安的一个重要方面。LAN 的完好性应该通过使用严格的防火墙规则来抵御蓄意不良的远程用户而被保护。但是,如果默认策略被设置为阻塞所有进入、输出、和转发的分组,防火墙/网关和内部 LAN 用户之间的通信就无法进行。要允许用户执行和网络相关的功能以及使用联网应用程序,管理员必须打开某些端口进行通信。
例如:要允许到防火墙上的端口80的通信,添加以下规则:
iptables -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT 这会允许用户浏览通过端口80通信的网站。要允许到安全网站(如 https://www.example.com/)的访问,你还必须打开端口443。
iptables -A INPUT -p tcp -m tcp --sport 443 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT 有时候,你可能会需要从 LAN 之外远程地进入 LAN。SSH 和 CIPE 之类的安全服务可以用于到 LAN 服务的加密远程连接。对于拥有基于 PPP 资源(如调制解调器池或批量 ISP 帐号)的管理员来说,拨号进入可以被用来安全地避开防火墙,因为调制解调器连接是直接连接,通常位于防火墙/网关之后。然而,对于有宽带连接的远程用户来说,你就需要制定些特殊规定。你可以配置 IPTables 接受来自远程 SSH 和 CIPE 客户的连接。例如,要允许远程 SSH 访问,你可以使用以下规则:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p udp --sport 22 -j ACCEPT来自外部的 CIPE 连接请求可以使用以下命令来接受(把 x 替换成你的设备号码):
iptables -A INPUT -p udp -i cipcbx -j ACCEPT
iptables -A OUTPUT -p udp -o cipcbx -j ACCEPT
CIPE 使用它自己的传输数据报(UDP)分组的虚拟设备,因此这条规则允许 cipcb 接口上的进入连接,而不是规定源地端口或目标端口(虽然它们可以被用来代替设备选项)。关于使用 CIPE 的信息,请参阅第6章 。
你可能还想为其它服务定义规则。关于 IPTables 及其各类选项的完整信息,请参阅《红帽企业 Linux 参考指南》。
这些规则允许到防火墙上的常规及安全服务的访问;然而,它们并不允许防火墙之后的机器使用这些服务。要允许 LAN 使用这些服务,你可以使用带有 IPTables 过滤规则的 NAT。
相关阅读 更多 +