AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 696182
Accepted
HBruijn
HBruijn
Asked: 2015-06-03 12:37:39 +0800 CST2015-06-03 12:37:39 +0800 CST 2015-06-03 12:37:39 +0800 CST

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

  • 772

这是一个关于理解和调试 Linux 系统上的软件防火墙的 规范 问题。

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

什么是调试 Linux 软件防火墙问题的结构化方法,netfilter数据包过滤框架,通常被用户空间接口iptables所指?

什么是常见的陷阱、反复出现的问题以及简单或稍微模糊的事情,以检查偶尔的防火墙管理员可能会忽略或以其他方式受益于了解?

即使您使用UFW、FirewallD (aka firewall-cmd)、Shorewall或类似工具,您也可能会受益于在没有这些工具提供的抽象层的情况下查看引擎盖。

这个问题不打算作为构建防火墙的方法:检查产品文档,例如为iptables Trips & Tricks提供食谱或搜索标记的iptables ufw firewalld firewall-cmd问题以获取现有的常见且广受好评的高分问答。

linux
  • 3 3 个回答
  • 24297 Views

3 个回答

  • Voted
  1. Best Answer
    HBruijn
    2015-06-03T12:37:39+08:002015-06-03T12:37:39+08:00

    一般来说:

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

    内容:

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

    -I1. 订单事项或和之间的区别-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 个数据包和 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 链中的第一条规则立即成为一个有趣的规则,它将所有流量(源 0.0.0.0/0 和目标 0.0.0.0/0)发送到 TCP 端口 22 ( tcp dpt:22) SSH 的默认端口到自定义目标 ( fail2ban-SSH) . 顾名思义,此规则由 fail2ban(一种安全产品,除其他外扫描系统日志文件以查找可能的滥用行为并阻止滥用者的 IP 地址)维护。

    该规则将由类似于iptables -I INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH或在 iptables-save as 的输出中找到的 iptables 命令行创建-A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH。通常你会在文档中找到这些符号中的任何一个。

    计数器指示此规则已匹配 784'000 个数据包和 65 兆字节的数据。

    然后,与第一条规则匹配的流量由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 用于通过授予对新连接的访问​​权限来打开 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> 123或echo "Hello" | nc <IP of Server> 123在测试 TLS/SSL 安全服务openssl s_client -connect <IP of Server>:1234时,然后再从远程主机尝试相同的操作。

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

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

    4.4 . 内核数据包过滤器并不是唯一可能限制网络连接的东西:

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

    5.INPUT或FORWARD链条

    这里更彻底地解释了链的概念,但它的短处是:

    该INPUT链是您在发出 iptables 命令的主机上为本地运行的服务打开和/或关闭网络端口的地方。

    当FORWARD您的 Linux 机器充当网桥、路由器、管理程序和/或网络地址时,您可以应用规则来过滤由内核转发到其他系统、实际系统以及 Docker 容器和虚拟客户服务器服务器的流量翻译和端口转发。

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

    6.内核模块

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

    当前加载到运行内核中的模块可以用lsmod.

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

    • 24
  2. Pat
    2016-05-16T12:13:12+08:002016-05-16T12:13:12+08:00

    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 执行,而其他动作(即 SNAT、DNAT 等)是特定于 TABLE 的。

    即,当 IP 数据包从网络接口到达时,它首先由 PREROUTING 链处理,调用 MANGLE 表用户定义的规则(如果有)。如果没有与当前数据包匹配的规则,则应用相应的 MANGLE@PREROUTING 默认操作过程或“策略”。此时,如果数据包没有被丢弃,则该过程现在将继续调用 PREROUTING 链上的 NAT 表的规则(参见地图),依此类推。为了方便规则布局,用户还可以创建自己的自定义链,并根据自己的意愿从地图的不同点“跳”进去。

    在此处输入图像描述

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

    iptables 命令

    iptables 主要命令使用所需的处理规则填充网络数据包流映射。

    通用的 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 协议 (UDP/TCP)、目标端口(80、21、443 等)等来决定是否接受、拒绝或只是丢弃特定的 IP 数据包。这是防火墙在 80% 的情况下所做的,即保护 Web 服务器免受未经授权的网络请求。另外 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

    • 14
  3. HBruijn
    2015-06-03T12:43:42+08:002015-06-03T12:43:42+08:00

    不同协议的常见问题

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

    电子邮件:许多消费者 ISP 阻止 SMTP 流量(或至少默认端口 TCP 25),使其无法直接接收或发送电子邮件,他们的客户被迫使用 ISP 的 SMTP 中继来处理所有传出电子邮件,有时也用于传入电子邮件. 涉及§1.1。

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

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

    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 情况下,通过手动运行 instance insmod nf_conntrack_ftp,使持久性依赖于重新启动依赖于发行版。

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

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

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

    • 7

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve