web-dev-qa-db-ja.com

Ubuntu 18.04が再起動後にiptablesルールをロードしない

サーバーをchefでプロビジョニングするため、Ubuntu 16.04と18.04のバージョンで同じ設定を使用します。そして、iptablesルールを復元するための同じルールがありますcat /etc/network/if-pre-up.d/iptables_load /sbin/iptables-restore < /etc/iptables/generalですが、Ubuntu 18.04では機能しません。

手動で実行すると機能します。起動時にこのスクリプトが実行されていないということですか?

[〜#〜]更新[〜#〜]

説明されているようにsystemdサービスを作成しました here で問題なく動作します。

[Unit]
Description = Apply iptables rules 

[Service]
Type=oneshot
ExecStart=/etc/network/if-pre-up.d/iptables_load

[Install]
WantedBy=network-pre.target
5
Coul

これが私がしたことです:

  1. Iptables.rulesを/etc/iptables.rulesにドロップします
  2. 次のようなサービステンプレートを作成します。

    Sudo nano /etc/systemd/system/restore-iptables-rules.service
    

    これをコピーして貼り付けます:

    [Unit]
    Description = Apply iptables rules
    
    [Service]
    Type=oneshot
    ExecStart=/bin/sh -c 'iptables-restore < /etc/iptables.rules'
    
    [Install]
    WantedBy=network-pre.target
    
  3. 次のようにサービスを有効にします。

    Sudo systemctl enable restore-iptables-rules.service
    
  4. 再起動して、ルールが適用されていることを確認します。

    Sudo iptables -L
    
1
Csimbi

If-upの場所でトリガーされるiptablesでさまざまな問題に遭遇しました。私のiptablesスクリプトがさらに複雑になるにつれて、ホスト名解決などが機能する場合に正しいネットワークインターフェイスを起動する必要があるのと同様に、スクリプトの正確な場所によってはスクリプトが実行される可能性があるという問題が問題になりました。これらの要因により、起動が遅くなり、障害が発生していました。 iptablesスクリプトをsystemdサービスとして実行するという代替案を検討できます。

これは、たとえば/ etc/systemd/system /にreal_iptables.serviceというファイルを作成して、次のような内容で行うことができます。

[Unit]
Description=Set up the firewall
After=network.target

[Service]
Type=oneshot
ExecStart=/root/iptables

[Install]
WantedBy=multi-user.target

実際のiptablesスクリプトは、ご覧のとおり、/ root/iptablesにあります。次の方法でサービスをインストールします。

systemctl enable real_iptables
systemctl start real_iptables

サービスを有効にすると、サービスは起動時に開始されますが、実行されるのは1回だけです。完全に安全にしたい場合は、iptablesを使用してすべてのネットワーク通信をブロックするスクリプトを/etc/network/if-up.d/に置くことができます。つまり、サービスが開始されるまで何も起こりません。

0
mbrampton