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) Робити це за допомогою iptables 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працює (але кожен firewalld --reloadвтрачає це відміняє)
djb

@saad: тому що Aws вже надає послугу брандмауера, отже, Ami може бути невеликим
roothahn

Це не так! Я замовив Centos 7 VPS і у нього iptables за замовчуванням! Версія ОС: 7.5.1804 (Core)
codezombie

66

Вимкнути незахищений екран наступною командою:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.