iptables - インターフェイスが表示される前にインターフェイスルールを追加します。

iptables - インターフェイスが表示される前にインターフェイスルールを追加します。

起動時にLinuxルーターにいくつかのiptablesルールを追加するために/ etc / rc.localを使用していますが、いくつかのルールは追加されません。まだインターフェイスがないからだそうです。

これが私がそこに持っているものです:

sudo /sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
sudo /sbin/iptables -A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo /sbin/iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT

起動時にppp0インターフェイスが表示されるまでに時間がかかるように見え、ppp0インターフェイスが存在しないため、iptablesはルールの追加を拒否する可能性があります。 iptablesにルールを追加するように強制する方法はありますか?ルールを追加する前にインターフェイスが存在するのを待つために、スクリプトにループを導入する前にこれを確認する必要があると思います。

また、インターフェイスが消えてルールを追加した後に戻っても、iptablesはルールを削除しないことを観察しました(私の場合は良い動作です)。

答え1

すべてのDebianベースのディストリビューションでpost-up使用してください。/etc/network/interfacesこれにより、スクリプトが起動した直後にスクリプトを実行できますifup。詳しくはマニュアルページinterfaces

注:post-downもちろん、ルールを削除するためにも使用できます。

システムが一部のスクリプトを介してppp0を起動しても動作しない場合は、上記のタスクに対応するサブフォルダ*.dでフックスクリプトを使用できます。など/etc/networkのいくつかの変数がスクリプトに提供されます。マニュアルページは非常に詳細です。IFACEADDRFAM

一方、up==post-updown==内部では、正しいサブフォルダはそれぞれとpost-downです。if-down.dif-up.d

/etc/network/interfacessource宣言されたインターフェイスを起動するプロセスを「デバッグ」するには、ifup(8)詳細を参照してください。特にあなたは欲しいでしょうifup -nvl(そしてインターフェース名も同じでしょう)。プロセスを模倣するだけなので、許可なく実行することもできます。

可能な警告

これはDebianベースですが、Network Managerベースの設定には適用されません。ところで、ルーターに言及すれば、ネットワーク管理者が主導する可能性はほとんどないと思います。

答え2

実際に追加できます。iptables必要な存在しないインターフェイスでルールを作成すると機能します。それを試して# iptables -A INPUT -i trollolo -j ACCEPT、何が起こるのか見てください# iptables -nvL。問題は/etc/rc.local方法 - 最新のLinux初期化プログラムでは廃止されました(ほとんどの場合システム)デフォルトでは読みません。基本的にはありませんrc-local.service存在するシステムしたがって、引き続き使用するには手動で再作成する必要があります。/etc/rc.localあなたのファイルLinux、これはお勧めできません。

iptablesルールを維持するために私が選択した方法は、タイムリーな実行のために他のシステムサービスに便利に依存できるカスタムsystemdサービスを使用することです。

まず、iptablesルールを使用してスクリプトファイルを作成します。 touch /usr/local/sbin/init_fw.sh

そこにルールを置く:

#!/bin/bash
iptables -F
iptables -P INPUT DROP
................ and so on ......

ファイルを実行可能にする # chmod +x /usr/local/sbin/init_fw.sh

システムサービスファイルを作成# nano /lib/systemd/system/customfw.serviceし、ここに説明を貼り付けます。

[Unit]
Description=Custom FW

[Service]
ExecStart=/usr/local/sbin/init_fw.sh

[Install]
WantedBy=network-pre.target

それでは# systemctl start customfw。ルールのエラーを確認するために使用されます# systemctl status customfw。すべてが正常に機能したら、autorunに設定してください# systemctl enable customfw

注 - このスクリプトはデーモンではありません。非アクティブ(死)状態が良好 - タスクが完了しました。次回の起動時に確認できます。iptables -nvL

また参考にしてください欲しい人=部分 - オペレーティングシステムでネットワーク接続が確立される前に、これらの規則が適用されます。

関連情報