《每日一命令18:iptables——Linux防火墙入门》

本期摘要

iptables 是 Linux 内核集成的防火墙工具,但很多人对它敬而远之------规则看起来像天书。本文从实战出发,不讲复杂的表和链理论,只教你三件事:怎么查看当前规则、怎么开放/关闭端口、怎么封禁单个IP。附带最常用的规则示例、保存规则的方法,以及如何避免把自己锁在服务器外的"后悔药"。读完你就能在服务器上建起第一道防线。

iptables是什么?

iptables 是 Linux 内核 netfilter 框架的用户态管理工具。用于配置包过滤规则、网络地址转换(NAT)等。

大多数云服务器默认没有开启防火墙,或者用的是 firewalld,但 iptables 的命令思路是通用的。

最常用的5种姿势

1. 查看当前规则

bash

复制代码
# 查看 filter 表(默认)的规则
iptables -L -n -v

# 查看更详细的规则编号(方便删除)
iptables -L -n --line-numbers

-L 列出,-n 不解析名字,-v 显示详细信息。

2. 开放端口

bash

复制代码
# 开放 80 端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 开放 22 端口(SSH)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

-A append 追加规则到链尾,-p 协议,--dport 目标端口,-j 动作(ACCEPT/DROP/REJECT)。

3. 拒绝特定IP

bash

复制代码
# 封禁单个IP
iptables -A INPUT -s 192.168.1.100 -j DROP

# 封禁整个C段
iptables -A INPUT -s 192.168.1.0/24 -j DROP

-s 源地址。

4. 删除规则

bash

复制代码
# 根据规则内容删除
iptables -D INPUT -s 192.168.1.100 -j DROP

# 根据编号删除(先查看编号)
iptables -L -n --line-numbers
iptables -D INPUT 3

-D 删除。

5. 保存与恢复规则

Debian/Ubuntu:

bash

复制代码
# 安装持久化工具
apt install iptables-persistent
# 保存
netfilter-persistent save

CentOS/RHEL:

bash

复制代码
# 保存规则(覆盖)
service iptables save
# 或
iptables-save > /etc/sysconfig/iptables

真实场景

场景1:服务器新上业务,开放8080端口

bash

复制代码
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT

-I 插入到链首,优先级更高。

场景2:禁止某个IP访问本机所有端口

bash

复制代码
iptables -A INPUT -s 恶意IP -j DROP

场景3:只允许特定IP访问SSH

bash

复制代码
iptables -A INPUT -p tcp --dport 22 -s 允许的IP -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

注意顺序:先允许,再拒绝其他。

场景4:防止简单的DDoS(限制连接数)

bash

复制代码
# 限制单个IP对80端口的并发连接数不超过10
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP

避免把自己锁在外面

远程操作服务器配置防火墙时,最怕的是把自己封掉了。

安全操作步骤:

bash

复制代码
# 1. 先开放SSH端口(如果不确定是否已存在)
iptables -I INPUT -p tcp --dport 22 -j ACCEPT

# 2. 保存规则(如果已经可以)

# 3. 测试新规则(另开一个SSH窗口连一下,能通再继续)

# 4. 最后设置默认策略(小心!)
iptables -P INPUT DROP   # 默认拒绝所有入站

后悔药方案: 设置一个定时任务,10分钟后清空规则。万一锁住了,等10分钟自动恢复。

bash

复制代码
# 10分钟后清空所有规则
echo "iptables -F" | at now + 10 minutes

常用参数速查

参数 含义
-A 追加规则(链尾)
-I 插入规则(链首,可指定位置)
-D 删除规则
-L 列出规则
-F 清空所有规则(小心!)
-P 设置默认策略
-p 协议(tcp/udp/icmp)
--dport 目标端口
--sport 源端口
-s 源地址
-d 目标地址
-j 动作(ACCEPT/DROP/REJECT/LOG)
-m 匹配模块(connlimit、state等)
-v 详细信息

下期预告

《每日一命令19:firewalld------更友好的防火墙管理》

相关推荐
Sokach10159 小时前
Linux Shell 脚本从零到能用:一个新手的一天学习总结
linux
SelectDB1 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
AlfredZhao1 天前
Docker 容器时区不对,`timedatectl` 不存在怎么办?
linux·timezone
zzzzzz3102 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode2 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220703 天前
如何搭建本地yum源(上)
运维
A小辣椒4 天前
TShark:Wireshark CLI 功能
linux
A小辣椒4 天前
TShark:基础知识
linux
AlfredZhao4 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao5 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi