Centos 7 сохранить настройки iptables

Проблема: iptables сбрасывает настройки по умолчанию после перезагрузки сервера.

Я пытаюсь установить правило так:

iptables -I INPUT -p tcp --dport 3000 -j ACCEPT

после этого я делаю:

service iptables save

и он пишет что-то вроде этого

iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

и после этого я просто побежал (это было сделано один раз):

chkconfig iptables on (Я читал, что это нужно сделать, чтобы восстановить настройки после перезагрузки)

После этого я перезагружаюсь и запускаю эту команду:

systemctl list-unit-files | grep iptables

и я вижу, что iptables.service включен, однако правило (открыть порт 3000) больше не работает.

Как мне сохранить эти настройки?

5 ответов

Решение

CentOS 7 использует FirewallD сейчас!

Пример:

firewall-cmd --zone=public --add-port=3000/tcp --permanent

перезагрузить правила:

firewall-cmd --reload

Отключите firewalld с помощью следующей команды:

systemctl disable firewalld

Затем установите iptables-service с помощью следующей команды:

yum install iptables-services

Затем включите iptables как сервисы:

systemctl enable iptables

Теперь вы можете сохранить ваши правила iptable, выполнив следующую команду:

service iptables save

На CentOS 7 Minimal вам может понадобиться установить iptables-services пакет (спасибо RichieACC за предложение):

sudo yum install -y iptables-services

А затем включите сервис, используя systemd:

sudo systemctl enable iptables.service

И запустите initscript, чтобы сохранить правила брандмауэра:

sudo /usr/libexec/iptables/iptables.init save
iptables-save

сохранит текущую конфигурацию без необходимости устанавливать какие-либо другие библиотеки или службы.

Может быть, такой сценарий был бы полезен для всех?

Остерегайтесь того, что вы потеряете все, что настроено в данный момент, потому что оно удаляет firewalld и сбрасывает все текущие правила в таблице INPUT:

yum remove firewalld && yum install iptables-services

iptables --flush INPUT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT            # Any packages related to an existing connection are OK
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT   # ssh is OK
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT   # Port 3000 for IPv4 is OK
iptables -A INPUT -j REJECT # any other traffic is not welcome - this should be the last line
service iptables save       # Save IPv4 IPTABLES rules van memory naar disk
systemctl enable iptables   # To make sure the IPv4 rules are reloaded at system startup

Я предполагаю, что вы хотите то же самое в случае, если ваша система может быть достигнута (сейчас или позже) трафиком IPv6:

ip6tables --flush INPUT
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT            # Any packages related to an existing connection are OK
ip6tables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT   # ssh is OK
ip6tables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT   # Port 3000 for IPv6 is OK
ip6tables -A INPUT -j REJECT # any other traffic is not welcome - this should be the last line
service ip6tables save       # Save IPv6 IPTABLES rules van memory naar disk
systemctl enable ip6tables   # To make sure the IPv6 rules are reloaded at system startup

Вы можете изменить файл /etc/sysconfig/iptables напрямую. Перезагрузите службу iptables, чтобы перезагрузить правила из этого файла. Тем не менее, как вам уже сказали, firewalld - это новая система межсетевого экрана по умолчанию для Centos, и это хороший шанс узнать, как ее использовать, не так ли?

Другие вопросы по тегам