如何在Linux中限制网络访问 Linux iptables用户过滤

答案:iptables是Linux中基于表、链、规则的防火墙工具,通过命令如-A、-I、-D管理流量规则,支持按IP、端口、协议限制访问,规则按顺序匹配且需保存以防重启丢失,firewalld为其上层更易用的管理工具。

如何在Linux中限制网络访问 Linux iptables用户过滤

简单来说,在Linux中限制网络访问,你可以使用

iptables

,它就像一个防火墙,允许你设置规则来控制哪些流量可以进出你的系统。

iptables

非常强大,但配置起来也比较复杂,需要理解它的基本概念和命令。

解决方案

  1. 理解

    iptables

    的基本结构:

    iptables

    基于表(tables)、链(chains)和规则(rules)工作。

    • 表 (Tables):
      filter

      (默认,用于过滤数据包),

      nat

      (用于网络地址转换),

      mangle

      (用于修改数据包),

      raw

      (用于配置数据包的连接追踪)。

    • 链 (Chains):
      INPUT

      (进入系统的数据包),

      OUTPUT

      (离开系统的数据包),

      FORWARD

      (通过系统转发的数据包)。

    • 规则 (Rules): 定义如何处理符合特定条件的数据包(例如,允许或拒绝)。
  2. 常用的

    iptables

    命令:

    • iptables -L

      : 列出当前规则。

    • iptables -A

      : 在链的末尾添加一条规则。

    • iptables -I

      : 在链的开头插入一条规则。

    • iptables -D

      : 删除一条规则。

    • iptables -F

      : 清空链中的所有规则。

    • iptables -P

      : 设置链的默认策略(例如,

      ACCEPT

      DROP

      )。

    • iptables -S

      : 以更易读的格式显示规则。

  3. 限制特定 IP 地址访问:

    # 阻止来自 IP 地址 192.168.1.100 的所有流量 iptables -A INPUT -s 192.168.1.100 -j DROP  # 允许来自 IP 地址 192.168.1.100 的 SSH 访问 (端口 22) iptables -A INPUT -s 192.168.1.100 -p tcp --dport 22 -j ACCEPT
  4. 限制特定端口的访问:

    # 阻止所有到端口 80 (HTTP) 的流量 iptables -A INPUT -p tcp --dport 80 -j DROP  # 允许到端口 80 的流量来自特定 IP 地址 iptables -A INPUT -s 192.168.1.100 -p tcp --dport 80 -j ACCEPT
  5. 限制特定协议的访问:

    # 阻止所有 ICMP (ping) 流量 iptables -A INPUT -p icmp -j DROP
  6. 保存

    iptables

    规则:

    iptables

    规则在系统重启后会丢失,你需要保存它们。

    • Debian/Ubuntu:
      sudo apt-get install iptables-persistent

      , 然后

      sudo netfilter-persistent save
    • CentOS/RHEL:
      sudo yum install iptables-services

      , 然后

      sudo systemctl enable iptables

      ,

      sudo systemctl start iptables

      , 最后

      sudo iptables-save > /etc/sysconfig/iptables

iptables

规则的优先级是怎样的?

iptables

按照规则在链中的顺序进行匹配。第一条匹配的规则生效,后续规则不再评估。因此,规则的顺序至关重要。通常,更具体的规则(例如,允许特定 IP 地址访问特定端口)应该放在更通用的规则(例如,阻止所有访问)之前。

如何查看和删除特定的

iptables

规则?

查看规则,可以使用

iptables -L -n -v

-n

选项会显示 IP 地址和端口号,而不是尝试进行 DNS 反向查找,

-v

显示更详细的信息。

删除规则,最简单的方法是使用行号:

  1. iptables -L --line-numbers

    : 显示规则及其对应的行号。

  2. iptables -D INPUT <行号>

    : 删除

    INPUT

    链中指定行号的规则。

例如,要删除

INPUT

链中行号为 3 的规则,可以执行

iptables -D INPUT 3

iptables

firewalld

有什么区别,我应该选择哪个?

iptables

是一个更底层的防火墙管理工具,而

firewalld

是一个更高级的、动态的防火墙管理器,它构建在

iptables

之上。

firewalld

使用区域 (zones) 的概念来管理规则,更容易配置和管理。

选择哪个取决于你的需求和偏好。如果你需要精细的控制和对

iptables

有深入的了解,那么

iptables

可能更适合你。如果你需要一个更易于使用和管理的防火墙,那么

firewalld

可能是更好的选择。许多现代 Linux 发行版默认使用

firewalld

实际上,即使你使用

firewalld

,它最终也会生成

iptables

规则。

firewalld

只是提供了一个更友好的接口来管理这些规则。

linux centos ubuntu 工具 ai 区别 Filter 接口 input linux ubuntu debian

上一篇
下一篇