Как я могу использовать iptables на Centos 7?

Я установил CentOS 7 с минимальной конфигурацией (os + dev tools). Я пытаюсь открыть 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.

person Meiblorn    schedule 15.07.2014    source источник
comment
попробуйте это /etc/init.d/iptables сохранить   -  person Satya    schedule 15.07.2014
comment
Я получил ответ здесь. RHEL 7 использует firewalld вместо iptables   -  person Meiblorn    schedule 15.07.2014
comment
IMO firewalld более удобен для пользователя, чем iptables. Сначала установите и запустите службу firewalld sudo yum install -y firewalld && sudo systemctl start firewalld. Затем добавьте службу HTTP sudo firewall-cmd --permanent --add-service=http (также добавьте службу https, чтобы открыть порт 443, если это необходимо). И, наконец, загрузите новую конфигурацию в firewalld sudo firewall-cmd --reload   -  person Takman    schedule 15.03.2021


Ответы (9)


В RHEL 7 / CentOS 7 для управления iptables был введен firewalld. ИМХО, firewalld больше подходит для рабочих станций, чем для серверных сред.

Можно вернуться к более классической настройке iptables. Во-первых, остановите и замаскируйте службу firewalld:

systemctl stop firewalld
systemctl mask firewalld

Затем установите пакет iptables-services:

yum install iptables-services

Включите службу во время загрузки:

systemctl enable iptables

Управление сервисом

systemctl [stop|start|restart] iptables

Сохранить правила брандмауэра можно следующим образом:

service iptables save

or

/usr/libexec/iptables/iptables.init save
person Sgaduuw    schedule 18.07.2014
comment
Это не сохранение iptables. При перезагрузке сервера все изменения теряются. - person roosevelt; 20.07.2014
comment
В моей системе iptables сохраняются правильно. Вы убедились, что служба iptables запускается при загрузке? Вы можете сделать это, запустив «systemctl enable iptables» - person Sgaduuw; 21.07.2014
comment
У вас также может быть запущен firewalld, который будет добавлять в список дополнительные правила iptables (при каждой перезагрузке системы). Чтобы остановить firewalld, запустите systemctl mask firewalld - person TroodoN-Mike; 16.08.2014
comment
В ответ добавлена ​​информация о маскировании firewalld, как предложил @TroodoN-Mike. - person Sgaduuw; 29.08.2014
comment
Отличный пост, но как вы думаете, стоит ли инвестировать в изучение того, как работает firewalld или Shorewall вместо iptables? (хотя мне iptables кажется прямолинейным) - person wired00; 23.09.2014
comment
@wired00 конечно, никогда не помешает разнообразить и изучить новые вещи, но никогда не терять из виду основные команды и концепции, которые используются инструментами более высокого уровня, облегчающими жизнь. - person Sgaduuw; 06.10.2014
comment
Вы можете сохранить iptables, используя service iptables save - person Zdenek F; 13.10.2014
comment
Спасибо, @ZdenekF, я обновил ответ. - person Sgaduuw; 31.10.2014
comment
@Sgaduuw Не могли бы вы уточнить, почему вы считаете, что fitewalld не/менее подходит для серверов? - person Alexander Groß; 17.11.2014
comment
После yum install iptables, когда я делаю systemctl enable iptables, он показывает мне ошибку: Не удалось выполнить операцию: Нет такого файла или каталога. Я вошел в систему как пользователь root. В чем может быть проблема? - person PKHunter; 01.04.2017
comment
@PKHunter iptables и iptables-service — это две разные вещи. Вам также придется сделать yum install iptables-services. - person Rumesh Eranga Hapuarachchi; 31.01.2019
comment
У меня он работает очень плавно. спасибо - person S.M.Fazle Rabbi; 10.04.2021

RHEL и CentOS 7 используют firewall-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. Запуск служб докеров добавит некоторые правила, которые запросит команда iptable-save. Если вы сохраните результат, у вас будет много правил, которые НЕЛЬЗЯ сохранять. Потому что контейнеры докеров могут изменить свои IP-адреса при следующей перезагрузке.

Firewall-cmd с постоянной опцией лучше подходит для этого.

Проверьте "man firewall-cmd" или официальный firewalld docs, чтобы увидеть параметры. Есть много вариантов проверки зон, конфигурации, того, как это работает... справочная страница действительно полна.

Я настоятельно рекомендую не использовать iptables-service начиная с Centos 7

person Metal3d    schedule 10.08.2014
comment
firewall-cmd --reload не работает. Мне пришлось перезапустить с помощью systemctl перезапустить firewalld, чтобы изменения вступили в силу. - person Basil Musa; 11.11.2015
comment
Поскольку firewalld является динамическим, изменения в его конфигурации могут быть сделаны в любое время и реализованы немедленно. Никакая часть брандмауэра не нуждается в перезагрузке, поэтому не происходит непреднамеренного нарушения существующих сетевых подключений — из официальная документация по firewalld - person yicone; 20.07.2016

У меня была проблема, что перезагрузка не запускала iptables.

Это исправило это:

yum install iptables-services
systemctl mask firewalld
systemctl enable iptables
systemctl enable ip6tables
systemctl stop firewalld
systemctl start iptables
systemctl start ip6tables
person par    schedule 04.08.2014
comment
В CentOS 7 не работает: # systemctl start iptables дает Failed to start iptables.service: Unit not found. И # systemctl start ip6tables дает Failed to start ip6tables.service: Unit not found. - person PKHunter; 30.03.2017

Попробуйте следующую команду iptables-save.

person João Chambel    schedule 11.09.2014
comment
man iptables-save — вывести правила iptables на стандартный вывод. - person Paul Hargreaves; 19.04.2017
comment
то мы можем использовать iptables-save > /etc/sysconfig/iptables - person dgregory; 11.12.2017

Я изменил файл /etc/sysconfig/ip6tables-config, изменив:

IP6TABLES_SAVE_ON_STOP="no"

To:

IP6TABLES_SAVE_ON_STOP="yes"

И это:

IP6TABLES_SAVE_ON_RESTART="no"

To:

IP6TABLES_SAVE_ON_RESTART="yes"

Это, казалось, сохранило изменения, которые я сделал с помощью команд iptables, через перезагрузку.

person Dug    schedule 07.10.2014

Поместите конфигурацию IPtables в традиционный файл, и он будет загружен после загрузки:

/etc/sysconfig/iptables

person BVB Media    schedule 22.11.2014

В прошлом месяце я пытался настроить iptables в контейнере LXC VM, но каждый раз после перезагрузки конфигурация iptables не загружалась автоматически.

Единственный способ заставить его работать — запустить следующую команду:

yum -y установить iptables-services; systemctl отключить firewalld; маска systemctl firewalld; перезапуск службы iptables; сервис iptables сохранить

person BVB Media    schedule 05.04.2017
comment
Я считаю, что это потому, что контейнеры ничего не сохраняют, если только они не находятся в постоянном томе в ОС хоста. Большая часть ОС и конфигурации контейнера обычно не находится в томе, поэтому сбрасывается каждый раз при перезапуске контейнера. - person Graham Lea; 19.12.2020

И, чтобы добавить, вы также должны иметь возможность сделать то же самое для ip6tables после запуска команды systemctl mask firewalld:

    systemctl start ip6tables.service
    systemctl enable ip6tables.service
person jman594    schedule 06.04.2015

Если вы это сделаете и используете 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/

person Sebas    schedule 13.11.2015