《每日一命令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-Aappend 追加规则到链尾-p协议--dport目标端口-j动作ACCEPT/DROP/REJECT。3. 拒绝特定IPbash# 封禁单个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/Ubuntubash# 安装持久化工具 apt install iptables-persistent # 保存 netfilter-persistent saveCentOS/RHELbash# 保存规则覆盖 service iptables save # 或 iptables-save /etc/sysconfig/iptables真实场景场景1服务器新上业务开放8080端口bashiptables -I INPUT -p tcp --dport 8080 -j ACCEPT-I插入到链首优先级更高。场景2禁止某个IP访问本机所有端口bashiptables -A INPUT -s 恶意IP -j DROP场景3只允许特定IP访问SSHbashiptables -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详细信息下期预告《每日一命令19firewalld——更友好的防火墙管理》