Как я могу использовать iptables на centos 7? [закрыто]

154

Я установил 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.
Meiblorn
источник
попробуйте это /etc/init.d/iptables save
Satya
8
Я получил ответ здесь . RHEL 7 использует firewalld вместо iptables
Meiblorn

Ответы:

333

С RHEL 7 / CentOS 7 был представлен firewalld для управления iptables. ИМХО, 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

или

/usr/libexec/iptables/iptables.init save
Sgaduuw
источник
5
Это не сохранение iptables. Перезагрузка сервера теряет все изменения.
Рузвельт
2
В моей системе iptables сохранен правильно. Вы убедились, что служба iptables запускается при загрузке? Вы можете сделать это, запустив systemctl enable iptables
Sgaduuw
1
Вы также можете запустить firewalld, который добавит дополнительные правила iptables в список (каждый раз, когда вы перезагружаете систему). Чтобы остановить firewalld, запустите «systemctl mask firewalld»
TroodoN-Mike
В ответ добавили информацию о маскировке firewalld, как предложил @ TroodoN-Mike
Sgaduuw
8
@Sgaduuw Не могли бы вы пояснить, почему вы считаете, что fitewalld не подходит / не подходит для серверов?
Александр Грос
98

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

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

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

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

Metal3d
источник
1
Отличное объяснение - отлично сработало для меня. Спасибо!
цифровая формула
1
firewall-cmd --reload не работает. Мне пришлось перезапустить, используя «systemctl restart firewalld», чтобы изменения вступили в силу.
Василий Муса
«Поскольку firewalld является динамическим, изменения в его конфигурации могут быть внесены в любое время и реализованы немедленно. Никакая часть межсетевого экрана не нуждается в перезагрузке, поэтому нет непреднамеренного нарушения существующих сетевых подключений», - из официальных документов firewalld.
yicone
Эффективно и чисто. Большое спасибо
Vaibhav
17

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

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

yum install iptables-services
systemctl mask firewalld
systemctl enable iptables
systemctl enable ip6tables
systemctl stop firewalld
systemctl start iptables
systemctl start ip6tables
паритет
источник
На CentOS 7 не работает: # systemctl start iptablesдает Failed to start iptables.service: Unit not found.и # systemctl start ip6tablesдаетFailed to start ip6tables.service: Unit not found.
PKHunter
14

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

Жоао Шамбель
источник
man iptables-save - сбросить правила iptables в стандартный вывод.
Пол Харгривз
1
то мы можем использоватьiptables-save > /etc/sysconfig/iptables
dgregory
5

Я изменил /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 после перезагрузки.

выкопанный
источник
1

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

/ И т.д. / sysconfig / Iptables

БВБ Медиа
источник
1

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

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

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

БВБ Медиа
источник
0

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

    systemctl start ip6tables.service
    systemctl enable ip6tables.service
jman594
источник
0

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

Sebas
источник