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


58

Проблема: 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) больше не работает.

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


Почему ты просто не использовал firewalld? Это, вероятно, все еще работает.
— Майкл Хэмптон

Возможно, потому что firewalld не подходит для серверных сред ...
— Хуан Хименес

Ответы:


67

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

Пример:

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

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

firewall-cmd --reload

2
любая идея, почему изображение centos7 от AWS AMI не имеет firewallD.
— Саад Масуд

5
ИЛИ вы можете отключить firewalld и установить пакет «iptables-services» для достижения почти родной совместимости с iptables :)
— vagarwal

1
Я попытался настроить переадресацию портов 80 -> 8180 для lo ( --zone=trusted) с помощью firewalld-cmd, но он не работает (работает в --zone=public). Это sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8180 ; sudo /sbin/iptables -t nat -I OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8180работает с iptables (но каждый firewalld --reloadпроигрывает при этом)
— djb

@saad: потому что aws уже предоставляет службу брандмауэра, следовательно, ami может быть небольшим
— roothahn

Это не так! Я заказал Centos 7 VPS, и он имеет iptables по умолчанию! Версия ОС: 7.5.1804 (Core)
— codezombie

66

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

systemctl disable firewalld

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

yum install iptables-services

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

systemctl enable iptables

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

service iptables save

22

В 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

2

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

Остерегайтесь того, что вы потеряете все, что настроено в данный момент, потому что оно удаляет 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

1

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


7
в CentOS7 больше нет файла / etc / sysconfig / iptables
— roothahn

1
Извините @roothahn, но он определенно существует ... если, конечно, вы не пропустите некоторые пакеты. Из /usr/lib/systemd/system/iptables.service вы можете увидеть, что на самом деле запущен файл "/usr/libexec/iptables/iptables.init start", который представляет собой обычный старый и дорогой скрипт, который ищет обычный старый файл конфигурации в / etc / sysconfig
— камнями

1
Да /etc/sysconfig/iptables, для меня тоже не существует. Тем /etc/sysconfig/iptables-configне менее, существует. Но у него нет правил брандмауэров внутри него, как у iptablesфайла раньше.
— Кентграв

2
Я обнаружил, что файл не был там по умолчанию, минимальная установка либо. Кажется, CentOS 7 не устанавливает iptables.service по умолчанию. "yum install -y iptables.service" установил службу и создал для меня файл по умолчанию / etc / sysconfig / iptables.
— RichieACC

3
Это должно быть "yum install iptables-services"
— qris

0
iptables-save

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.