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

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

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

Ответы:

67

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

Пример:

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

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

firewall-cmd --reload
roothahn
источник
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
HosseinGBI
источник
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
qris
источник
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
JohannesB
источник
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

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

stormdrain
источник