開発サーバーに最小のCentOS 7バージョンをインストールして、一部のLinuxゲストをkvm/qemuで仮想化しました。
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'
これは/usr/libexec/iptables/iptables.init save
を呼び出した後のiptablesファイルの内容です
[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
それはセクシーではありませんが、これまでのところ機能します。しかし、最終的な解決策にはなりませんでした。
私はあなたがサービスを有効にする必要があると思います:
systemctl enable iptables.service
次のようにルールを保存するには、iptables initスクリプトを実行する必要があります。
/usr/libexec/iptables/iptables.init save
Iptables-servicesパッケージがインストールされていることを確認します。
rpm -aq iptables-services
インストールしない場合:
yum install iptables-services
その後、以前のバージョンのCentOSと同じように、serviceコマンドを使用して制御できます。
service iptables save
save
、stop
、start
、restart
コマンドはすべて機能し、ブート時にロードする必要があります。
一番下の/etc/rc.d/rc.localに 'service iptables stop\iptables --flush'コマンドを追加してこれを回避しました
私の環境はCentos 7でしたKVM=そして、私の問題は、再起動時にlibvirtがiptablesを再生成し、仮想マシンへのアクセスをブロックすることでした。
これを試して:
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
仮想化サービスの1つを正しく覚えている場合(そして、virbr0インターフェース名から判断すると、仮想化サービスを実行しているようです)、構成済みの仮想ネットワークとインターフェースに対応するファイアウォールルール自体を追加していました。このエリアをご覧ください(およびlibvirt-daemon
はおそらく良い出発点です)。
ただし、ルールを上書きしているように見えるのがバグなのか機能なのかはわかりません。 RedHatはRHELのファイアウォールソリューションとしてfirewalld
にかなり焦点を合わせているようで(これはそのままCentOSにもそのまま適用されます)、firewalld
の代替を使用した仮想化ソリューションの正しい動作をサポートしない可能性があります。