Centos 7 zapisuje ustawienia iptables


58

Problem: iptables resetuje się do ustawień domyślnych po ponownym uruchomieniu serwera.

Próbuję ustawić regułę w ten sposób:

iptables -I INPUT -p tcp --dport 3000 -j ACCEPT

potem robię:

service iptables save

i odpisuje coś takiego

iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

a potem po prostu pobiegłem (zrobiono to raz):

chkconfig iptables on (Przeczytałem, że należy to zrobić, aby przywrócić ustawienia po ponownym uruchomieniu)

Następnie ponownie uruchamiam i uruchamiam następujące polecenie:

systemctl list-unit-files | grep iptables

i widzę, że iptables.service jest włączony, jednak reguła (aby otworzyć port 3000) już nie działa.

Jak mogę zachować te ustawienia?


Dlaczego po prostu nie używałeś firewalla? Prawdopodobnie nadal działa.
— Michael Hampton

Prawdopodobnie dlatego, że firewalld nie nadaje się do środowisk serwerowych ...
— Juan Jimenez,

Odpowiedzi:


67

CentOS 7 korzysta teraz z FirewallD !

Przykład:

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

przeładuj reguły:

firewall-cmd --reload

2
jakiś pomysł, dlaczego obraz centos7 z AWS AMI nie ma firewallD.
— Saad Masood,

5
LUB możesz wyłączyć zaporę ogniową i zainstalować pakiet „iptables-services”, aby osiągnąć prawie natywną kompatybilność z iptables :)
— vagarwal

1
Próbowałem skonfigurować przekierowanie portów 80 -> 8180 dla lo ( --zone=trusted) z firewalld-cmd, ale to nie działa (działa w --zone=public) Robi to z 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 8180działa (ale każdy firewalld --reloadtraci to cofa)
— djb

@saad: ponieważ aws już zapewnia zaporę ogniową, dlatego ami można utrzymać na
— niskim poziomie

Nie jest! Zamówiłem VPS Centos 7 i domyślnie ma iptables! Wersja systemu operacyjnego: 7.5.1804 (Core)
— codezombie

66

Wyłącz zaporę ogniową za pomocą następującego polecenia:

systemctl disable firewalld

Następnie zainstaluj iptables-service, wykonując następujące polecenie:

yum install iptables-services

Następnie włącz iptables jako usługi:

systemctl enable iptables

Teraz możesz zapisać swoje reguły iptable, wykonując następujące polecenie:

service iptables save

22

Na CentOS 7 Minimal może być konieczne zainstalowanie iptables-servicespakietu (podziękowania dla @RichieACC za sugestię ):

sudo yum install -y iptables-services

A następnie włącz usługę, używając systemd:

sudo systemctl enable iptables.service

I uruchom skrypt startowy, aby zapisać reguły zapory:

sudo /usr/libexec/iptables/iptables.init save

2

Może taki skrypt byłby dla kogoś pomocny?

Strzeż się, że stracisz wszystko, co jest aktualnie skonfigurowane, ponieważ usuwa zaporę ogniową i opróżnia wszystkie bieżące reguły w tabeli WEJŚCIE :

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

Myślę, że chcesz tego samego na wypadek, gdyby Twój system mógł zostać osiągnięty (teraz lub w dowolnym momencie później) przez ruch 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

Możesz bezpośrednio zmodyfikować plik / etc / sysconfig / iptables. Ponownie załaduj usługę iptables, aby ponownie załadować reguły z tego pliku. Jednak, jak już powiedziano, firewalld to nowy domyślny system zapory sieciowej dla Centos, a to dobra okazja, aby dowiedzieć się, jak z niego korzystać, nie sądzisz?


7
w CentOS7 nie ma już pliku / etc / sysconfig / iptables
— roothahn

1
Przepraszam @roothahn, ale na pewno istnieje ... chyba że przegapisz oczywiście jakieś paczki. Z /usr/lib/systemd/system/iptables.service można zobaczyć, że tak naprawdę uruchomiono to „/usr/libexec/iptables/iptables.init start”, czyli zwykły stary i drogi skrypt szukający zwykłego starego pliku konfiguracyjnego w / etc / sysconfig
— stoned

1
Tak /etc/sysconfig/iptables, dla mnie też nie istnieje. Jednak /etc/sysconfig/iptables-configistnieje. Ale nie ma w nim reguł zapory ogniowej, jak w iptablespliku.
— Kentgrav

2
Okazało się, że pliku nie ma w domyślnej minimalnej instalacji. Wygląda na to, że CentOS 7 domyślnie nie instaluje iptables.service. „yum install -y iptables.service” zainstalował usługę i stworzył dla mnie domyślny plik / etc / sysconfig / iptables.
— RichieACC,

3
To powinno być „mniam zainstalować iptables-services”
— qris
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.