iptables 命令详解

server/2024/10/20 16:57:36/

iptables 是 Linux 中用于设置、维护和检查 IP 数据包过滤规则的命令。它是一个强大的工具,广泛用于网络防火墙、安全性和网络地址转换 (NAT) 等。

以下是 iptables 命令的主要选项及其详细说明。

1. 基本语法

iptables [选项] [链名称] [规则匹配条件] [动作]
  • [选项]:指定操作,如新增、删除、插入规则等。
  • [链名称]:指定 iptables 的链,如 INPUTOUTPUTFORWARDPREROUTING 等。
  • [规则匹配条件]:数据包过滤的条件,如源 IP 地址、目标端口等。
  • [动作]:匹配到的包执行的操作,如 ACCEPTDROPREJECT 等。

2. 链 (Chain)

iptables 主要有以下几种内置链:

  • INPUT:用于控制进入本地系统的数据包。
  • OUTPUT:用于控制本地系统发送的数据包。
  • FORWARD:用于控制通过本地系统的数据包(本机不是目的地时)。
  • PREROUTING:用于在包进入路由之前修改数据包,用于 NAT。
  • POSTROUTING:用于在包离开路由后修改数据包,用于 NAT。

3. 主要选项

3.1 链管理选项
  • -L:列出指定链中的所有规则。

    iptables -L
    

    可以查看当前所有规则,也可以加上链名查看特定链的规则。

  • -N:创建新链。

    iptables -N my_chain
    
  • -X:删除自定义链(前提是该链没有规则)。

    iptables -X my_chain
    
  • -F:清空指定链中的所有规则。如果不指定链,则清空所有链的规则。

    iptables -F
    
  • -Z:将链的计数器清零。

    iptables -Z
    
3.2 规则管理选项
  • -A:在指定链的末尾追加一条规则。

    iptables -A INPUT -s 192.168.1.100 -j ACCEPT
    

    允许来自 IP 地址 192.168.1.100 的连接。

  • -I:在指定链的指定位置插入一条规则(默认在首位)。

    iptables -I INPUT 1 -s 192.168.1.100 -j ACCEPT
    

    INPUT 链的第一个位置插入一条规则,允许 192.168.1.100 的连接。

  • -D:删除指定链中的规则。可以通过规则编号或直接匹配规则来删除。

    iptables -D INPUT 1
    

    删除 INPUT 链中的第一条规则。

  • -R:替换指定链中的某条规则。

    iptables -R INPUT 1 -s 192.168.1.101 -j ACCEPT
    

    替换 INPUT 链的第一条规则,允许 192.168.1.101 的连接。

  • -P:设置默认策略(即当数据包不匹配任何规则时的默认动作)。

    iptables -P INPUT DROP
    

    设置 INPUT 链的默认策略为丢弃所有不匹配的包。

3.3 匹配条件选项
  • -s--source:指定源 IP 地址。

    iptables -A INPUT -s 192.168.1.100 -j ACCEPT
    

    匹配来自 192.168.1.100 的数据包。

  • -d--destination:指定目标 IP 地址。

    iptables -A OUTPUT -d 192.168.1.200 -j ACCEPT
    

    匹配发往 192.168.1.200 的数据包。

  • -p--protocol:指定协议类型(如 tcpudpicmp)。

    iptables -A INPUT -p tcp -j ACCEPT
    

    匹配 TCP 协议的数据包。

  • --sport:指定源端口号(仅适用于 tcpudp 协议)。

    iptables -A INPUT -p tcp --sport 22 -j ACCEPT
    

    允许来自端口 22 的 TCP 包(通常是 SSH)。

  • --dport:指定目标端口号。

    iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    

    允许访问本机 80 端口(HTTP)。

  • -i--in-interface:指定进入的网络接口。

    iptables -A INPUT -i eth0 -j ACCEPT
    

    允许所有从接口 eth0 进来的包。

  • -o--out-interface:指定离开的网络接口。

    iptables -A OUTPUT -o eth0 -j ACCEPT
    

    允许所有从接口 eth0 发出的包。

  • -m state --state:使用连接跟踪模块,匹配数据包的连接状态。

    iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT
    

    允许新连接和已建立的连接的数据包。

  • -m limit:限制数据包匹配速率。

    iptables -A INPUT -p icmp -m limit --limit 1/second -j ACCEPT
    

    限制每秒最多接受 1 个 ICMP 数据包(防止 ICMP 洪水攻击)。

3.4 动作选项
  • -j--jump:指定匹配条件满足时跳转到的动作目标链

    • ACCEPT:允许数据包通过。
    • DROP:丢弃数据包,不作任何响应
    • REJECT:拒绝数据包,并返回错误信息(比如 icmp-port-unreachable)。
    • LOG:记录日志,但不阻止数据包的继续处理。

    示例:

    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    iptables -A INPUT -p tcp --dport 80 -j LOG --log-prefix "HTTP Access: "
    iptables -A INPUT -p tcp --dport 80 -j DROP
    
  • RETURN:从自定义链返回到上一个链。

    示例:

    iptables -N my_chain
    iptables -A my_chain -j RETURN
    
3.5 NAT 相关选项
  • -t nat:选择 NAT 表进行操作。NAT 表用于网络地址转换,常见的用途是端口映射、源 IP 地址转换等。

    • PREROUTING:在数据包被路由之前应用规则。
    • POSTROUTING:在数据包被路由之后应用规则。
    • OUTPUT:在本地生成的数据包上应用 NAT 规则。

    示例:端口转发(将 80 端口的访问转发到 8080 端口)

    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
    
3.6 保存与恢复规则
  • 保存规则

    iptables-save > /etc/iptables/rules.v4
    
  • 恢复规则

    iptables-restore < /etc/iptables/rules.v4
    

4. 常用的综合示例

  1. 允许 SSH 访问(TCP 22 端口):

    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    
  2. 允许 HTTP/HTTPS 访问

    iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    iptables -A INPUT -p tcp --dport 443 -j ACCEPT
    
  3. 拒绝所有其他流量

    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT ACCEPT
    

通过这些规则,iptables 可以被用来控制网络流量,保障服务器和网络的安全。


http://www.ppmy.cn/server/133395.html

相关文章

Flutter开发的树莓派应用如何优化性能?

哈喽&#xff0c;我是老刘 前段时间有朋友咨询我在树莓派上开发的Flutter程序如何优化性能的问题。 老刘写了6年多的Flutter代码&#xff0c;树莓派这种平台还真是头一次碰到。 不过我听他说完他们的场景&#xff0c;我就知道他们大概率是碰到性能问题了。 那么今天就来说说这…

十三、行为型(策略模式)

策略模式&#xff08;Strategy Pattern&#xff09; 概念 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;允许定义一系列算法&#xff0c;将每个算法封装在策略类中&#xff0c;并使它们可以互换使用。客户端可以根据需要动态选择不同的策…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-16

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-16 目录 文章目录 目录1. Leveraging Social Determinants of Health in Alzheimers Research Using LLM-Augmented Literature Mining and Knowledge Graphs2. Alignment Between the Decision-Making Logic of …

Qt | CMake(Qt5 VS Qt6)

点击上方"蓝字"关注我们 01、CMake >>> CMake是一个简化跨不同平台开发项目构建过程的工具。CMake自动生成生成系统,如Makefiles和Visual Studio项目文件。 CMake是一个自带的第三方工具证明文件。 CMake 备忘清单02、如何使用CMake3.1.0带Qt 5 >>&…

【Golang】踩坑记录:make()创建引用类型,初始值是不是nil!!

文章目录 起因二、得记住的知识点1. make()切片&#xff0c;初始化了吗&#xff1f;2. make()切片不同长度容量&#xff0c;append时的差别3. 切片是指向数组的指针吗&#xff1f;4. 切片扩容时&#xff0c;重新分配内存&#xff0c;原切片的数据怎么办&#xff1f; 三、咳咳&a…

blender 金币基站 建模 学习笔记

一、学习blender视频教程链接 案例3&#xff1a;金币基站_建模_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Bt4y1E7qn?vd_sourced0ea58f1127eed138a4ba5421c577eb1&p12&spm_id_from333.788.videopod.episodes 二、金币基站建模过程 &#xff08;1&#x…

Spring AI Java程序员的AI之Spring AI(三)RAG实战

Spring AI之RAG实战与原理分析 前言RAGDocumentDocumentReaderDocumentTransformerDocumentWriter VectorStoreSimpleVectorStoreRedisVectorStore元数据搜索组装提示词 前言 检索增强生成&#xff08;RAG&#xff09;是一种结合信息检索和生成模型的技术&#xff0c;用于将相…

MYSQL 学习(四):数据库管理

MYSQL 学习&#xff08;四&#xff09;&#xff1a;数据库管理 文章目录 MYSQL 学习&#xff08;四&#xff09;&#xff1a;数据库管理1. 数据库表的创建与管理1.1 创建数据库命名规范创建语法 1.2 管理语法 2. 创建和管理表2.1 创建语法结构2.2 基于现有表创建表2.3 查看表结…