阿里云企业认证 阿里云国际站服务器防火墙iptables设置
别慌,iptables不是玄学,是门手艺活
刚登陆阿里云国际站(Alibaba Cloud International)买的VPS,第一件事不是装宝塔、不是跑网站,而是——把防火墙拧紧。别笑,真有兄弟开着裸奔的CentOS,三天就被扫出27个挖矿进程,连top都卡得像PPT。而iptables?它不是Linux里那个冷着脸的保安大叔,而是你亲手调教的门禁系统:能放谁进、拦谁在门外、甚至记下谁鬼鬼祟祟敲了十次门——全凭你几行命令定规矩。
先摸清家底:你的iptables到底在不在岗?
别急着写规则,先确认它是不是‘在职人员’:
sudo iptables -L -n -v
如果返回一堆链(INPUT/OUTPUT/FORWARD)+规则,恭喜,它在岗;如果报错Command not found,说明你用的是firewalld(常见于CentOS 7+/Rocky 8+)或nftables(较新发行版)。这时别硬刚iptables,要么切回传统模式(不推荐新手),要么直接用sudo firewall-cmd --list-all查状态——但本文专注iptables,所以默认你用的是Ubuntu 20.04/22.04、Debian 11/12,或手动停掉了firewalld的CentOS。
顺手检查服务状态:
sudo systemctl status iptables
注意:Ubuntu/Debian默认不启用iptables服务(没systemd unit),规则靠重启脚本或iptables-persistent保存;而CentOS系可能自带iptables-services包。这点后面细说。
三板斧:策略、链、规则,一个都不能少
iptables不是Excel表格,它是分层逻辑:
- 策略(Policy):每条链的‘默认态度’。比如INPUT链默认是ACCEPT(全放行),等于大门敞开挂‘欢迎光临’;改成DROP(拒绝),就是‘非请勿入,问都不问’——这是安全基线第一步。
- 链(Chain):数据包的必经之路。INPUT(进来的)、OUTPUT(出去的)、FORWARD(转发的)。我们主要动INPUT。
- 规则(Rule):按顺序匹配,一旦命中就执行动作(ACCEPT/DROP/REJECT),不再往下看。顺序=生命线!
记住口诀:先放行必须的,再拒绝可疑的,最后堵死默认门。
动手前:先备份,再清空,别让旧规则拖后腿
执行以下命令前,请确保你有控制台(Console)访问权限——万一SSH规则写崩,还能救回来:
# 备份当前规则(生成文本文件,可随时恢复)
sudo iptables-save > ~/iptables-backup-$(date +%F).rules
# 清空所有规则(慎用!但干净起步最安全)
sudo iptables -F
sudo iptables -X
sudo iptables -Z
# 重置默认策略为ACCEPT(临时放行,避免锁死)
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
现在你站在一张白纸上。深呼吸,开始画防线。
第一步:保命通道——SSH必须活着
假设你用22端口SSH(强烈建议改非标端口,后面讲),加这条:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
拆解:-A INPUT追加到INPUT链;-p tcp指定协议;--dport 22目标端口22;-j ACCEPT动作放行。简单粗暴,但有效。
进阶技巧:只允许特定IP登录(比如你办公室公网IP):
sudo iptables -A INPUT -p tcp -s 203.123.45.67 --dport 22 -j ACCEPT
注意:-s是源IP,别写成-d(目标IP)——那是给自己挖坑。
第二步:放行基础服务端口
Web服务?加80/443:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
MySQL远程访问?谨慎!仅限内网或可信IP:
sudo iptables -A INPUT -p tcp -s 10.0.0.0/8 --dport 3306 -j ACCEPT
(10.0.0.0/8是阿里云经典内网段,按你实际VPC网段调整)
第三步:状态跟踪——让合法连接畅通无阻
别忘了:你访问网站时,服务器要回包。靠RELATED,ESTABLISHED状态识别已建立连接:
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
这句必须放在SSH规则之后、其他放行规则之前——否则新连接永远进不来。顺序!顺序!顺序!
第四步:封杀高频攻击者——用recent模块反暴力破解
对付SSH爆破,iptables比fail2ban更底层(且不依赖Python):
# 记录30秒内尝试SSH超3次的IP
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 30 --hitcount 3 -j DROP
解释:--set打标记,--update查标记,--hitcount 3三次就拉黑30秒。实测比单纯封IP更抗扫描器。
终极收尾:把规则焊死在硬盘上
重启服务器?规则消失?不存在的。不同系统保存姿势不同:
阿里云企业认证 Ubuntu/Debian:靠iptables-persistent
sudo apt update && sudo apt install iptables-persistent -y
sudo netfilter-persistent save
# 或手动保存
sudo iptables-save | sudo tee /etc/iptables/rules.v4
验证:sudo netfilter-persistent reload后iptables -L应不变。
CentOS/Rocky:用service脚本
sudo yum install iptables-services -y
sudo systemctl enable iptables
sudo service iptables save # 规则存入 /etc/sysconfig/iptables
排错指南:当世界突然安静
- SSH连不上?立刻用阿里云控制台VNC登录,检查
iptables -L -n是否误删了SSH规则,或策略仍是DROP。临时恢复:sudo iptables -P INPUT ACCEPT。 - 网站打不开?确认80/443规则在
RELATED,ESTABLISHED之后,且没被前面的DROP规则截胡。 - 规则不生效?检查是否启用了云平台安全组!阿里云国际站的安全组是第一道墙,iptables是第二道。安全组没开80端口,iptables开100个也白搭。
安全彩蛋:三个让你少踩坑的硬核建议
1. 别迷信‘一键脚本’:网上那些curl xxx | bash的iptables安装器,90%硬编码22端口、不校验环境、还删你原有规则。自己敲十行,胜过抄一百行。
2. 端口改名不是万能药:把SSH从22改成2222,能过滤掉80%脚本小子,但专业扫描器分分钟扫出来。真正有效的是:限制IP + 密钥登录 + fail2ban三件套。
3. 日志才是真相:加一条记录被拒绝的IP(谨慎开启,避免日志爆炸):
sudo iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP: " --log-level 4
sudo iptables -A INPUT -j DROP
然后sudo tail -f /var/log/kern.log | grep IPTABLES,亲眼看看谁在撞门。
最后送你一句大实话
iptables不是越复杂越安全,而是越清晰越可靠。一条精准的ACCEPT,胜过十行模糊的DROP;一次手写的规则保存,强过一百次重启后抓瞎。在阿里云国际站跑服务,服务器是你租的,但安全,永远得自己一锤一钉地钉牢。现在,关掉这篇教程,打开终端,敲下第一行iptables -L吧——真正的防火墙,从来不在云厂商文档里,而在你指尖的命令行中。


