Zainstalowałem minimalną wersję CentOS 7 na serwerze programistycznym, aby zwirtualizować niektórych gości Linuksa za pomocą kvm / qemu.
Aby użyć iptables zamiast firewalld
instalować iptables-service
i wykonywać:
systemctl stop firewalld
systemctl mask firewalld
systemctl enable iptables
systemctl start iptables
SELinux jest wyłączany przez edycję /etc/sysconfig/selinux
.
Moje zasady dotyczące iptables są następujące:
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
Teraz zapisuję moje ustawienia za pomocą następującego polecenia:
iptables-save > /etc/sysconfig/iptables
Mój iptables-file
wygląd:
# 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
Szybkie sprawdzenie, czy moje zasady są na razie poprawne:
[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
Ale po ponownym uruchomieniu serwera reguły iptables wyglądają następująco:
[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
Nie rozumiem, skąd pochodzą inne zasady.
Podczas połączenia iptables-restore -c /etc/sysconfig/iptables
wyświetlane są oczekiwane reguły.
Wygląda na to, że zapisane reguły nie są ładowane podczas uruchamiania lub że „domyślne” reguły nie są opróżniane.
Jaki jest tutaj problem ??? Powoli mam siwe włosy ...
Dziękuję za szybką odpowiedź :)
Jak wspomniano powyżej, usługi iptables zostały zainstalowane przeze mnie:
[root@dev1 ~]# rpm -aq iptables-services
iptables-services-1.4.21-13.el7.x86_64
Włączenie usługi systemctl enable iptables.service
zamiast zamiast systemctl enable iptables
wydaje się nie mieć znaczenia, ponieważ ten sam plik usługi jest połączony:
[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'
To jest zawartość pliku iptables po wywołaniu
/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
Po ponownym uruchomieniu połączenia, aby iptables -L
nie wyświetlać moich zapisanych reguł:
[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
Może robię coś fundamentalnie złego. Ale każdy wątek, który czytam, robi to w ten sam sposób i powinien działać.
Jeśli potrzebujesz więcej informacji, powiedz mi.
Tymczasem pomogłem, wywołując mały skrypt, który muszę wywoływać po każdym ponownym uruchomieniu.
#!/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
To nie jest seksowne, ale działa do tej pory. Ale nie mogło być ostatecznym rozwiązaniem.
service stop|mask firewalld
)Odpowiedzi:
myślę, że musisz włączyć usługę za pomocą:
systemctl enable iptables.service
i musisz uruchomić skrypt inicjujący iptables, aby zapisać swoje reguły w następujący sposób:
/usr/libexec/iptables/iptables.init save
źródło
Upewnij się, że masz zainstalowany pakiet usług iptables:
Jeśli nie, zainstaluj:
Następnie możesz użyć polecenia serwisowego, aby sterować nim tak, jak w poprzednich wersjach CentOS:
save
,stop
,start
,restart
Komendy i wszystkie prace należy załadować przy starcie.źródło
rpm -aq
sama w sobie wyświetli listę wszystkich pakietów zainstalowanych w systemie i ich wersji.rpm -aq <package>
wypisze informacje o zdefiniowanym pakiecie, jeśli jest zainstalowany. Jeślirpm -aq iptables-services
nic nie zwraca, oznacza to, że pakiet „iptables-services” nie jest zainstalowany.iptables-services
jest on dostępny w standardowym podstawowym repozytorium CentOS 7.Obejrzałem to, dodając polecenie „service iptables stop \ iptables --flush” dołączone na dole /etc/rc.d/rc.local
Moim środowiskiem był Centos 7 KVM, a moim problemem było to, że libvirt ponownie zaludnił iptables przy ponownym uruchomieniu - blokując dostęp do moich maszyn wirtualnych.
źródło
Jeśli dobrze pamiętam, jedna z usług wirtualizacji (a wydaje się, że działasz, sądząc po nazwie interfejsu virbr0) dodawała same reguły zapory, aby dostosować się do skonfigurowanych wirtualnych sieci i interfejsów. Zajrzyj do tego obszaru (i
libvirt-daemon
prawdopodobnie jest to dobry punkt wyjścia).Nie wiem jednak, czy fakt, że wydaje się, że zastępuje twoje reguły, jest błędem lub cechą. Wydaje się, że RedHat jest dość skoncentrowany na
firewalld
rozwiązaniu zapory ogniowej w RHEL (i to również bezpośrednio w CentOS) i mogą nie obsługiwać poprawnego działania swoich rozwiązań wirtualizacyjnych zfirewalld
alternatywami.źródło
Spróbuj tego:
wykonaj tutaj swoje reguły iptables
źródło