再起動後にCentOS 7 iptablesが持続しない


11

開発サーバーに最小限のCentOS 7バージョンをインストールして、kvm / qemuで一部のLinuxゲストを仮想化しました。

firewalld私がインストールiptables-serviceして実行する代わりにiptablesを使用するには:

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

それはセクシーではありませんが、これまでのところ動作します。しかし、最終的な解決策ではありません。


firewalldが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

savestopstartrestartコマンドはすべての作業とそれがブート時にロードする必要があります。


iptablesコマンドがあります。しかし、 `rpm -aq iptables-services`は何も出力しません。どういう意味ですか?
サアドマスード

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

仮想化サービスの1つ(およびvirbr0インターフェース名から判断すると、1つを実行しているようです)を正しく覚えていれば、構成済みの仮想ネットワークとインターフェースに対応するためにいくつかのファイアウォールルール自体を追加していました。この領域を見てください(そして、libvirt-daemonおそらく良い出発点です)。

ただし、ルールを上書きしているように見えるという事実がバグなのか機能なのかはわかりません。RedHatはfirewalld、RHELのファイアウォールソリューションとしてかなり注目されているようで(これはそのまま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.