Iptables CentOS 7 не стійкі після перезавантаження


11

Я встановив мінімальну версію CentOS 7 на сервері розробки для віртуалізації деяких гостей Linux з kvm / qemu.

Щоб використовувати iptables замість того, firewalldщоб встановити iptables-serviceта зробити:

systemctl stop firewalld
systemctl mask firewalld
systemctl enable iptables
systemctl start iptables

SELinux відключається шляхом редагування /etc/sysconfig/selinux.

Мої правила iptables такі:

iptables -Z
iptables -F
iptables -X
iptables -t nat -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -o enp6s0 -j MASQUERADE
iptables -A FORWARD -i enp6s0 -o virbr0 -j ACCEPT

Тепер я зберігаю свої налаштування за допомогою наступної команди:

iptables-save > /etc/sysconfig/iptables

Мій iptables-fileпогляд:

# Generated by iptables-save v1.4.21 on Thu Aug 20 10:46:40 2015
*mangle
:PREROUTING ACCEPT [16736:10889078]
:INPUT ACCEPT [1063:106860]
:FORWARD ACCEPT [15679:10784186]
:OUTPUT ACCEPT [570:71275]
:POSTROUTING ACCEPT [15728:10809742]
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Thu Aug 20 10:46:40 2015
# Generated by iptables-save v1.4.21 on Thu Aug 20 10:46:40 2015
*filter
:INPUT ACCEPT [868:81772]
:FORWARD ACCEPT [8328:7311589]
:OUTPUT ACCEPT [233:32016]
-A FORWARD -i enp6s0 -o virbr0 -j ACCEPT
COMMIT
# Completed on Thu Aug 20 10:46:40 2015
# Generated by iptables-save v1.4.21 on Thu Aug 20 10:46:40 2015
*nat
:PREROUTING ACCEPT [1308:86998]
:INPUT ACCEPT [77:12475]
:OUTPUT ACCEPT [1:72]
:POSTROUTING ACCEPT [1228:74319]
-A POSTROUTING -o enp6s0 -j MASQUERADE
COMMIT
# Completed on Thu Aug 20 10:46:40 2015

Швидкий перевір, щоб перевірити правильність моїх правил на даний момент:

[root@dev1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

Але після перезавантаження сервера правила iptables виглядають так:

[root@dev1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             10.0.1.0/24          ctstate RELATED,ESTABLISHED
ACCEPT     all  --  10.0.1.0/24          anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc

Я не розумію, звідки беруться інші правила.

При дзвінку iptables-restore -c /etc/sysconfig/iptablesвідображаються очікувані правила.

Здається, що збережені правила не завантажуються під час завантаження або що "за замовчуванням" -правила не змиваються чи що завгодно.

У чому тут проблема ??? Я повільно набуваю сиві волоски ...


Дякую за швидку відповідь :)

Як було сказано вище, iptables-сервіс був встановлений мною:

[root@dev1 ~]# rpm -aq iptables-services
iptables-services-1.4.21-13.el7.x86_64

Увімкнення служби за допомогою, systemctl enable iptables.serviceа не використання, systemctl enable iptablesздається, не має ніякого значення, оскільки той самий файл служби пов'язаний:

[root@dev1 ~]# systemctl disable iptables
rm '/etc/systemd/system/basic.target.wants/iptables.service'
[root@dev1 ~]# systemctl enable iptables.service
ln -s '/usr/lib/systemd/system/iptables.service' '/etc/systemd/system/basic.target.wants/iptables.service'

Це вміст файлу iptables після виклику /usr/libexec/iptables/iptables.init save

[root@develcluster1 ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Fri Aug 21 14:34:04 2015
*nat
:PREROUTING ACCEPT [351490:22546787]
:INPUT ACCEPT [15751:2400243]
:OUTPUT ACCEPT [324:21186]
:POSTROUTING ACCEPT [304860:18293418]
-A POSTROUTING -o enp6s0 -j MASQUERADE
COMMIT
# Completed on Fri Aug 21 14:34:04 2015
# Generated by iptables-save v1.4.21 on Fri Aug 21 14:34:04 2015
*filter
:INPUT ACCEPT [505048:69178501]
:FORWARD ACCEPT [55815086:22035726185]
:OUTPUT ACCEPT [325986:56595531]
-A FORWARD -i enp6s0 -o virbr0 -j ACCEPT
COMMIT
# Completed on Fri Aug 21 14:34:04 2015
# Generated by iptables-save v1.4.21 on Fri Aug 21 14:34:04 2015
*mangle
:PREROUTING ACCEPT [109215513:66867793592]
:INPUT ACCEPT [505243:69203589]
:FORWARD ACCEPT [108710264:66798590873]
:OUTPUT ACCEPT [326323:56634790]
:POSTROUTING ACCEPT [109036066:66855179944]
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Fri Aug 21 14:34:04 2015

Після перезавантаження дзвінка iptables -Lне показувати збережені правила:

[root@dev1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             10.0.1.0/24          ctstate RELATED,ESTABLISHED
ACCEPT     all  --  10.0.1.0/24          anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc

Можливо, я роблю щось принципово неправильне. Але кожна тема, яку я читаю, робить це однаково, і вона повинна працювати.

Якщо вам потрібна додаткова інформація, будь ласка, скажіть мені.

Тим часом я допоміг мені, зателефонувавши до невеликого сценарію, який я повинен зателефонувати після кожного перезавантаження.

#!/bin/sh

iptables -Z
iptables -F
iptables -X
iptables -t nat -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -o enp6s0 -j MASQUERADE
iptables -A FORWARD -i enp6s0 -o virbr0 -j ACCEPT

iptables --flush
iptables-restore -c /etc/sysconfig/iptables

Це не сексуально, але працює поки що. Але не могло бути остаточним рішенням.


Ви перевірили firewalld, оскільки це CentOS7? Пов’язане посилання: serverfault.com/questions/626521/… Сподіваюсь, я не в курсі теми. Будь ласка Перевірте також ця відповідь stackoverflow.com/a/24827438/2522966 , який говорить вам зупинитися і маскувати firewalld служби ( service stop|mask firewalld)
Ніко

Відповіді:


13

я думаю, вам потрібно включити послугу за допомогою:

systemctl enable iptables.service

і вам потрібно запустити сценарій init iptables, щоб зберегти свої правила таким чином:

/usr/libexec/iptables/iptables.init save


3

Переконайтеся, що встановлений пакет iptables-services:

rpm -aq iptables-services

Якщо не встановити його:

yum install iptables-services

Потім ви можете скористатися командою служби, щоб керувати нею, як і попередні версії CentOS:

service iptables save

save, stop, start, restartКоманди будуть всі роботи і він повинен завантажити на черевику.


у мене є команда iptables. але "rpm -aq iptables-services" нічого не видає. Що це означає?
Саад Масуд

rpm -aqсам перерахує всі пакунки, встановлені в системі, та їх версію. rpm -aq <package>буде надрукувати інформацію про визначений пакет, якщо він встановлений. Якщо rpm -aq iptables-services нічого не повертає, що означає, що пакет "iptables-services" не встановлений.
Гена

Якщо у вас є питання, характерне для CentOS 7 та AWS, тоді вам слід задати зовсім нове запитання, а не коментувати незв'язану відповідь. Я поняття не маю, які пакунки зберігає Amazon у своїх сховищах, але можу сказати, що iptables-servicesце доступно в стандартному базовому сховищі CentOS 7.
Гена

1

Я обійшов це, додавши команду 'iptables stop \ iptables --flush', додану донизу /etc/rc.d/rc.local

Моє середовище було Centos 7 KVM, і моя проблема полягала в тому, що libvirt повторно заповнить iptables при перезавантаженні - блокуючи доступ до моїх віртуальних машин.


0

Якщо я добре пам'ятаю, один із сервісів віртуалізації (а ви, здається, запускаєте його, судячи з імені інтерфейсу virbr0) додав сам правила брандмауера для розміщення налаштованих, віртуальних мереж та інтерфейсів. Будь ласка, погляньте на цю сферу (і libvirt-daemonце, мабуть, хороша відправна точка).

Не знаю, однак, якщо факт, що він, здається, перезаписав ваші правила, - це помилка чи особливість. RedHat, здається, досить зосереджений на firewalldтому, що рішення брандмауера в RHEL (і це також безпосередньо не змінюється до CentOS), і вони можуть не підтримувати правильну роботу своїх рішень для віртуалізації з firewalldальтернативами.


0

Спробуйте це:

systemctl stop firewalld
systemctl disable firewalld
systemctl mask --now firewalld
yum -y remove iptables-services
yum -y install iptables-services
systemctl start iptables
systemctl status iptables

echo '# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT' > /etc/sysconfig/iptables

виконайте тут свої правила iptables

iptables-save > /etc/sysconfig/iptables
iptables-restore < /etc/sysconfig/iptables
systemctl restart iptables
systemctl restart iptables
systemctl enable iptables.service
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.