【问题标题】:Adding an iptables rule in %post rpm install在 %post rpm install 中添加 iptables 规则
【发布时间】:2014-05-13 11:13:55
【问题描述】:

我一直在打包一些侦听 TCP 端口的软件。我有一个为 CentOS 6.5 创建一个包的 RPM 规范。我遇到的唯一问题是我必须在 rpm 安装后手动添加 iptables 规则或完全禁用 iptables。

是否有任何幂等方法可以在 RPM %post 部分中添加 iptables 规则。它甚至有意义吗?我发现的大多数解决方案都涉及grep 和其他实用程序的某种组合。这对我来说似乎非常容易出错。

【问题讨论】:

标签: firewall iptables rpm


【解决方案1】:

在 CentOS 中,规则保存在 /etc/sysconfig/iptables 中。使用/etc/init.d/iptables脚本启动防火墙时会解析该文件。

问题在于,这可以在任何时候通过运行service iptables save 重新生成,这意味着您的 RPM 后脚本完成的任何工作都可能/将会被破坏...system-config-firewall 也是如此。

最简单的选择是在您的 RPM 中包含一个脚本,该脚本从 post 运行,应用您的规则并更新 /etc/sysconfig/iptables,并打印警告说如果用户使用了 @ 则需要重新运行该脚本987654326@ 稍后。

示例 SPEC 片段:

%post blah
  /path/to/my/script/my-update-iptables && exit 0

示例脚本片段:

#!/bin/bash
#
# do stuff here
#
iptables ... # do stuff to append / insert rules as required
#
service iptables save
#
echo "WARNING - you may need to rerun this `$0` if you change the firewall" >&2

【讨论】:

  • 如果您在 RPM 的 %post 部分打印到标准输出,包历史记录会将安装标记为错误。
  • @EricUrban 我不这么认为。正如我们所说,我有生产中的 SPEC 文件,其中包含写入 stdout 和 stderr 的脚本,它们运行良好。如果我运行rpm --verify,则不会报告任何问题。拥有exit 0 应该足以成功。在上面的示例中,my-update-iptables 脚本当然有可能会失败,在这种情况下,它应该会因设计错误而脱离%post 脚本...
  • 当我过去不得不做这样的事情时(在 %post 中,我在 RHEL4 下修复了 SELinux 标签),我也把它放在了 %verify 部分,所以如果你试图验证安装,它会重新运行你的脚本。
  • @AndrewMcDonnell 您很可能使用rpm 进行安装。我从不使用rpm 安装RPM。我用yum。
猜你喜欢
  • 1970-01-01
  • 2014-04-01
  • 1970-01-01
  • 2023-01-26
  • 2015-03-15
  • 2012-08-31
  • 1970-01-01
  • 2013-05-06
  • 2016-11-09
相关资源
最近更新 更多