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?

użytkownik1463822
źródło
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
roothahn
źródło
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
HosseinGBI
źródło
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
qris
źródło
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
JohannesB
źródło
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?

naćpany
źródło
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