( /etc/sysconfig/iptables ) “不建议手动自定义此文件。” 为什么?

22 firewall rhel iptables centos

直接编辑这个文件

/etc/sysconfig/iptables 
Run Code Online (Sandbox Code Playgroud)

可以为我节省这么多头痛的时间等等......

然而在文件的最顶部它说..

Manual customization of this file is not recommended.
Run Code Online (Sandbox Code Playgroud)

这是一个全新的 centos 6.4 云服务器附带的“/etc/sysconfig/iptables”。

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
Run Code Online (Sandbox Code Playgroud)

要打开端口 80,我可以简单地克隆该行..

    -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

然后将“22”更改为“80”,然后保存此文件,然后重新启动整个系统。

这将为我打开端口 80。

这是非常简单的操作。但该文件说不建议手动编辑。

我为什么要听从建议?

小智 19

因为被调用的工具system-config-firewall(或者它是基于 ncurses 的兄弟system-config-firewall-tui)管理这个文件。每次使用此工具创建新的 iptables 规则时,它都会覆盖/etc/sysconfig/iptables.

相关手册页:28.1.16。/etc/sysconfig/iptables-config

这就是为什么不推荐但不禁止的原因。使用 CentOS 或任何其他 EL 版本 6 保存规则的最佳方法是在内存中添加一些规则后使用 iptables 服务:

# service iptables save
Run Code Online (Sandbox Code Playgroud)

相关问题:为什么 iptables 不从 centOs 上的 /etc/sysconfig/iptables 获取信息?

不/etc/sysconfig/iptables直接编辑此文件( ) 的原因:

  • 因为它是一个自动生成的文件。它的内容来自 script/daemon /etc/init.d/iptables。
  • 某些操作(例如重置或停止 iptables 守护程序)可能会导致数据丢失,因为它会覆盖文件。关于这个主题的有趣变量:IPTABLES_SAVE_ON_STOP=""和文件IPTABLES_SAVE_ON_RESTART=""内部/etc/sysconfig/iptables-config。也许,调整这些将使您的更改/etc/init.d/iptables持久化。
  • 因为文档是这么说的。红帽建议这是使用他们的防火墙基础设施的最佳方法。

这种“覆盖我的防火墙规则”的另一种解决方案 mindf*** 是完全禁用这些脚本并依赖于管理防火墙的自定义方法,例如由goldilocks公开的方法。


gol*_*cks 8

然而在文件的最顶部它说..

嗯,这很奇怪。在我的顶部它说:

# Manual customization of this file is strongly encouraged.
Run Code Online (Sandbox Code Playgroud)

一定有人改变了它 ;) 事实上,甚至将它移出,/etc/sysconfig这样包管理器或其他任何东西都不会“自动取消定制”它 ;) ;)

我认为对于此类配置文件的一般意义在于,如果您不知道自己在做什么,请不要这样做。有时还会警告该文件偶尔会被系统覆盖。这可能是由包管理器在升级时引起的——尽管有时 PM 会注意到文件已被手动更改而不是覆盖它,或者保存副本等——并且它可能是其他一些负责此配置的工具特别(见nwildner 的回答)。

“知道你在做什么”的一部分是意识到这样的角度。我还为 iptables 自定义了 init 服务,以便为配置文件使用不同的位置,最重要的是:我是唯一使用这台计算机的人。

假设还有其他人具有 root 访问权限,我不会在我负责的服务器上执行此操作,除非有比“我更喜欢这种方式”更好的理由,因为这可能会导致混淆并让其他人头疼在某一点。但是,如果您是唯一的用户并且没有其他人依赖于系统,那么您可以自由地做自己想做的事。我配置防火墙的“首选方法”如下所示:

#!/bin/bash

if [[ ! -n "$IPTSET_FILE" ]]; then
        IPTSET_FILE=/etc/iptables.current
fi

if [[ ! -e $IPTSET_FILE ]]; then
        echo "$IPTSET_FILE does not exist!"
        exit 1
fi

vim $IPTSET_FILE
iptables-restore < $IPTSET_FILE
Run Code Online (Sandbox Code Playgroud)

/etc/iptables.current在启动时通过复制创建/etc/iptables(iptables 服务被配置为最初加载)。通过这种方式,我可以在保持系统启动的参考点的同时动态修改内容。

Which brings us to an important point, if you do want to fool around with configurations that contain this sort of warning: Always create a backup copy of the original first.