재부팅 후 CentOS 7 iptables가 지속되지 않음


11

kvm / qemu로 일부 Linux 게스트를 가상화하기 위해 개발 서버에 최소 CentOS 7 버전을 설치했습니다.

firewalld설치하는 대신 iptables를 사용 하려면 다음 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-services는 나에 의해 설치되었습니다.

[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

섹시하지는 않지만 지금까지 작동합니다. 그러나 최종 해결책은 될 수 없습니다.


CentOS7이므로 방화벽을 확인 했습니까? 관련 링크 : serverfault.com/questions/626521/… 나는 주제에서 벗어나지 않기를 바랍니다. 이 응답 확인하시기 바랍니다 stackoverflow.com/a/24827438/2522966 당신이 firewalld 서비스를 중지하고 마스크 말하고 ( service stop|mask firewalld)
니코

답변:


13

서비스를 활성화해야한다고 생각합니다.

systemctl enable iptables.service

iptables init 스크립트를 실행하여 다음과 같이 규칙을 저장해야합니다.

/usr/libexec/iptables/iptables.init save


3

iptables-services 패키지가 설치되어 있는지 확인하십시오.

rpm -aq iptables-services

설치하지 않은 경우 :

yum install iptables-services

그런 다음 service 명령을 사용하여 이전 버전의 CentOS와 마찬가지로 제어 할 수 있습니다.

service iptables save

save, stop, start, restart명령은 모든 작업과 부팅에로드해야합니다.


iptables 명령이 있습니다. 그러나 rpm -aq iptables-services는 아무것도 출력하지 않습니다. 그게 무슨 뜻이야?
Saad Masood

rpm -aq자체적으로 시스템에 설치된 모든 패키지와 해당 버전이 나열됩니다. rpm -aq <package>정의 된 패키지가 설치된 경우 정보를 인쇄합니다. rpm -aq iptables-services 아무것도 반환하지 않으면 'iptables-services'패키지가 설치되지 않았 음을 의미합니다.
유전자

CentOS 7 및 AWS와 관련된 질문이있는 경우 완전히 새로운 질문을 게시하고 관련이없는 답변에 대해서는 언급하지 마십시오. Amazon이 리포지토리에 어떤 패키지를 보관하고 있는지는 모르겠지만 iptables-services표준 CentOS 7 리포지토리에서 사용할 수 있다고 말할 수 있습니다.
유전자

1

하단의 /etc/rc.d/rc.local에 'service iptables stop \ iptables --flush'명령을 추가하여이 문제를 해결했습니다.

내 환경은 Centos 7 KVM이고 내 문제는 libvirt가 재부팅 할 때 iptables를 다시 채우고 가상 머신에 대한 액세스를 차단한다는 것입니다.


0

가상화 서비스 중 하나를 올바르게 기억하고 있다면 (virbr0 인터페이스 이름으로 판단하여) 하나의 방화벽 규칙 자체를 추가하여 구성된 가상 네트워크 및 인터페이스를 수용했습니다. 이 영역을 살펴보십시오 (그리고 libvirt-daemon좋은 출발점이 될 것입니다).

그러나 규칙을 덮어 쓴 것으로 보이는 사실이 버그인지 또는 기능인지는 모르겠습니다. RedHat은 firewalldRHEL의 방화벽 솔루션으로 초점을 맞추고 있으며 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.