iptables 是 Linux 系统中最常用的防火墙工具,它基于 Netfilter 框架,用于管理网络数据包的过滤、网络地址转换(NAT)等。以下是 iptables 的常用命令及其详解:
一、基本概念
1. 表(Tables)
-
filter 表:默认表,用于数据包过滤。
-
nat 表:用于网络地址转换(如端口转发、IP 伪装)。
-
mangle 表:用于修改数据包(如 TTL、TOS)。
-
raw 表:用于连接跟踪豁免。
2. 链(Chains)
-
INPUT:处理进入本机的数据包。
-
OUTPUT:处理从本机发出的数据包。
-
FORWARD:处理经过本机转发的数据包。
-
PREROUTING(nat/mangle):数据包进入时立即处理。
-
POSTROUTING(nat/mangle):数据包发出前处理。
二、常用命令详解
1. 查看规则
iptables <span class="token parameter variable">-L</span> <span class="token comment"># 列出所有规则</span>
iptables <span class="token parameter variable">-L</span> <span class="token parameter variable">-n</span> <span class="token comment"># 以数字形式显示(不解析域名)</span>
iptables <span class="token parameter variable">-L</span> <span class="token parameter variable">-v</span> <span class="token comment"># 显示详细信息(包/字节计数)</span>
iptables <span class="token parameter variable">-L</span> <span class="token parameter variable">-t</span> nat <span class="token comment"># 查看指定表(如 nat 表)</span>
iptables <span class="token parameter variable">-S</span> <span class="token comment"># 以 iptables-save 格式显示规则</span>
2. 清空规则
iptables <span class="token parameter variable">-F</span> <span class="token comment"># 清空所有规则</span>
iptables <span class="token parameter variable">-F</span> INPUT <span class="token comment"># 清空指定链(如 INPUT)</span>
iptables <span class="token parameter variable">-t</span> nat <span class="token parameter variable">-F</span> <span class="token comment"># 清空指定表的规则</span>
iptables <span class="token parameter variable">-X</span> <span class="token comment"># 删除用户自定义链</span>
iptables <span class="token parameter variable">-Z</span> <span class="token comment"># 重置包/字节计数器</span>
3. 设置默认策略
iptables <span class="token parameter variable">-P</span> INPUT DROP <span class="token comment"># 设置 INPUT 链默认策略为 DROP</span>
iptables <span class="token parameter variable">-P</span> FORWARD ACCEPT <span class="token comment"># 设置 FORWARD 链默认策略为 ACCEPT</span>
iptables <span class="token parameter variable">-P</span> OUTPUT ACCEPT <span class="token comment"># 设置 OUTPUT 链默认策略为 ACCEPT</span>
4. 添加规则
<span class="token comment"># 允许特定端口(如 80)</span>
iptables <span class="token parameter variable">-A</span> INPUT <span class="token parameter variable">-p</span> tcp <span class="token parameter variable">--dport</span> <span class="token number">80</span> <span class="token parameter variable">-j</span> ACCEPT
<span class="token comment"># 允许特定 IP 访问</span>
iptables <span class="token parameter variable">-A</span> INPUT <span class="token parameter variable">-s</span> <span class="token number">192.168</span>.1.100 <span class="token parameter variable">-j</span> ACCEPT
<span class="token comment"># 允许特定网段</span>
iptables <span class="token parameter variable">-A</span> INPUT <span class="token parameter variable">-s</span> <span class="token number">192.168</span>.1.0/24 <span class="token parameter variable">-j</span> ACCEPT
<span class="token comment"># 允许回环接口(localhost)</span>
iptables <span class="token parameter variable">-A</span> INPUT <span class="token parameter variable">-i</span> lo <span class="token parameter variable">-j</span> ACCEPT
<span class="token comment"># 允许已建立的连接和相关的数据包</span>
iptables <span class="token parameter variable">-A</span> INPUT <span class="token parameter variable">-m</span> state <span class="token parameter variable">--state</span> ESTABLISHED,RELATED <span class="token parameter variable">-j</span> ACCEPT
5. 插入与删除规则
iptables <span class="token parameter variable">-I</span> INPUT <span class="token number">1</span> <span class="token parameter variable">-p</span> tcp <span class="token parameter variable">--dport</span> <span class="token number">22</span> <span class="token parameter variable">-j</span> ACCEPT <span class="token comment"># 在 INPUT 链第 1 条插入规则</span>
iptables <span class="token parameter variable">-D</span> INPUT <span class="token number">2</span> <span class="token comment"># 删除 INPUT 链第 2 条规则</span>
iptables <span class="token parameter variable">-D</span> INPUT <span class="token parameter variable">-p</span> tcp <span class="token parameter variable">--dport</span> <span class="token number">80</span> <span class="token parameter variable">-j</span> ACCEPT <span class="token comment"># 删除匹配的规则</span>
6. 网络地址转换(NAT)
<span class="token comment"># 源地址转换(SNAT)用于共享上网</span>
iptables <span class="token parameter variable">-t</span> nat <span class="token parameter variable">-A</span> POSTROUTING <span class="token parameter variable">-s</span> <span class="token number">192.168</span>.1.0/24 <span class="token parameter variable">-j</span> MASQUERADE
<span class="token comment"># 目的地址转换(DNAT)用于端口转发</span>
iptables <span class="token parameter variable">-t</span> nat <span class="token parameter variable">-A</span> PREROUTING <span class="token parameter variable">-p</span> tcp <span class="token parameter variable">--dport</span> <span class="token number">80</span> <span class="token parameter variable">-j</span> DNAT --to-destination <span class="token number">192.168</span>.1.10:8080
<span class="token comment"># 本地端口转发(重定向)</span>
iptables <span class="token parameter variable">-t</span> nat <span class="token parameter variable">-A</span> OUTPUT <span class="token parameter variable">-p</span> tcp <span class="token parameter variable">--dport</span> <span class="token number">80</span> <span class="token parameter variable">-j</span> REDIRECT --to-port <span class="token number">8080</span>
7. 限制连接数
<span class="token comment"># 限制每 IP 对 SSH 的连接数(每分钟 3 个)</span>
iptables <span class="token parameter variable">-A</span> INPUT <span class="token parameter variable">-p</span> tcp <span class="token parameter variable">--dport</span> <span class="token number">22</span> <span class="token parameter variable">-m</span> limit <span class="token parameter variable">--limit</span> <span class="token number">3</span>/min <span class="token parameter variable">-j</span> ACCEPT
8. 记录日志
iptables <span class="token parameter variable">-A</span> INPUT <span class="token parameter variable">-p</span> tcp <span class="token parameter variable">--dport</span> <span class="token number">80</span> <span class="token parameter variable">-j</span> LOG --log-prefix <span class="token string">"HTTP-ACCESS: "</span>
三、常用参数说明
| 参数 | 说明 |
|---|---|
-A |
在链末尾添加规则 |
-I |
在指定位置插入规则 |
-D |
删除规则 |
-P |
设置链的默认策略 |
-s |
源 IP 地址 |
-d |
目标 IP 地址 |
-p |
协议(tcp/udp/icmp) |
--dport |
目标端口 |
--sport |
源端口 |
-i |
输入网卡(如 eth0) |
-o |
输出网卡 |
-j |
动作(ACCEPT/DROP/REJECT/LOG) |
-m |
加载扩展模块(state/limit/multiport) |
四、实用示例
1. 基本防火墙配置
<span class="token comment"># 清空现有规则</span>
iptables <span class="token parameter variable">-F</span>
<span class="token comment"># 设置默认策略</span>
iptables <span class="token parameter variable">-P</span> INPUT DROP
iptables <span class="token parameter variable">-P</span> FORWARD DROP
iptables <span class="token parameter variable">-P</span> OUTPUT ACCEPT
<span class="token comment"># 允许本地回环</span>
iptables <span class="token parameter variable">-A</span> INPUT <span class="token parameter variable">-i</span> lo <span class="token parameter variable">-j</span> ACCEPT
<span class="token comment"># 允许已建立的连接</span>
iptables <span class="token parameter variable">-A</span> INPUT <span class="token parameter variable">-m</span> state <span class="token parameter variable">--state</span> ESTABLISHED,RELATED <span class="token parameter variable">-j</span> ACCEPT
<span class="token comment"># 允许 SSH(22 端口)</span>
iptables <span class="token parameter variable">-A</span> INPUT <span class="token parameter variable">-p</span> tcp <span class="token parameter variable">--dport</span> <span class="token number">22</span> <span class="token parameter variable">-j</span> ACCEPT
<span class="token comment"># 允许 HTTP 和 HTTPS</span>
iptables <span class="token parameter variable">-A</span> INPUT <span class="token parameter variable">-p</span> tcp <span class="token parameter variable">--dport</span> <span class="token number">80</span> <span class="token parameter variable">-j</span> ACCEPT
iptables <span class="token parameter variable">-A</span> INPUT <span class="token parameter variable">-p</span> tcp <span class="token parameter variable">--dport</span> <span class="token number">443</span> <span class="token parameter variable">-j</span> ACCEPT
<span class="token comment"># 允许 Ping</span>
iptables <span class="token parameter variable">-A</span> INPUT <span class="token parameter variable">-p</span> icmp <span class="token parameter variable">-j</span> ACCEPT
2. 保存与恢复规则
<span class="token comment"># 保存规则(CentOS/RHEL)</span>
<span class="token function">service</span> iptables save
<span class="token comment"># 或</span>
iptables-save <span class="token operator">></span> /etc/sysconfig/iptables
<span class="token comment"># 恢复规则</span>
iptables-restore <span class="token operator"><</span> /etc/sysconfig/iptables
<span class="token comment"># 保存规则(Ubuntu/Debian)</span>
iptables-save <span class="token operator">></span> /etc/iptables/rules.v4
五、注意事项
-
谨慎操作:错误的规则可能导致无法远程连接服务器。
-
测试规则:建议在本地测试后再应用到生产环境。
-
保存规则:iptables 规则默认重启后失效,需手动保存。
-
使用脚本:复杂的防火墙配置建议使用脚本管理。
以上是 iptables 的常用命令及详解,掌握这些基础命令可以满足大部分防火墙配置需求。对于更复杂的需求,可以进一步学习 iptables 的扩展模块和高级功能。
「点点赞赏,手留余香」
声明:本文为原创文章,版权归旷野小站所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 让gVim9.1打开时自动载入上次关闭时的所有标签页11/10
- ♥ 云计算运维教程学习笔记04/25
- ♥ 网站的域名、目录的301重定向nginx配置方法示例03/06
- ♥ Linux 系统中使用 iptables 来封禁指定的 IP 段10/07
- ♥ vim中查找和替换命令详解02/04
- ♥ dd命令应用实例及命令的解释11/03