ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【DevOps】Linux 安全:iptables 构成、下令及应用场景详解 [打印本页]

作者: tsx81428    时间: 2024-6-28 02:06
标题: 【DevOps】Linux 安全:iptables 构成、下令及应用场景详解
导读:全面掌握 iptables:从底子到实践

在 Linux 系统中,iptables 是一个非常强大的工具,它不仅是系统管理员用来构建和管理网络防火墙的首选工具,而且也是一个功能丰富的网络流量处理系统。无论是进行包过滤、监控网络流量、照旧实现复杂的网络地址转换 (NAT),iptables 都能提供机动的办理方案。本文将带你深入理解 iptables 的构成结构,掌握其常用下令,并通过具体的使用场景展示如何在实际中应用这些知识。

目录
导读:全面掌握 iptables:从底子到实践
一、iptables 的主要构成
表 (Tables)
链 (Chains)
规则 (Rules)
用户定义的链
二、常用 iptables 下令
基本 iptables 下令格式
检察规则
添加规则
删除规则
修改规则
插入规则
设置默认计谋
保存和恢复规则
清空规则
端口重定向和 NAT
高级匹配和限速
日志记录
状态检查
时间条件匹配
接口匹配
用户自定义链
保存和加载规则
清空和重置
三、使用场景举例
1. 基本的主机防护
允许特定的服务访问
2. 防止 DDoS 攻击
限制 SSH 毗连实验
3. 端口转发
将 80 端口转发到 8080 端口
4. 网络地址转换 (NAT)
共享互联网访问
5. 日志和审计
记录被拒绝的包
6. 使用时间条件控制访问
在工作时间外允许 SSH 访问
7. 防火墙绕过
临时开放所有访问
8. 防止 ICMP 泛洪攻击
限制 ICMP 回显请求
9. 多网卡计谋路由
根据源 IP 使用特定的网络接口
10. 容器和假造化环境
允许特定容器访问外部网络


iptables 是 Linux 利用系统中的一个非常强大的防火墙工具,它使用表格来构造防火墙规则,这些表格中的规则用于决定如何处理穿过防火墙的数据包。iptables 基于 Netfilter,Netfilter 是 Linux 内核的一个部分,负责处理通过网络栈的所有数据包。通过使用 iptables,系统管理员可以定义规则,这些规则决定了如何处理进入、穿过和离开网络的数据包。
一、iptables 的主要构成

表 (Tables)

iptables 的规则分布在不同的“表”中,这些表是处理特定范例数据包的聚集。每个表包罗一个或多个“链”,这些链定义了数据包流经网络栈的不同点在何处应用这些规则。

链 (Chains)

表中的每个链代表数据包处理的一个阶段。预定义的链有:

规则 (Rules)

规则定义了对特定条件下的数据包应该执行的利用。每条规则都关联到一个链,规则包罗两个主要部分:

用户定义的链

用户可以定义自己的链来构造复杂的规则集。这允许更机动的管理,例如创建一个专用链处理特定范例的流量,然后在预定义链中调用这个用户链。
二、常用 iptables 下令

iptables 是一个功能强大的工具,用于在 Linux 上管理网络包过滤和 NAT 规则。以下是详细解释 iptables 的常用下令和参数,资助你更好地理解如何使用这个工具。
基本 iptables 下令格式

  1. iptables [option] [chain] [matching criteria] [action]
复制代码

检察规则


添加规则


删除规则


修改规则


插入规则


设置默认计谋


保存和恢复规则


清空规则


端口重定向和 NAT


高级匹配和限速


日志记录

iptables 支持将匹配的数据包信息记录到系统日志中,这对于调试和安全监控非常有用。

状态检查

利用 state 模块,可以匹配数据包的毗连跟踪状态,这是构建复杂防火墙规则的底子。

时间条件匹配

使用 time 模块可以基于时间条件匹配数据包,这可以用于实现基于时间的访问控制计谋。

接口匹配

可以根据数据包使用的网络接口进行匹配。

用户自定义链

用户可以定义自己的链来构造规则,这可以使规则集更加结构化和模块化。

保存和加载规则

iptables 规则默认在系统重启后不会保存。你需要手动保存规则,并在系统启动时加载它们。

清空和重置

偶尔你大概需要清空所有规则,重置 iptables 到初始状态。

三、使用场景举例

使用 iptables 的场景非常多样,覆盖从简单的主机防火墙到复杂的网络路由和 NAT 配置。下面是一些具体的使用场景,展示如何利用 iptables 办理实际问题。
1. 基本的主机防护

在这个场景中,我们利用 iptables 设置基本的网络访问控制,以保护主机不受未授权访问。
允许特定的服务访问

假设你想在一台服务器上开放 SSH (端口 22) 和 HTTP (端口 80) 服务,同时拒绝所有其他未经授权的入站毗连。
  1. # 设置默认计谋iptables -P INPUT DROP
  2. iptables -P FORWARD DROP
  3. iptables -P OUTPUT ACCEPT
  4. # 允许本地回环接口iptables -A INPUT -i lo -j ACCEPTiptables -A OUTPUT -o lo -j ACCEPT# 允许已创建的和相关的毗连iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT# 允许 SSHiptables -A INPUT -p tcp --dport 22 -j ACCEPT
  5. # 允许 HTTPiptables -A INPUT -p tcp --dport 80 -j ACCEPT# Optional: 允许 HTTPSiptables -A INPUT -p tcp --dport 443 -j ACCEPT
复制代码
2. 防止 DDoS 攻击

使用 iptables 限制单个源 IP 的毗连频率,以防止简单的 DDoS 攻击或 SSH 爆破。
限制 SSH 毗连实验

  1. # 允许每个 IP 每分钟最多新建 3 个 SSH 连接
  2. iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
  3. iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
复制代码
这种设置能够有效减少暴力破解 SSH 密码的风险。
3. 端口转发

在某些环境下,你大概需要将到达某个端口的流量重定向到另一个端口上,例如将 80 端口的 HTTP 流量转发到 8080 端口。
将 80 端口转发到 8080 端口

  1. # 在 nat 表的 PREROUTING 链上添加规则
  2. iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
复制代码
这个利用常用于服务器上运行的 Web 应用程序,该程序绑定于非标准端口,而你希望通过标准端口访问。
4. 网络地址转换 (NAT)

在家庭或小型办公室网络中,常常需要设置 NAT 来共享访问互联网的路径。以下是一个简单的源 NAT(SNAT)配置的例子。
共享互联网访问

假设 eth1 是内部网络接口,eth0 是毗连到互联网的接口。
  1. # 启用 IP 转发echo 1 > /proc/sys/net/ipv4/ip_forward# 设置 MASQUERADEiptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  2. # 允许内部网络访问外部iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT# 允许已创建的毗连回流iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
复制代码
这个配置允许内部网络通过 eth0 接口访问外部网络。
5. 日志和审计

记录某些范例的网络运动对于调试和安全监控都是非常有用的。
记录被拒绝的包

  1. # 记录被拒绝的入站连接尝试
  2. iptables -A INPUT -j LOG --log-prefix "IPTables-Input-Denied: " --log-level 4
  3. # 记录被拒绘的转发连接尝试
  4. iptables -A FORWARD -j LOG --log-prefix "IPTables-Forward-Denied: " --log-level 4
复制代码
这些规则会将所有被 INPUT 和 FORWARD 链拒绝的实验记录到系统日志中。
6. 使用时间条件控制访问

在某些环境中,你大概希望基于时间来控制网络访问。
在工作时间外允许 SSH 访问

  1. # 工作时间外允许 SSH
  2. iptables -A INPUT -p tcp --dport 22 -m time --timestart 18:00 --timestop 09:00 -j ACCEPT
复制代码
这条规则允许在晚上 6:00 到早上 9:00 之间进行 SSH 访问。
7. 防火墙绕过

在某些环境下,你大概需要临时开放或关闭防火墙的某些规则,而不是永世修改配置。
临时开放所有访问

假如需要临时允许所有流量(例如,进行某些特别利用),可以设置:
  1. iptables -P INPUT ACCEPT
  2. iptables -P FORWARD ACCEPT
  3. iptables -P OUTPUT ACCEPT
  4. # 清空所有规则
  5. iptables -F
复制代码
然后,在利用完成后,恢复原来的规则。
8. 防止 ICMP 泛洪攻击

ICMP 泛洪是一种常见的拒绝服务攻击方法。
限制 ICMP 回显请求

  1. # 限制 ICMP echo-request 消息
  2. iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
  3. iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
复制代码
这些规则限制了每秒处理的 ICMP echo 请求(ping 请求)的数量,从而减轻了泛洪的影响。
9. 多网卡计谋路由

在拥有多个网络接口的服务器上,你大概需要根据数据包的来源或目标地来选择不同的路由。
根据源 IP 使用特定的网络接口

  1. # 对于从特定源 IP 发出的数据包,使用特定接口
  2. iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth1 -j MASQUERADE
复制代码
这个规则设置了源 NAT,允许从 192.168.100.0/24 网段出来的数据包通过 eth1 接口发送。
10. 容器和假造化环境

在使用 Docker 或其他容器技能时,常常需要配置 iptables 来管理和隔离网络流量。
允许特定容器访问外部网络

  1. # 假设容器的虚拟网络接口是 veth1234
  2. iptables -t nat -A POSTROUTING -s 172.17.0.2/32 -o eth0 -j MASQUERADE
复制代码
这条规则允许 IP 地址为 172.17.0.2 的容器通过 eth0 接口访问外部网络。
通过这些场景,你可以看到 iptables 的多样性和强大功能,它能够满意从简单到复杂的多种网络需求。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4