在Linux中,Iptables能做什么?

发布于:2025-06-22 ⋅ 阅读:(19) ⋅ 点赞:(0)

概述

背景说明

在运维工作中,Iptables是一个不可或缺的工具,它提供了强大的网络流量控制和管理能力。

问题呈现

  1. iptables是一个不可获取的工具,你对其了解多少?
  2. 该工具你是否真的会用?
  3. 详细功能对应的应用场景你是否知晓?

具体呈现

1. 访问控制

iptables最核心功能是控制网络流量的进出,允许或拒绝特定的流量,可通过定义规则从而实现:

  1. 允许或拒绝特定IP地址

    • 允许特定IP地址访问服务器:
      iptables -A input -s 192.168.1.100 -j ACCEPT
      
    • 拒绝特定IP地址访问服务器:
      iptables -A input -s 1.2.3.4 -j drop
      
  2. 端口访问控制

    • 允许特定端口的流量(如SSH、HTTP、HTTPS)
      iptables -A input -p tcp --dport 22 -j accept
      iptables -A input -p tcp --dport 80 -j accept
      iptables -A input -p tcp --dport 443 -j accept
      
    • 拒绝所有未明确允许的流量:
      iptables -A input -j drop
      
  3. 基于协议的访问控制

  • 允许ICMS(ping)流量:
    iptables -A input -p imcp -j accept
    
  • 拒绝所有upd流量:
    iptables -A input -p udp -j drop
    

2. NAT(网络地址转换)

iptables支持NAT功能,主要用于实现私有网络与公网之间的通信。

  1. SNAT(源地址转换)
    • 将内网流量转换为公网IP
      iptables -t nat -A postrouting -s 192.168.1.0/24 -o eth0 -j masquerade
      
      适用于家庭或企业网络的出口网关。
  2. DNAT(目标地址转移)
    • 将外部流量转发到内网服务器
      iptables -t nat -A prerouting -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
      
      适用于将公网流量转发到内网的web服务器。

3. 防止网络攻击

iptables可以通过规则限制来防范常见的网络攻击。

  1. 防止SYN Flood攻击
    • 限制每秒的 SYN数据包数量
      	iptables -A input -p tcp --syn -m limit --limit 1/sec -j accept
      
  2. 防止端口扫描
    • 限制对特定端口的扫描行为:
      iptables -A INPUT -p tcp --dport 22 -m recent --set --name SSH --rsource
      iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 5 --name SSH --rsource -j DROP
      
  3. 防止暴力破解
    • 限制失败登录尝试的频率:
      iptables -A input -p tcp --dport 22 -m fail12ban-ssh -j drop
      

4. 流量监控与统计

iptables可以记录和统计流量信息,帮助运维人员了解网络使用情况

  1. 日志记录
    • 将匹配的流量记录到日志文件
      	iptables -A input -p tcp --dport 22 -j log --log-prefix "ssh sccess:"
      
  2. 流量统计
    • 统计特定流量:
      iptables -A input -p tcp --dport 80
      iptables -L -v -n
      

5. 负载均衡

iptables可以简单的轮询算法实现负载均衡功能,将流量分发到多个后端服务器。

  1. 简单轮询负载均衡
    • 将http流量分发到多个后端服务器
      iptables -t nat -A PREROUTING -p tcp --dport 80 -m nth --counter 0 --every 2 --packet 0 -j DNAT --to-destination 192.168.1.100:80
      iptables -t nat -A PREROUTING -p tcp --dport 80 -m nth --counter 0 --every 2 --packet 1 -j DNAT --to-destination 192.168.1.101:80
      

6. 透明代理

iptables可以将流量重定向到本地的代理服务器,实现透明代理功能。

  1. 将http流量重定向到本地代理服务器
    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
    

7. 数据包修改

将进入的数据包的 TTL 值修改为特定值:

iptables -t mangle -A prerouting -j ttl --ttl-set 64

8. 连接跟踪

iptables 可以跟踪连接状态,并根据连接状态进行操作。

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

9. 限制特定IP的下载速度

iptables -A FORWARD -s 192.168.1.100 -p tcp --dport 80 -m quota --quota 1000000 -j ACCEPT
iptables -A FORWARD -s 192.168.1.100 -p tcp --dport 80 -j DROP

使用脚本管理规则

#!/bin/bash
 
# 清空现有规则
iptables -F
iptables -X
 
# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
 
# 允许已建立的连接
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
 
# 允许 SSH 和 HTTP 访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
 
# 日志记录
iptables -A INPUT -j LOG --log-prefix "Blocked: "
 
# 保存规则
iptables-save > /etc/iptables/rules.v4

总结

iptables 能够实现以下功能:

  1. 访问控制:允许/拒绝特定流量。
  2. NAT功能:实现私有网络与公网的通信。
  3. 安全防护:防止网络攻击,如 SYN Flood 和端口扫描。
  4. 负载均衡:将流量分发到多个后端服务器。
  5. 透明代理:将流量重定向到代理服务器。
  6. 数据包修改:修改 TTL/IP地址。
  7. 连接跟踪:根据连接状态进行操作。
  8. 流量统计与监控:记录和分析流量信息。
  9. 带宽限制:控制特定流量的带宽。

网站公告

今日签到

点亮在社区的每一天
去签到