debuggingiptables和常见的防火墙陷阱?

这是关于理解和debuggingLinux系统上的软件防火墙的一个build议性 规范问题 。

为了回应EEAA的回答和@Shog的评论,我们需要一个合适的典型问答来解决关于iptables的一些相对简单的问题。

什么是结构化的方法来debuggingLinux软件防火墙的问题, netfilter包过滤框架,通常由userland interface iptables引用?

什么是常见的陷阱,反复出现的问题和简单或稍微模糊的事情来检查偶尔的防火墙pipe理员可能会忽略或从知道获益?

即使使用UFW , FirewallD (aka firewall-cmd ), Shorewall或类似的工具,也可以从这些工具所提供的抽象层之下查看底层。

这个问题不是作为构build防火墙的方法:查看产品文档 ,例如为iptables提供食谱,或者search带标记的iptables ufw firewalld firewall-cmd问题,以获得现有频繁和高度评价的高分 Q&A的。

一般来说:

查看和修改防火墙configuration需要pipe理员权限( root ),以及在限制的端口号范围内打开服务。 这意味着您应该以root身份login,或者使用sudo以root身份运行该命令。 我会尝试用可选的[sudo]标记这样的命令。

内容:

  1. 订单事宜或-I-A之间的区别
  2. 显示当前的防火墙configuration
  3. 解释iptables -L -v -n的输出
  4. 了解你的环境
  5. INPUT和FORWARD链
  6. 内核模块

1.订单事项或-I-A之间的区别

需要记住的是,防火墙规则按照它们列出的顺序进行检查。 当规则被触发时,内核将停止处理链,这将允许或不允许数据包或连接。

我认为新手防火墙pipe理员最常犯的错误就是他们按照正确的说明打开一个新的端口,比如下面这个:

[sudo] iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT

然后发现它不会生效。

原因是-A选项在所有现有规则之后增加了新规则,并且由于现有防火墙的最终规则经常是阻止所有不明确允许的所有通信的规则,导致

 ... 7 2515K 327M REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited 8 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 

或在iptables-save中相当于:

 ... iptables -A INPUT -j REJECT iptables -A INPUT -p tcp --dport 8080 -j ACCEPT 

而新的规则开放TCP端口8080将永远不会到达。 (由固执地保持在0包和零字节的计数器certificate)。

通过将规则插入-I ,新规则将是链中的第一条,并且将起作用。

2.显示当前的防火墙configuration

我对防火墙pipe理员的build议是查看Linux内核正在运行的实际configuration,而不是尝试从用户友好的工具中诊断防火墙问题。 通常一旦你理解了潜在的问题,你就可以在这些工具支持的事情中轻松解决它们。

命令[sudo] iptables -L -v -n是你的朋友(尽pipe有些人喜欢iptables-save更好)。 通常在讨论configuration时,使用--line-numbers选项以及数字行很有用。 参考规则#X使得讨论起来更容易一些。
注意: NAT规则包含在iptables-save输出中,但必须通过添加-t nat选项(即[sudo] iptables -L -v -n -t nat --line-numbers单独列出。

多次运行该命令并检查增量计数器可能是一个有用的工具,以查看是否实际触发新规则。

 [root@host ~]# iptables -L -v -n Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 784K 65M fail2ban-SSH tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 2 2789K 866M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 3 15 1384 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 44295 2346K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 40120 2370K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80 6 16409 688K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:443 7 2515K 327M REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 25 packets, 1634 bytes) num pkts bytes target prot opt in out source destination Chain fail2ban-SSH (1 references) num pkts bytes target prot opt in out source destination 1 0 0 REJECT all -- * * 117.239.37.150 0.0.0.0/0 reject-with icmp-port-unreachable 2 4 412 REJECT all -- * * 117.253.208.237 0.0.0.0/0 reject-with icmp-port-unreachable 

或者, iptables-save的输出提供了一个脚本,可以重新生成上面的防火墙configuration:

 [root@host ~]# iptables-save *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [441:59938] :fail2ban-SSH - [0:0] -A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited -A fail2ban-SSH -s 117.239.37.150/32 -j REJECT --reject-with icmp-port-unreachable -A fail2ban-SSH -s 117.253.208.237/32 -j REJECT --reject-with icmp-port-unreachable COMMIT 

这是一个偏好问题,你会发现更容易理解。

3.解释iptables -L -v -n的输出

当没有明确的规则匹配时, 策略设置链使用的默认行为。 在设置为接受所有stream量的INPUT链中。

INPUT链中的第一条规则是一个很有意思的规则,它将发往TCP端口22( tcp dpt:22 )的所有stream量(源0.0.0.0/0和目标0.0.0.0/0)作为SSH的默认端口发送到自定义目标( fail2ban-SSH )。 正如名称所示,此规则由fail2ban(一个安全产品,除其他外,扫描系统日志文件以查找可能的滥用并阻止滥用者的IP地址)维护。

该规则可能是由iptables命令行创build的,类似于iptables -I INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH或者在iptables-save的输出中find-A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH 。 通常你会在文档中find这些符号中的任何一个。

计数器表明这个规则匹配了784000个数据包和65兆字节的数据。

与此第一条规则匹配的stream量由fail2ban-SSH链处理,作为非标准链,将在OUTPUT链下方列出。

该链由两个规则组成,每个规则被阻塞( reject-with icm-port-unreachable ),每个规则对应一个abuser(源IP地址117.253.221.166或58.218.211.166)。

  -A fail2ban-SSH -s 117.253.221.166/32 -j REJECT --reject-with icmp-port-unreachable -A fail2ban-SSH -s 58.218.211.166/32 -j REJECT --reject-with icmp-port-unreachable 

不是来自这些被阻止的主机的SSH数据包既不被允许也不被允许,并且现在自定义链完成将被检查对照INPUT链中的第二个规则。

所有不是指定给端口22的数据包都通过了INPUT链中的第一条规则,也将在INPUT规则2中进行评估。

INPUT规则编号2使得这是一个有状态的防火墙 ,它跟踪连接。 这样做有一些优点,只需要根据完整的规则集来检查新连接的数据包,但是一旦允许属于已build立或相关连接的额外数据包被接受而不需要进一步的检查。

input规则#2匹配所有打开和相关的连接,匹配该规则的数据包将不需要进一步评估。

注意:有状态防火墙configuration中的规则更改只会影响新的连接,而不会影响已build立的连接。

相比之下,一个简单的数据包filter会针对整个规则集testing每个数据包,而不会跟踪连接状态。 在这样的防火墙中不会使用状态关键字。

INPUT规则#3非常无聊,所有连接到环回( lo或127.0.0.1)接口的stream量都是允许的。

通过授予访问NEW连接(现有连接已被INPUT规则2允许),INPUT规则4,5和6用于打开TCP端口22,80和443(SSH,HTTP和HTTPS的默认端口)。

在无状态防火墙中,这些规则将显示为没有状态属性:

 4 44295 2346K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 5 40120 2370K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 6 16409 688K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 

要么

 -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT 

最后的INPUT规则#7是一个规则,它阻止所有在INPUT规则1-7中没有被授予访问权限的stream量。 一个相当常见的约定:不允许的一切都被拒绝。 理论上这个规则可以通过设置默认的POLICY为REJECT来省略。

始终调查整个链条。

4.了解你的环境

4.1。 软件防火墙中的设置不会影响在networking中其他地方维护的安全设置,即使用iptables打开networking服务,路由器或networking中其他防火墙上的未修改的访问控制列表仍可能阻止通信。

4.2。 如果没有服务正在监听,则无论防火墙设置如何,都将无法连接并获得连接拒绝错误 。 因此:

  • 确认服务正在侦听(在正确的networking接口/ IP地址上),并使用[sudo] netstat -plnut的端口号,或者使用ss -tnlp
  • 如果您的服务尚未运行,请使用netcat模拟一个简单的侦听器: [sudo] nc -l -p 123openssl s_server -accept 1234 [options]如果您需要TLS / SSL侦听器(请检查man s_server为选项)。
  • validation您可以从服务器本身进行连接,即telnet <IP of Server> 123echo "Hello" | nc <IP of Server> 123 echo "Hello" | nc <IP of Server> 123或者在从远程主机尝试相同之前testingTLS / SSL安全服务openssl s_client -connect <IP of Server>:1234

4.3。 了解您的服务使用的协议。 您无法正确启用/禁用不足以理解的服务。 例如:

  • 是使用TCP还是UDP?或者同时使用(与DNS一样)?
  • 是使用固定的默认端口(例如像Web服务器的TCP端口80)的服务?
  • 或者是select的dynamic端口号可以改变(例如RPC服务,如传统的NFS向Portmap注册)?
  • 臭名昭着的FTP甚至使用两个端口 ,当configuration为使用被动模式时,包括固定端口号和dynamic端口号。
  • /etc/services的服务,端口和协议描述不一定与使用端口的实际服务匹配。

4.4。 内核数据包filter不是唯一可能限制networking连接的事情:

  • SELinux也可能会限制networking服务。 getenforce会确认SELinux是否正在运行。
  • 虽然变得稍微模糊的TCP包装仍然是一个强大的networking安全工具。 请检查ldd /path/to/service |grep libwrap/hosts.[allow|deny]控制文件。

5. INPUTFORWARD

链条的概念在这里更加彻底的解释,但缺点是:

INPUT链是您在发出iptables命令的主机上为本地运行的服务打开和/或closuresnetworking端口的位置。

FORWARD链是应用规则来过滤通过内核转发到其他系统,实际系统的stream量,而且当您的Linux计算机充当网桥,路由器,pipe理程序和/或networking时,Docker容器和虚拟来宾服务器服务器地址转换和端口转发。

一个常见的误解是,由于docker容器或KVM guest虚拟机在本地运行,所应用的过滤规则应该在INPUT链中,但通常情况并非如此。

6.内核模块

由于数据包filter在Linux内核中运行,因此它也可以被编译为dynamic模块,实际上是多个模块。 大多数发行版都包含netfilter模块,所需的netfilter模块将根据需要加载到内核中,但对于某些模块,防火墙pipe理员需要手动确保加载。 这主要涉及连接跟踪模块,如可以使用insmod加载的nf_conntrack_ftp

当前加载到正在运行的内核的模块可以用lsmod显示。

确保模块在重新启动时持久加载的方法取决于Linux发行版。

不同协议的常见问题

DNS:默认情况下,DNS使用UDP 53端口,但使用TCP而不是TCP(通常是区域传输等)传输不适合单个UDP数据报的消息时,需要打开端口53的TCP以及在运行名称服务器时。

电子邮件:许多消费者ISP的阻止SMTPstream量(或至less默认端口TCP 25),使得直接接收或发送电子邮件不可能和他们的客户被迫使用ISP的SMTP中继所有传出电子邮件,有时也传入电子邮件以及。 有关§1.1。

FTP:在使用两个连接的方面,FTP是一个奇怪的协议。 首先是控制连接,默认情况下,FTP服务器将在TCP端口21上侦听。 控制连接用于authentication和发布命令。 实际的文件传输和诸如目录列表的输出之类的东西会经过第二个TCP连接,DATA连接 。 在主动FTP中,DATA连接将从TCP端口20的FTP服务器启动并连接到FTP客户端。 主动FTP不适用于防火墙和NAT网关之后的用户,因此大部分已经被滥用。 大多数FTP服务器支持被动FTP。 通过被动FTP,FTP服务器将打开第二个端口上的DATA连接的监听器,然后FTP客户端可以连接该监听器。 对于防火墙的问题是,数据端口可以是1024-65536之间的任何可用的无引脚端口。

在无状态的防火墙中,通常通过限制FTP服务器分配的被动端口数来解决,然后明确地打开这些端口。 即

 iptables -A INPUT -p tcp --match multiport --dports 21000:21050 -j ACCEPT 

在一个有状态的防火墙中,你不需要显式地打开DATA端口,netfilter helper模块将会识别被分配的dynamic端口,并通过将DATA连接标记为RELATEDdynamic地打开正确的客户端口,之后它将匹配generic规则:

  iptables -I INPUT -p tcp -m state ESTABLISHED,RELATED -j ACCEPT 

这要求正确加载内核模块 ,在FTP情况下通过运行insmod nf_conntrack_ftp手动执行,从而使持久性取决于重新启动取决于分配。

注意:当FTP与SSL一起使用时,FTP连接跟踪模块将失败,因为控制连接将被encryption,并且nf_conntrack_ftp将不能再读取PASV repsonse。

NFS和类似的RPC服务:RPC服务的问题是,通过devise,他们不使用特定的固定端口。 他们可以随机select任何可用的端口,然后将其注册到RPC Portmap守护进程。 试图连接的客户端将查询Portmap守护程序,然后直接连接到正确的端口。 这解决了保留端口用尽的问题…

从防火墙的angular度来看,需要打开TCP / UDP端口111以及RPC服务当前正在使用的实际端口。 在防火墙中打开这样的随机端口的问题通常通过限制诸如NFS服务器的RPC服务使用预定义的固定端口来解决。

iptables /防火墙“介绍”

防火墙基本上是基于策略的networkingfilter。 Linux防火墙是围绕Netfilter构build的; 内核的networking数据包处理框架由多个内核模块执行特定的任务组成:

  1. FILTER模块(默认情况下总是加载)主要允许我们根据一定的匹配标准接收或者丢弃IP数据包。
  2. NAT模块集允许我们执行networking地址转换(SNAT,DNAT,MASQUERADE)。
  3. MANGLE模块允许我们改变某些IP数据包字段(TOS,TTL)。

用户通过命令行使用iptables来configurationNetfilter框架,以满足防火墙需求。 通过iptables,我们定义了一些规则,指导内核在IP数据包到达,通过或离开Linux机器时如何处理。 每个Netfilter主进程由iptables lingo上的TABLE(FILTER,NAT,MANGLE)表示。 它们在networking数据包stream映射上有几个特定的​​挂钩点,内核会调用它们来执行它们的职责。 某些特定位置的TABLE调用序列通常称为内置CHAINS,接收PREROUTING,INPUT,FORWARD,OUTPUT和POSTROUTING的名称。 我们很容易记住,如果我们将一个TABLE与一个“进程types”和一个CHAIN与networking数据包stream映射上的“位置”相关联,那么这些进程的实例将被调用。

在这里输入图像描述

由于IP数据包是在networking接口上接收到的,或由本地进程创build的,直到它最终被传送或丢弃,Netfilter引擎将依次testing和应用networking数据包stream程图中包含的规则。 在由TABLE @ CHAIN对标识的每个块处,用户可以添加包含IP分组匹配标准和相应的操作过程的这些连续规则中的一个或多个。 有一些行为(即ACCEPT,DROP等)可以通过多个TABLE和其他特定于TABLE的动作(如SNAT,DNAT等)来执行。

即当IP数据包从networking接口到达时,首先由PREROUTING链处理,如果有的话,调用MANGLE表用户定义的规则。 如果没有匹配当前数据包的规则,则应用相应的MANGLE @ PREROUTING默认行为或“策略”。 此时,如果数据包没有被丢弃,进程将继续调用PREROUTING链中的NAT表规则(参见地图)等等。 为了便于规则布局,用户还可以创build自己的自定义链,并根据需要从地图上的不同位置“跳跃”。

在这里输入图像描述

虽然内置链可以具有用户定义的ACCEPT或DROP数据包策略,但是用户定义的链仍然有一个不可改变的默认策略RETURN给调用者以继续进程。

iptables命令

iptables主要命令用所需的处理规则填充networking数据包stream程图。

通用的iptables规则可以写成:

# iptables <table> <Add/Insert/Delete> <CHAIN> <PKT_MATCHING_CRITERIA> <ACTION>

它可以被读取为:

Netfilter (kernel module) please <Add/Insert/Delete> this rule for <table> at <CHAIN> where packets matching <PKT_MATCHING_CRITERIA> have to be <ACTION>ed

 <table> -t filter (the filter table is assumed when omitted) -t nat -t mangle <Add/Insert/Delete> -A (append rule at the end of the chain list) -I (insert rule at the begining of the chain list) -D (Delete rule) <CHAIN> PREROUTING INPUT FORWARD OUTPUT POSTROUTING USER_DEFINED_CHAIN <PKT_MATCHING_CRITERIA> ISO Level-2 matching: -i [!] <if_name> or --in-interface [!] <if_name> (OUTPUT and POSTROUTING chains cannot match on input interfaces) -o [!] <if_name> or --out-interface [!] <if_name> (INPUT and PREROUTING chains cannot match on output interfaces) -mac-source [!] <xx-xx-xx-xx-xx-xx> (OUTPUT and POSTROUTING chains cannot match on input interfaces) ISO Level-3 matching: -s [!] <src_ip> or --src [!] <src_ip> or --source [!] <src_ip> -d [!] <dst_ip> or --src [!] <dst_ip> or --destination [!] <dst_ip> ISO Level-4 matching: -p [!] <prot_name> or --protocol [!] <prot_name> (udp|tcp|icmp) Also available when ICMP protocol is defined --icmp-type [!] <icmp_type> Also available when UDP protocol is defined --source-port [!] <udp_src_port> or --sport [!] <udp_src_port> --destination-port [!] <udp_dst_port> or --dport [!] <udp_dst_port> Also available when TCP protocol is defined --source-port [!] <tcp_src_port> or --sport [!] <tcp_src_port> --destination-port [!] <tcp_dst_port> or --dport [!] <tcp_dst_port> --tcp-flags [!] <tcp_flags> (SYN|ACK|FIN|RST|URG|PSH|ALL|NONE) --syn --tcp-option [!] <tcp_option#> --state [!] <state> -m <match> [options] note: [!] = negation operator <ACTION> (also called TARGET) -j ACCEPT (process continues with rules of the next table in map) -j DROP (discard current packet) -j REJECT (discard current packet with ICMP notification) option: --reject-with <reject_type> -j USER_DEFINED_CHAIN (start traversing USER_DEFINED_CHAIN rules) -j RETURN (return from USER_DEFINED_CHAIN) -j LOG (log to syslog, then process next rule in table) options: --log-level <level> --log-prefix <prefix> --log-tcp-sequence --log-tcp-options --log-ip-options --log-uid nat table specific -j SNAT (rewrite the source IP address of the packet) option: --to <ip_address> -j SAME (idem SNAT; used when more than one source address) options: --nodst --to <a1-a2> -j MASQUERADE (idem SNAT; used when the replace IP is dynamic) -j DNAT (rewrite the destination IP address of the packet) option: --to <ip_address> -j REDIRECT (rewrite dst IP to 127.0.0.1, PREROUTING and OUTPUT only) option: –-to-port <port#> mangle table specific -j ROUTE (explicitly route packets, valid at PREROUTING) options: --iface <iface_name> --ifindex <iface_idx> -j MARK (set Netfilter mark values) options: --set-mark <value> --and-mark <value> --or-mark <value> -j TOS (set the IP header Type of Service field) option: --set-tos <value> -j DSCP (set the IP header Differentiated Services Field) options: --set-dscp <value> --set-dscp-class <class> -j TTL (set the IP header Time To Live field) options: --ttl-set <value> --ttl-dec <value> --ttl-inc <value> 

iptables辅助命令完成场景设置默认的条件,上市规则,冲洗规则等。

 #iptables -t <table> -L (Lists the <table> rules in all chains) #iptables -t <table> -L <CHAIN> (Lists the <table> rules in <CHAIN>) #iptables -t <table> -N <CHAIN> (Creates a user-defined <CHAIN> for holding <table> rules) #iptables -t <table> -E <CHAIN> <NEWCHAIN> (Renames <CHAIN> that holds <table> rules to <NEWCHAIN>) #iptables -t <table> -X (Deletes all user-defined chains created for holding <table> rules) #iptables -t <table> -X <CHAIN> (Deletes user-defined <CHAIN> created for holding <table> rules) #iptables -t <table> -P <CHAIN> <ACTION> where <ACTION> = ACCEPT|DROP (Sets the default policy of <table> rules at <CHAIN> to <ACTION>) #iptables -t <table> -F (Flushes (deletes) all <table> rules in all chains) #iptables -t <table> -F <CHAIN> (Flushes (deletes) all <table> rules in <CHAIN>) #iptables -t <table> -R <CHAIN> <INDEX> <NEWRULE> (Replaces <table> rule at position <INDEX> in <CHAIN> with <NEWRULE> 

Iptables在运行时将我们的命令加载到Netfilter引擎中,Netfilter立即强制执行加载的规则和设置,但是它们不是持久的。 Afeter重新启动所有以前加载的Netfilter规则和设置将会丢失。 出于这个原因,有一些iptables实用程序允许将当前活动的规则集保存到文件中,并在以后重新加载。

 #iptables-save > fileName (Save the currently active Netfilter ruleset to fileName) #iptables-restore < fileName (Restore Netfilter ruleset to the one saved in fileName) 

iptables摘要

Netfilter是一个非常灵活和强大的框架,但有一个价格可以付钱; Iptables是复杂的。 从用户的angular度来看,像TABLE,CHAIN,TARGET这样的特定术语并不能很好地匹配它们所代表的概念,并且一开始就没有什么意义。 主题很长,命令似乎有一个无穷无尽的参数列表。 更糟糕的是,没有一本真正掌握iptables的书。 它们大多分为两类:“食谱”或“手册”。 我想这个介绍给你一个Netfilter / Iptables的景观的快照,以及必要的预先消化的manpage的东西。 如果你是新的iptables,阅读这些段落几次后,你将准备阅读iptables的例子。 通过一些练习,你很快就会发现自己写自己的规则。

防火墙

防火墙主要用于根据一组规则dynamic地允许或拒绝networking通信。 在这一点上,很容易理解为什么Linux Netfilter / Iptables框架非常适合防火墙的构build。 查看networking数据包stream程图,我们在INPUT和FORWARD链上的FILTER表中find两个特别有趣的点; 我们可以根据IP源地址,IP协议(UDP / TCP),目的端口(80,21,443等)来决定是否接受,拒绝或者丢弃一个特定的IP数据包。 这就是防火墙在80%的时间内保护networking服务器免受未经授权的networking请求的情况。 另外20%的时间是操纵(NAT,MANGLE)networking数据包。

防火墙scheme

有数百种不同的防火墙布局可以满足不同的需求,但其中有3种可以被认为是最典型的防火墙scheme。

  1. 带有一个或多个接口连接到Internet的简单Web服务器。 策略包括允许限制入站访问,无限制出站访问和反欺骗规则的基本规则。 IP转发closures。
  2. 此防火墙连接到Internet和受保护的内部区域。 策略包括允许限制入站访问,无限制出站访问和反欺骗规则的基本规则。 由于保护区使用专用IP地址,因此需要NAT。 IP转发已启动。
  3. 这个防火墙连接到互联网,内部保护和非军事区域。 策略包括允许限制入站访问,不受限制的出站访问和反欺骗规则的基本规则。 由于受保护和DMZ区域使用专用IP地址,因此它们需要源NAT和目标NAT。 IP转发已启动。 在这里输入图像描述

我已经写了这个: http : //www.vercot.com/~jeoss/howto/JeosEasyFirewall.html