如何在 centos 7上使用 iptables?

我用最小的配置安装了 CentOS 7(os + dev 工具)。我试图打开80端口的 httpd服务,但是我的 iptables 服务出了问题... 它出了什么问题?我做错了什么?

# ifconfig/sbin/service iptables save
bash: ifconfig/sbin/service: No such file or directory




# /sbin/service iptables save
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.


# sudo service iptables status
Redirecting to /bin/systemctl status  iptables.service
iptables.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)


# /sbin/service iptables save
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.


# sudo service iptables start
Redirecting to /bin/systemctl start  iptables.service
Failed to issue method call: Unit iptables.service failed to load: No such file or directory.
414896 次浏览

在 RHEL 7/CentOS 7中,引入了 防火墙来管理 iptables。恕我直言,防火墙更适合于工作站而不是服务器环境。

可以回到更经典的 iptables 设置。首先,停止并屏蔽防火墙服务:

systemctl stop firewalld
systemctl mask firewalld

然后,安装 iptables-services 包:

yum install iptables-services

在启动时启用服务:

systemctl enable iptables

管理服务

systemctl [stop|start|restart] iptables

保存防火墙规则的步骤如下:

service iptables save

或者

/usr/libexec/iptables/iptables.init save

我有一个问题,重新启动不会启动 iptables。

这就解决了问题:

yum install iptables-services
systemctl mask firewalld
systemctl enable iptables
systemctl enable ip6tables
systemctl stop firewalld
systemctl start iptables
systemctl start ip6tables

RHEL 和 CentOS 7使用防火墙-cmd 而不是 iptables :

# add ssh port as permanent opened port
firewall-cmd --zone=public --add-port=22/tcp --permanent

然后,您可以重新加载规则以确保一切正常

firewall-cmd --reload

这比使用 iptable-save 要好,特别是如果您计划使用 lxc 或 docker 容器。启动 docker 服务将添加 iptable-save 命令将提示的一些规则。如果您保存结果,您将有许多不应该保存的规则。因为 Docker 容器可以在下次重启时更改它们的 ip 地址。

带有永久选项的防火墙-cmd 对此更好。

检查“ man 防火墙-cmd”或 检查官方防火墙文档以查看选项。有很多选项可以检查区域、配置、它是如何工作的... ... 手册页真的完成了。

我强烈建议自 Centos 7以来不要使用 iptables-service

尝试以下命令 iptables-save

我修改了 /etc/sysconfig/ip6tables-config文件:

IP6TABLES_SAVE_ON_STOP="no"

致:

IP6TABLES_SAVE_ON_STOP="yes"

还有这个:

IP6TABLES_SAVE_ON_RESTART="no"

致:

IP6TABLES_SAVE_ON_RESTART="yes"

这似乎保存了我通过重新引导使用 iptables 命令所做的更改。

将 IPtables 配置放在传统文件中,它将在引导后加载:

/etc/sysconfig/iptables

另外,在运行 systemctl mask firewalld命令之后,还应该能够对 ip6tables 执行相同的操作:

    systemctl start ip6tables.service
systemctl enable ip6tables.service

如果您这样做了,并且正在使用 fail2ban,那么您将需要启用适当的过滤器/操作:

/etc/fail2ban/jail.d/sshd.local中放置以下行

[ssh-iptables]
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
logpath  = /var/log/secure
maxretry = 5
bantime = 86400

启用并启动 fail2ban:

systemctl enable fail2ban
systemctl start fail2ban

参考资料: http://blog.iopsl.com/fail2ban-on-centos-7-to-protect-ssh-part-ii/

上个月,我尝试在一个 LXC VM 容器上配置 iptables,但是每次重启后,iptables 配置都不会自动加载。

唯一让它工作的方法是运行以下命令:

Yum-y 安装 iptables-services; systemctl 禁用防火墙; systemctl 掩码防火墙; service iptables 重新启动; service iptables 保存