ky818smKy818sm  2025-10-08 11:27 旷野小站 隐藏边栏 |   抢沙发  0 
文章评分 0 次,平均分 0.0

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

五、注意事项

  1. 谨慎操作:错误的规则可能导致无法远程连接服务器。

  2. 测试规则:建议在本地测试后再应用到生产环境。

  3. 保存规则:iptables 规则默认重启后失效,需手动保存。

  4. 使用脚本:复杂的防火墙配置建议使用脚本管理。


以上是 iptables 的常用命令及详解,掌握这些基础命令可以满足大部分防火墙配置需求。对于更复杂的需求,可以进一步学习 iptables 的扩展模块和高级功能。

声明:本站许多内容均从网上收集整理,若有内容侵犯到您的权益,请通过邮件【6167555@qq.com】联系本站,我们将及时删除!

有问题请点我联系站长

「点点赞赏,手留余香」
HIDE

声明:本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享