阿里云企业认证 阿里云国际站服务器防火墙iptables设置

阿里云国际 / 2026-04-25 12:54:12

别慌,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 reloadiptables -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吧——真正的防火墙,从来不在云厂商文档里,而在你指尖的命令行中。

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系