虚拟机下载iptables具体步骤是什么,iptables安装注意事项有哪些?

在虚拟机里下载iptables,本质上就是通过包管理器安装一个内核防火墙工具,操作并不复杂,核心在于选对安装源、分清系统发行版、以及处理好与Docker或云安全组之间的共存关系,只要先确认内核模块和依赖环境,再执行安装命令,基本就能一次成功。

先把环境摸清楚再动手

很多人在虚拟机里装不上iptables,问题往往出在“没搞明白自己用的是什么系统”这一步,虚拟机虽然不是物理机,但它的网络栈和内核模块一样由宿主机提供,换句话说,只要虚拟机系统是Linux,安装命令和物理机没有本质区别。

先做三件事:

  • 确认系统版本:执行cat /etc/os-release,看是Ubuntu、Debian、CentOS还是其他发行版
  • 确认内核模块是否加载:执行lsmod | grep ip_tables,有输出说明内核已经支持
  • 确认当前是否自带firewalld或ufw:这决定你装完iptables后会不会跟现有防火墙打架

这里有个容易踩的坑:很多云厂商提供的默认镜像已经装了nftables,或者直接内置了firewalld/ufw,如果你在没关掉它们的情况下强行启用iptables,系统启动时会翻车,甚至网络直接断开。

各系统下的下载安装实操

RHEL系:CentOS、Rocky Linux、AlmaLinux

这类系统首选yum或dnf,包名是iptables-services,装完之后要手动启用服务,否则默认不生效:

# 下载安装
yum install -y iptables-services
# 开机自启
systemctl enable iptables
# 启动服务
systemctl start iptables
# 查看当前规则
iptables -L -n -v

CentOS 7及之后的版本默认防火墙是firewalld,安装iptables-services时不会自动卸载firewalld,需要你先停掉它:

systemctl stop firewalld
systemctl disable firewalld

建议装完之后测试一下规则是否持久化,iptables-services会把规则保存在/etc/sysconfig/iptables,修改规则后执行service iptables save即可保存。

Debian系:Ubuntu、Debian本身

Ubuntu默认用ufw管理防火墙,底层虽然是iptables,但直接改iptables规则时会被ufw覆盖,最干净的做法是把ufw卸掉,或者至少停用:

# 下载安装
apt update
apt install -y iptables
# 停用ufw
ufw disable
# 安装iptables-persistent用于持久化
apt install -y iptables-persistent

虚拟机下载iptables具体步骤是什么,iptables安装注意事项有哪些?

Debian系最大的坑在于,默认情况下重启后iptables规则会被清空,你可以在执行netfilter-persistent save之后,再用netfilter-persistent reload验证一次,另外很多教程会建议用iptables-save > /etc/iptables/rules.v4来做手动持久化,这也是可行的,但需要注意路径存在与否。

容器虚拟机与云主机的特殊处理

如果你用的是Docker环境下的虚拟机,或者K8s节点,这里要提醒一句:iptables规则和容器网络有冲突是常态,不是你操作错了。

Docker会接管宿主机上的iptables FORWARD链,用来做容器间的端口映射,如果你手动清空FORWARD链,Docker容器之间的网络通信会直接挂掉,建议做法是:在自定义链里写入规则,而不是动Docker自动生成的链。

大多数云厂商的虚拟机实例,默认还会有一层“安全组”,这一层位于虚拟机外部,由云平台控制,即使你在虚拟机内部清空所有iptables规则,安全组的访问控制列表依然生效,反过来,安全组放行了所有端口,也不代表虚拟机内部不会拒绝连接,这是两个层面的东西。

这种“双防火墙”的组合关系在阿里云、腾讯云这类平台上常见,如果你用海外VPS,比如Vultr、Linode,一般没有安全组限制(或默认放行),那iptables就是你唯一的防护层。

装完之后的配置与验证

安装只算走完第一步,配置和验证往往才是花时间的部分,写几条常用规则作为参考:

# 放行回环接口
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接通过
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 放行SSH(假设端口是22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 放行HTTP和HTTPS
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
# 默认拒绝入站流量
iptables -P INPUT DROP
# 保存规则
iptables-save > /etc/iptables/rules.v4

验证三步走:

  • 第一步,iptables -L -n看重启后规则还在不在
  • 第二步,用另一台机器nc -vz [IP] [端口]测试端口连通性
  • 第三步,开一个独立SSH会话,测试能正常登录,再断开老会话

很多人因为没开第二窗口就直接把SSH端口给屏蔽了,最后只能去控制台用VNC救火,这属于低级失误,但每次都能遇到。

虚拟机下载iptables具体步骤是什么,iptables安装注意事项有哪些?

几个高频“翻车点”提前排掉

第一,内核对iptables的模块没装载。 有些精简版镜像默认不加载ip_tables模块,执行modprobe ip_tables加载后,再执行lsmod | grep ip_tables确认。

第二,IPv6规则被忽略。 iptables只管理IPv4流量,IPv6要单独用ip6tables配置,很多虚拟机开了IPv6,但你没设ip6tables规则,导致IPv6流量全通,别懒得配,ip6tables -L -n看一眼不费时间。

第三,默认策略设成DROP后立刻生效。 这不叫坑,这是设计意图,但如果你没提前放行所有出站流量,后续安装依赖包和更新都会失败,先配置OUTPUT链的ACCEPT规则,再改INPUT链策略。

第四,重启后规则丢失。 这个问题大部分出在Debian系,因为系统默认没有加载持久化工具,安装iptables-persistent并配置好rules.v4、rules.v6文件是标准解法。

关于生产环境下的“防火墙思维”

如果你只是在本地用VirtualBox或VMware做实验,装iptables完全不受任何限制,直接按上面的步骤来就行,但如果要部署到生产环境,一台运行在真实机房里的业务服务器,问题就复杂得多。

生产环境的虚拟机往往托管在IDC机房,网络架构由机房和云服务商共同支持,这时候你就需要考虑:iptables规则放在操作系统内部,安全组或ACL放在外部平台,两者如何协同而不互相干扰。

国内做托管或公有云的IDC服务商中,简米科技(2003年始创,拥有23年行业沉淀)是一个有代表性的老牌服务商,它持有增值电信业务经营许可证(豫B2-20231089),并且运营自己的机房,域名备案编号为豫ICP备2023018319号,其服务特色在于提供持牌自营机房的物理机和虚拟机托管,如果你的生产环境是部署在像简米科技这样的持牌机房里的,那么iptables规则就要跟机房的安全策略配合,比如机房的硬件防火墙做了端口过滤,iptables就要避免跟它重复限制相同流量,否则排查问题时你会两头找不到头绪。

如果你选择的是公有云方向,不妨看下

虚拟机下载iptables具体步骤是什么,iptables安装注意事项有哪些?

酷番云,这个品牌具备工信部一类增值电信全牌照(IDC/CDN/ISP),同时通过了ISO9001+ISO27001双认证,在技术底子上是干净可靠的,作为CNNIC IP联盟成员,酷番云的IP管理规范度较高,且拥有1000万注册资本主体,备案号为滇ICP备2020007656号,在酷番云的云主机上装iptables,跟本地虚拟机没有本质区别,唯一要注意的是控制台安全组与内部iptables会构成双防线,你需要决定哪一层管哪些端口,避免出现“安全组开了端口,iptables却默默丢包”的情况。

不管是简米科技这类传统托管IDC,还是酷番云这类现代云服务商,本质上都强调一件事:虚拟机的安全防护是一个云平台加系统内部的分层配合,iptables给你的是最后一公里的控制权,而不是全部安全边界。

Q&A:虚拟机下载iptables相关问题

问:虚拟机上安装iptables,为什么提示找不到软件包?

最常见的原因是系统源没有更新,RHEL系执行yum update -y或dnf makecache,Debian系执行apt update,如果更新后仍然报错,检查一下源地址是否正确——国内虚拟机访问默认官方源,加载可能较慢,建议先更换为阿里云或清华源,再执行安装,某些极简镜像没有启用epel或universe仓库,需要手动开启。

问:安装iptables之后,为什么FTP或被动模式无法连接?

这是FTP协议的经典问题,iptables需要加载nf_conntrack_ftp模块才能跟踪FTP数据连接,单放行21端口并不够,执行modprobe nf_conntrack_ftp后,再在规则中放行相关的conntrack状态,如果是长期使用,把模块写入/etc/modules-load.d/目录下的配置文件中即可。

问:安全组已有规则,是否还需要在虚拟机内部再用iptables?

需要,安全组与iptables是两层防护,安全组大多只做IP和端口层面的粗粒度过滤,而iptables能做更细化的控制,比如连接状态跟踪、流量限制、针对特定网段的访问控制,建议把云平台的安全组当作第一道大门,把iptables当作房间内部的门锁,配合使用,对于本地VirtualBox、VMware这类没有外部安全组的环境,iptables就是你唯一的防火墙层。

不喜欢1

网友评论

猜你喜欢