Iptables 命令完整指南

简介: 【8月更文挑战第20天】

一、简介

iptables 是 Linux 系统中用于配置网络防火墙的工具,它允许用户设置、维护和检查网络流量的过滤规则。iptables 可以处理多种类型的网络流量,包括入站流量、出站流量以及通过 NAT(网络地址转换)转发的流量。本文将提供一个详细的 iptables 命令指南,涵盖其基本概念、常用命令及实际使用示例。

二、基本概念

在深入命令之前,了解以下基本概念有助于更好地理解 iptables 的工作原理:

  1. 表(Tables)iptables 中的规则被分为不同的表,每个表有不同的处理目标。常见的表包括:

    • filter:默认表,用于处理网络流量的过滤。
    • nat:用于网络地址转换,处理源地址和目标地址的转换。
    • mangle:用于修改数据包的某些属性,如 TOS(服务类型)字段。
    • raw:用于处理数据包的原始数据,通常用于调试目的。
  2. 链(Chains):每个表中包含多个链,每条链包含一组规则。常见的链包括:

    • INPUT:处理进入本地系统的数据包。
    • FORWARD:处理经过本地系统转发的数据包。
    • OUTPUT:处理从本地系统发出的数据包。
    • PREROUTING:在路由决策之前处理数据包,用于 NAT 和 Mangle 表。
    • POSTROUTING:在路由决策之后处理数据包,用于 NAT 和 Mangle 表。
  3. 规则(Rules):每条规则定义了如何处理匹配特定条件的数据包。规则包括匹配条件和相应的动作(如 ACCEPT、DROP、REJECT 等)。

三、常用命令

以下是 iptables 命令的详细指南,包括命令格式、常见选项和使用示例。

1. 查看现有规则

查看所有表中的规则:

sudo iptables -L -v -n
  • -L:列出规则。
  • -v:显示详细信息,包括数据包计数和字节数。
  • -n:以数字形式显示 IP 地址和端口号,而不是解析主机名。

查看特定表中的规则:

sudo iptables -t nat -L -v -n
  • -t nat:指定查看 nat 表中的规则。
2. 添加规则

INPUT 链中添加一条规则,允许从特定 IP 地址的 HTTP 流量:

sudo iptables -A INPUT -p tcp -s 192.168.1.10 --dport 80 -j ACCEPT
  • -A INPUT:将规则追加到 INPUT 链。
  • -p tcp:指定协议为 TCP。
  • -s 192.168.1.10:源 IP 地址为 192.168.1.10
  • --dport 80:目标端口为 80。
  • -j ACCEPT:匹配后接受流量。

FORWARD 链中添加一条规则,丢弃来自特定 IP 的所有流量:

sudo iptables -A FORWARD -s 10.0.0.5 -j DROP
  • -s 10.0.0.5:源 IP 地址为 10.0.0.5
  • -j DROP:匹配后丢弃流量。
3. 删除规则

删除特定链中的一条规则,假设规则编号为 2:

sudo iptables -D INPUT 2
  • -D INPUT:删除 INPUT 链中的规则。
  • 2:规则编号。

根据规则内容删除规则:

sudo iptables -D INPUT -p tcp -s 192.168.1.10 --dport 80 -j ACCEPT
  • 与添加规则时相同的选项,但使用 -D 来删除规则。
4. 修改规则

iptables 不支持直接修改规则,只能先删除原有规则,再添加修改后的规则。先删除旧规则:

sudo iptables -D INPUT -p tcp -s 192.168.1.10 --dport 80 -j ACCEPT

然后添加修改后的规则:

sudo iptables -A INPUT -p tcp -s 192.168.1.10 --dport 8080 -j ACCEPT
  • 修改端口号为 8080。
5. 保存和恢复规则

保存当前规则到文件:

sudo iptables-save > /etc/iptables/rules.v4
  • 将规则保存到 /etc/iptables/rules.v4 文件中。

恢复规则:

sudo iptables-restore < /etc/iptables/rules.v4
  • /etc/iptables/rules.v4 文件中恢复规则。
6. 其他常用操作

清空所有规则:

sudo iptables -F
  • -F:清空所有链中的规则。

清空特定链中的规则:

sudo iptables -F INPUT
  • -F INPUT:清空 INPUT 链中的规则。

设置默认策略:

sudo iptables -P INPUT DROP
  • -P INPUT DROP:设置 INPUT 链的默认策略为丢弃流量。

设置默认策略为接受:

sudo iptables -P INPUT ACCEPT
  • -P INPUT ACCEPT:设置 INPUT 链的默认策略为接受流量。

四、示例应用

1. 设置一个基本的防火墙

允许所有流量,设置默认策略为丢弃流量:

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

允许 HTTP 和 HTTPS 流量:

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
2. 设置端口转发

将所有到达本地 8080 端口的流量转发到内部 IP 地址的 80 端口:

sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80
sudo iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.10 --dport 80 -j MASQUERADE
  • -t nat:指定 nat 表。
  • -A PREROUTING:在路由之前处理流量。
  • -j DNAT --to-destination:目标地址转换。

五、总结

iptables 是一个功能强大且灵活的工具,用于配置和管理 Linux 系统的网络防火墙。通过掌握 iptables 的基本命令和操作,用户可以有效地控制网络流量,保护系统免受潜在的网络威胁。本文详细介绍了 iptables 的常用命令和操作方法,希望能帮助您更好地理解和使用 iptables

目录
相关文章
|
安全 Linux 网络安全
在Linux中,如何列出和删除 Iptables 防火墙规则?
在Linux中,如何列出和删除 Iptables 防火墙规则?
2353 0
|
网络协议 网络性能优化 算法
iptables深入解析-mangle篇
      讲了filter、ct、nat 现在剩下最后一个知名模块mangle,但是自身虽然知道内核支持修改数据包的信息,它主要用在策略路由和qos上.我们就具体分析一下.      mangle表主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(T...
7738 0
|
安全 关系型数据库 MySQL
|
缓存 Linux 开发工具
CentOS 7- 配置阿里镜像源
阿里镜像官方地址http://mirrors.aliyun.com/ 1、点击官方提供的相应系统的帮助 :2、查看不同版本的系统操作: 下载源1、安装wget yum install -y wget2、下载CentOS 7的repo文件wget -O /etc/yum.
252368 0
|
网络协议 应用服务中间件 Linux
Linux服务器系统优化:sysctl.conf文件(内核及网络设置)
Linux服务器系统优化:sysctl.conf文件(内核及网络设置)
8078 0
|
Kubernetes 应用服务中间件 nginx
史上最全干货!Kubernetes 原理+实战总结(全文6万字,90张图,100个知识点)(上)
史上最全干货!Kubernetes 原理+实战总结(全文6万字,90张图,100个知识点)
51024 30
|
网络协议 Linux 网络安全
Iptables深度解析:四表五链与动作参数
Iptables深度解析:四表五链与动作参数
1240 0
|
安全 Linux 网络安全
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
114024 0
|
存储 Linux 网络安全
iptables-save 命令使用总结
iptables-save 命令使用总结
657 0
|
Ubuntu 安全 网络协议