CentOS 7 iptables không tồn tại sau khi khởi động lại


11

Tôi đã cài đặt phiên bản CentOS 7 tối thiểu trên máy chủ phát triển để ảo hóa một số khách linux bằng kvm / qemu.

Để sử dụng iptables thay vì firewalldtôi cài đặt iptables-servicevà làm:

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

SELinux bị vô hiệu hóa bằng cách chỉnh sửa /etc/sysconfig/selinux.

Quy tắc của tôi cho iptables là như sau:

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

Bây giờ tôi lưu cài đặt của mình bằng lệnh sau:

iptables-save > /etc/sysconfig/iptables

Ngoại iptables-filehình của tôi

# 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

Kiểm tra nhanh để xem liệu quy tắc của tôi có đúng không:

[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 

Nhưng sau khi khởi động lại máy chủ, các quy tắc iptables trông như sau:

[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

Tôi không hiểu các quy tắc khác đến từ đâu.

Khi gọi iptables-restore -c /etc/sysconfig/iptablescác quy tắc dự kiến ​​sẽ được hiển thị.

Có vẻ như các quy tắc đã lưu không được tải vào lúc khởi động hoặc các "quy tắc" mặc định không bị xóa hoặc bất cứ điều gì.

Vấn đề ở đây là gì ??? Tôi đang dần có những sợi tóc màu xám ...


Cảm ơn bạn đã phản hồi nhanh chóng :)

Như đã đề cập ở trên, các dịch vụ iptables đã được tôi cài đặt:

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

Việc kích hoạt dịch vụ systemctl enable iptables.servicethay vì sử dụng systemctl enable iptablesdường như không có sự khác biệt vì cùng một tệp dịch vụ được liên kết:

[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'

Đây là nội dung của tệp iptables sau khi gọi /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

Sau khi khởi động lại, một cuộc gọi iptables -Lkhông hiển thị các quy tắc đã lưu của tôi:

[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

Có lẽ tôi đang làm một cái gì đó sai cơ bản. Nhưng mỗi chủ đề tôi đọc làm điều này theo cùng một cách và nó sẽ hoạt động.

Nếu bạn cần thêm thông tin xin vui lòng cho tôi biết.

Trong khi đó, tôi đã giúp tôi bằng cách gọi một kịch bản nhỏ mà tôi phải gọi sau mỗi lần khởi động lại.

#!/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

Đó không phải là gợi cảm nhưng hoạt động cho đến nay. Nhưng không thể là giải pháp cuối cùng.


Bạn đã kiểm tra tường lửa như CentOS7 chưa? Liên kết liên quan: serverfault.com/questions/626521/ Hy vọng Tôi không nằm ngoài chủ đề. Vui lòng kiểm tra câu trả lời này stackoverflow.com/a/24827438/2522966 đang bảo bạn dừng và che giấu dịch vụ tường lửa ( service stop|mask firewalld)
Nico

Câu trả lời:


13

tôi nghĩ bạn cần kích hoạt dịch vụ với:

systemctl enable iptables.service

và bạn cần chạy tập lệnh init iptables để lưu các quy tắc của bạn như thế này:

/usr/libexec/iptables/iptables.init save


3

Đảm bảo bạn đã cài đặt gói dịch vụ iptables:

rpm -aq iptables-services

Nếu không cài đặt nó:

yum install iptables-services

Sau đó, bạn có thể sử dụng lệnh dịch vụ để điều khiển nó giống như với các phiên bản trước của CentOS:

service iptables save

Các save, stop, start, restartlệnh sẽ tất cả công việc và nó sẽ nạp khi khởi động.


tôi có lệnh iptables. nhưng `rpm -aq iptables-services` không xuất ra bất cứ thứ gì. Điều đó nghĩa là gì?
Saad Masood

rpm -aqtự nó sẽ liệt kê tất cả các gói được cài đặt trên một hệ thống và phiên bản của chúng. rpm -aq <package>sẽ in ra thông tin về gói được xác định nếu nó được cài đặt. Nếu rpm -aq iptables-services trả về không có nghĩa là gói 'iptables-services' chưa được cài đặt.
Gene

Nếu bạn có câu hỏi cụ thể cho CentOS 7 và AWS thì bạn nên đăng một câu hỏi hoàn toàn mới, không đưa ra nhận xét về câu trả lời không liên quan. Tôi không biết gói nào Amazon giữ trong kho của họ, nhưng tôi có thể nói với bạn rằng iptables-servicesnó có sẵn trong kho lưu trữ CentOS 7 cơ sở tiêu chuẩn.
Gene

1

Tôi đã khắc phục điều này bằng cách thêm lệnh 'dịch vụ iptables stop \ iptables --flush' được thêm vào dưới cùng /etc/rc.d/rc.local

Môi trường của tôi là Centos 7 KVM và vấn đề của tôi là libvirt sẽ tái tạo lại các iptables khi khởi động lại - chặn truy cập vào các máy ảo của tôi.


0

Nếu tôi nhớ chính xác một trong các dịch vụ ảo hóa (và dường như bạn đang chạy một dịch vụ, đánh giá từ tên giao diện virbr0) thì chính nó đã thêm một số quy tắc tường lửa để chứa các giao diện, mạng ảo và giao diện. Xin hãy nhìn vào khu vực này (và libvirt-daemoncó khả năng là một điểm khởi đầu tốt).

Tuy nhiên, tôi không biết nếu thực tế là nó có thể ghi đè lên các quy tắc của bạn là một lỗi hoặc một tính năng. RedHat dường như khá tập trung vào firewalldgiải pháp tường lửa trong RHEL (và điều này cũng trực tiếp đến CentOS không thay đổi) và họ có thể không hỗ trợ vận hành chính xác các giải pháp ảo hóa của mình bằng các giải pháp firewalldthay thế.


0

Thử đi:

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

thực hiện quy tắc iptables của bạn ở đây bây giờ

iptables-save > /etc/sysconfig/iptables
iptables-restore < /etc/sysconfig/iptables
systemctl restart iptables
systemctl restart iptables
systemctl enable iptables.service
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.