在CenOS / RHEL7上重启后,如何使iptables服务自动启动?


8

我正在准备的新安装的家用服务器有一些问题。我已经在上面安装了CentOS7,我发现默认情况下端口80和443是关闭的。因此,我使用以下命令将它们添加到iptables中:

iptables -I INPUT 5 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 5 -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
service iptables save

我还安装了不存在的iptable服务。问题是,每次我重新启动计算机时,都会擦除新配置。

我试图将iptable服务添加到chkconfig中,但出现以下错误:

[root@CentOS-7]# chkconfig --add iptables
error reading information on service iptables: No such file or directory

我想我得到这个错误的原因是因为/etc/init.d/中没有iptable脚本,但是如果我实际上在做正确的事情和/或有一种更简单,更可靠的方法可以使任何人有任何想法这个?如果没有,我该怎么解决?最后,我只需要将家庭服务器用作Web /邮件服务器...

我也曾尝试使用'systemctl enable iptables'命令,如建议的flemingovirus,但没有成功。输入命令后,我得到以下输出:

ln -s '/usr/lib/systemd/system/iptables.service' '/etc/systemd/system/basic.target.wants`/iptables.service'`

更新:我已经看过iptables,并且“ service iptables save”命令已正常工作。该问题似乎是由于服务没有在重新启动时启动。将以下行添加到/etc/rc.local后,我设法使服务在重新启动时运行

systemctl start  iptables.service

但是我想知道为什么'systemctl enable iptables'命令在这种情况下不起作用。我想念什么吗?谢谢

Answers:


6

尽管这个问题很古老,但我遇到了同样的问题,并在这里找到了解决方案。

systemctl mask firewalld
systemctl stop firewalld

基本上,受防火墙保护会冲突iptables,因此将阻止iptables加载:

# cat /usr/lib/systemd/system/firewalld.service 
[Unit]
Description=firewalld - dynamic firewall daemon
Before=network.target
Before=libvirtd.service
Before=NetworkManager.service
Conflicts=iptables.service ip6tables.service ebtables.service

...

我能够通过屏蔽firewalld来解决此问题,以确保它不会自动启动并且此后将永远不会启动。当然,您需要确保启用了iptables:

systemctl enable iptables

4

初始化脚本不见了。现在它了systemctl。它在所有CentOS7文档中都存在。要chkconfig ipatables或在启动时启动iptables服务,您需要使用以下命令:

systemctl启用iptables

您应该在iptables上的Cyber​​citi文档中查看有关systemctl的简单知识。


嗨,flemingovirus,我确实尝试了您的建议,并查看了该链接,但仍然无法正常工作。有任何想法吗?谢谢
戴夫

@戴夫你检查的iptables在哪里?是/ sbin / iptables本身吗?用dpkg -L iptables
flemingovirus

[root @ CentOS-7}#rpm -ql iptables-services.x86_64 / etc / sysconfig / ip6tables / etc / sysconfig / iptables /usr/lib/systemd/system/ip6tables.service / usr / lib / systemd / system / iptables .service / usr / libexec / initscripts / legacy-actions / ip6tables / usr / libexec / initscripts / legacy-actions / ip6tables / panic / usr / libexec / initscripts / legacy-actions / ip6tables / save / usr / libexec / initscripts / legacy -actions / iptables / usr / libexec / initscripts / legacy-actions / iptables / panic / usr / libexec / initscripts / legacy-actions / iptables / save / usr / libexec / iptables /usr/libexec/iptables/ip6tables.init / usr /libexec/iptables/iptables.init
Dave

没有dpkg,所以我改用rpm。这个输出明智吗?谢谢
戴夫

1
@Dave systemctl的输出说它已经放置好启动了。重新启动检查。
flemingovirus

0

首先,您应该尝试#chkconfig --add /sbin/iptables这样将识别“ iptables”。那么您应该为iptables配置创建一个脚本,然后使该脚本在启动时启动。创建一个脚本:

#!/bin/bash
#
iptables -I INPUT 5 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 5 -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/service iptables save

并以它为例myfirewall。使它具有可执行文件chmod +x myfirewall并将其写入./myfirewall/etc/rc.local在启动时启动脚本。


谢谢,但我得到以下错误:“读取有关服务iptables的信息时出错:没有这样的文件或目录”另外,对我来说,这似乎是一种非常复杂的方法。没有其他方法可以在CentOS中实现它。最后,我只想将其用作标准的Web /邮件服务器。如果默认情况下未打开端口80和443,如何使用Web服务器。难道我做错了什么?
戴夫

iptables是在Centos中内置的。我认为您在安装时遇到了问题。请尝试$sudo service iptables status在注释中写输出。
阿米尔jj 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.