调试iptables和常见的防火墙陷阱?


18

这是一个建议的 规范问题如何了解和调试在Linux系统上的软件防火墙。

为了回应 EEAA的回答@Shog的评论,我们需要适当的规范问答来结束有关iptables的常见相对简单问题。

有什么结构化的方法可以调试Linux软件防火墙(通常由userland接口iptables引用的netfilter数据包过滤框架)的问题?

有哪些常见的陷阱,重复出现的问题以及一些简单的或稍微晦涩难懂的内容,以检查偶尔的防火墙管理员可能会忽略或从中受益?

即使当您使用UFWFirewallD(aka firewall-cmd),Shorewall或类似工具时,如果没有这些工具提供的抽象层,您也可以从内部查看而受益。

此问题并非旨在作为构建防火墙的方法:请查看产品文档,例如为iptables Trips&Tricks贡献配方,或搜索已标记的 问题,以获取现有的常见且广受好评的高分问与答。


1
可以在链中更早放置的NAT和有状态规则如何提高性能和安全性呢?
马特

1
@Matt:优化防火墙规则本身就是一个完整的问答环节,在这个问答环节中,我不会在这里
HBruijn 2015年

1
如果您没有达到应在IPtables中使用的规则,则添加一个类似的LOG规则,然后进一步向上移动直到收到LOG消息。然后,下面的规则之一将是与您的数据包不正确匹配的规则。
马修·伊夫,2016年

1
哦,将其设置net.netfilter.nf_conntrack_log_invalid为255会很好地捕获无效数据包,如果它的netfilter的有状态部分产生了不良行为,则可以提供帮助。
马修·伊夫

Answers:


14

一般来说:

查看和修改防火墙配置需要管理员权限(root),在受限端口号范围内打开服务也是如此。这意味着您应该以root用户身份登录,root或者可以使用sudoroot用户身份运行命令。我将尝试使用可选的标记此类命令[sudo]

内容:

  1. 为了事项或者差-I-A
  2. 显示当前的防火墙配置
  3. 解释输出 iptables -L -v -n
  4. 了解你的环境
  5. 输入和正向链
  6. 内核模块

1.订购事宜或者差-I-A

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

我认为 对于新手防火墙管理员来说,最常见的错误是他们遵循正确的说明来打开新端口,例如以下端口:

[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个数据包和零个字节中所证明的)。

通过-I在新规则中插入规则,将是链中的第一个规则,并且可以正常工作。

2.显示当前的防火墙配置

我对防火墙管理员的建议是查看Linux内核正在运行的实际配置,而不是尝试通过用户友好的工具诊断防火墙问题。通常,一旦您了解了潜在的问题,就可以轻松地解决这些工具支持的问题。

该命令[sudo] iptables -L -v -n是您的朋友(尽管有些人iptables-save更喜欢)。通常,在讨论配置时,将--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提供了可以重新生成上述防火墙配置的脚本:

[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

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

INPUT链中的第一个规则立即很有趣,它将发送到TCP端口22(tcp dpt:22)的所有流量(源0.0.0.0/0和目标0.0.0.0/0)(默认的SSH 端口)发送到自定义目标(fail2ban-SSH) 。顾名思义,此规则由fail2ban维护(fail2ban(一种安全产品,它会扫描系统日志文件以查找可能的滥用情况并阻止滥用者的IP地址))。

该规则将由iptables命令行创建,类似于iptables -I INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSHiptables-save as或在其输出中找到-A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH。通常,您会在文档中找到任何一种表示法。

计数器表明此规则已匹配784'000个数据包和65 MB的数据。

然后,与该第一条规则匹配的流量由fail2ban-SSH作为非标准链的链在OUTPUT链下方列出。

该链由两个规则组成,每个规则一个(对于每个滥用者)(源ip地址117.253.221.166或58.218.211.166)被阻止(带有reject-with icm-port-unreachable)。

 -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使其打算成为跟踪连接的全状态防火墙。这具有一些优点,只需要对照完整的规则集检查用于新连接的数据包,但是一旦允许,就可以接受属于已建立或相关连接的其他数据包,而无需进一步检查。

输入规则2将匹配所有打开的连接和相关的连接,与该规则匹配的数据包将无需进一步评估。

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

相比之下,简单的数据包筛选器会针对整个规则集测试每个数据包,而不跟踪连接状态。在这种防火墙中,不会使用任何状态关键字。

INPUT规则3非常无聊,lo允许所有连接到回送(或127.0.0.1)接口的流量。

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

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

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中未授予访问权限的所有流量的规则。一个相当普通的约定:不允许的所有事情都被拒绝。从理论上讲,可以通过将默认POLICY设置为REJECT来省略该规则。

始终调查整个链条。

4.了解你的环境

4.1。软件防火墙中的设置不会影响在网络中其他位置维护的安全设置,即,尽管iptables使用路由器上未经修改的访问控制列表打开了网络服务,或者网络中的其他防火墙仍可能阻止流量...

4.2。当没有服务在监听时,无论防火墙设置如何,您都将无法连接并出现连接拒绝错误。因此:

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

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

  • 是使用TCP还是UDP或同时使用两者(与DNS一样)?
  • 服务是否使用固定的默认端口(例如,Web服务器的TCP端口80之类的东西)?
  • 或者,是否选择了一个可以变化的动态端口号(例如,向Portmap注册的RPC服务(如经典NFS))?
  • 当配置为使用被动模式时,臭名昭著的FTP甚至使用两个端口,一个是固定端口,一个是动态端口号。
  • 服务,端口和协议描述/etc/services不一定与使用端口的实际服务相匹配。

4.4。内核数据包筛选器不是唯一可能限制网络连接的东西:

  • SELinux可能还会限制网络服务。getenforce将确认SELinux是否正在运行。
  • 尽管TCP Wrappers变得有些晦涩,但它仍然是增强网络安全性的强大工具。检查ldd /path/to/service |grep libwrap/hosts.[allow|deny]控制文件。

5. INPUTFORWARD

链的概念在此处进行了更全面的解释但其简短之处在于:

INPUT链是你打开和/或你发出的iptables命令的贴心服务网络端口本地运行,在主机上。

FORWARD链是你将规则应用于过滤流量是被内核转发到其他系统,实际的系统,而且Docker容器和虚拟客户服务器的服务器时,你的Linux机器充当网桥,路由器,管理程序和/或做网络地址转换和端口转发。

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

6.内核模块

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

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

确保模块在重新引导后能持久加载的方法取决于Linux发行版。


1
寻找增量数据包/字节计数器。一个有用的工具是在差异模式下使用手表。因此,像这样:watch --difference -n 1 iptables -L FORWARD -v -n。让该工具定期运行该命令并突出显示所做的更改使此操作变得更加容易。
Zoredache

1
我刚刚看到了你的懈怠评论。这是一个很好的答案,不确定我可以添加多少。您可能要提及使用TRACE功能。
Zoredache

我每次都会在这个可怕的(带有各种参数的)输出上获取iptables-save输出(最好使用-ciptables -L
0xC0000022L

7

不同协议的常见问题

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

电子邮件:许多消费者ISP阻止SMTP流量(或至少使用默认端口TCP 25),从而无法直接接收或发送电子邮件,并且其客户被迫对所有传出电子邮件(有时也包括传入电子邮件)使用ISP的SMTP中继。与§1.1有关。

FTP:就使用两个连接而言,FTP是一个奇怪的协议。第一个是控制连接,默认情况下,FTP服务器将在TCP端口21上监听该连接。控制连接用于身份验证和发出命令。实际的文件传输和诸如目录列表输出之类的内容通过第二个TCP连接,DATA连接进行。在活动的FTP中,将通过TCP端口20从FTP服务器启动DATA连接,并连接到FTP客户端。主动FTP在防火墙和NAT网关后面的用户不能很好地工作,因此大部分已被废弃。大多数FTP服务器改为支持被动FTP。使用被动FTP,FTP服务器在第二个端口上打开DATA连接的侦听器,然后FTP客户端可以连接到该侦听器。防火墙的问题是DATA端口可以是1024-65536之间的任何可用非特权端口。

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

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

在有状态防火墙中,您无需显式打开DATA端口,netfilter帮助器模块将识别已分配的动态端口,并通过标记DATA连接来为正确的客户端动态打开该端口,RELATED之后它将与通用规则匹配:

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

这要求通过运行例如FTP手动加载正确的内核模块insmod nf_conntrack_ftp,从而使持久性取决于重新启动取决于发行版。

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

NFS和类似的RPC服务:RPC服务的问题在于,从设计上讲,它们不使用特定的固定端口。他们可以随机选择任何可用的端口,然后将其注册到RPC Portmap守护程序。尝试连接的客户端将查询Portmap守护程序,然后直接连接到正确的端口。这就解决了保留端口用完的问题。

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


7

iptables /防火墙“简介”

防火墙基本上是基于策略的网络过滤器。Linux防火墙围绕Netfilter构建;内核的网络数据包处理框架,由几个执行特定任务的内核模块组成:

  1. FILTER模块(默认情况下始终加载)主要允许我们根据一定的匹配条件来接受或丢弃IP数据包。
  2. NAT模块集使我们能够执行网络地址转换(SNAT,DNAT,MASQUERADE)。
  3. MANGLE模块允许我们更改某些IP数据包字段(TOS,TTL)。

用户使用命令行中的iptables配置Netfilter框架以适合其防火墙需求。借助iptables,我们定义了一些规则,这些规则指示内核如何在IP数据包进入,通过或离开我们的Linux机器时对其进行处理。每个Netfilter主进程由iptables术语表上的TABLE(FILTER,NAT,MANGLE)表示。它们在网络数据包流图上具有几个特定的​​挂钩点,内核在此处将它们调用以执行其职责。某些特定位置的TABLE调用序列通常称为内置链,它们接收PREROUTING,INPUT,FORWARD,OUTPUT和POSTROUTING的名称。很容易记住,如果在调用这些进程实例的网络数据包流图上将TABLE与“进程类型”关联,将CHAIN与“位置”关联。

在此处输入图片说明

由于IP数据包是在网络接口上接收的,或者是由本地进程创建的,因此直到最终将其交付或丢弃为止,Netfilter引擎将依次测试和应用网络数据包流图中所包含的规则。在由TABLE @ CHAIN对标识的每个块上,用户可以添加一个或多个这些连续规则,其中包含IP数据包匹配标准和相应的操作过程。有些动作(即ACCEPT,DROP等)可以由一个以上的TABLE执行,而其他特定于TABLE的动作(即SNAT,DNAT等)也可以执行。

例如,当IP数据包从网络接口到达时,它首先由PREROUTING链处理,并调用MANGLE表用户定义的规则(如果有)。如果没有匹配当前数据包的规则,则适用相应的MANGLE @ PREROUTING默认操作步骤或“策略”。此时,如果未丢弃数据包,则此过程将继续,然后调用PREROUTING链上的NAT表的规则(请参见地图),依此类推。为了简化规则布局,用户还可以创建自己的自定义链,并根据需要从地图的不同点“跳入”它们。

在此处输入图片说明

虽然内置链可以具有用户定义的ACCEPT或DROP数据包策略,但用户定义的链始终具有不可更改的默认策略RETURN到调用者以继续该过程。

iptables命令

iptables main命令使用所需的处理规则填充网络数据包流图。

通用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会立即强制执行已加载的规则和设置,但它们不是持久性的。重启后,所有先前加载的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很复杂。从用户的角度来看,诸如TABLE,CHAIN,TARGET之类的某些术语与它们所代表的概念并不能很好地匹配,起初并没有多大意义。主题很长,命令似乎有无穷无尽的参数列表。更糟糕的是,没有一本书真正掌握Iptables。它们主要分为两类:“食谱书”或“手册书”。我认为本简介为您提供了Netfilter / Iptables概况的快照,以及必要的预消化的手册页内容。如果您是iptables的新手,那么在阅读了几段之后,您就可以阅读iptables示例了。通过一些练习,您很快就会发现自己在编写自己的规则。

防火墙

防火墙主要设计为根据一组规则动态地允许或拒绝网络流量。在这一点上,很容易理解为什么Linux Netfilter / Iptables框架非常适合防火墙构建。查看网络数据包流图,我们可以在INPUT和FORWARD链的FILTER表上找到两个特别有趣的地方。如果我们接受,拒绝或仅丢弃特定的IP数据包,则可以根据IP源地址,IP协议(UDP / TCP),目标端口(80、21、443等)来确定。当防火墙保护Web服务器免受未经授权的网络请求时,这就是防火墙80%的时间所采取的措施。其他20%的时间用于处理(NAT,MANGLE)网络数据包。

防火墙方案

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

  1. 具有一个或多个连接到Internet的接口的简单Web服务器。策略包括基本规则,以允许受限的入站访问,无限制的出站访问和反欺骗规则。IP转发关闭。
  2. 该防火墙连接到Internet并连接到受保护的内部区域。策略包括基本规则,以允许受限的入站访问,无限制的出站访问和反欺骗规则。由于保护区使用私有IP地址,因此需要源NAT。IP转发已打开。
  3. 该防火墙连接到Internet,内部受保护的非军事区。策略包括基本规则,以允许受限的入站访问,无限制的出站访问和反欺骗规则。由于受保护区域和DMZ区域使用专用IP地址,因此它们需要源和目标NAT。IP转发已打开。 在此处输入图片说明

我已经为此写过:http : //www.vercot.com/~jeoss/howto/JeossEasyFirewall.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.