起動時に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
のいくつかの変数がスクリプトに提供されます。マニュアルページは非常に詳細です。IFACE
ADDRFAM
一方、up
==post-up
とdown
==内部では、正しいサブフォルダはそれぞれとpost-down
です。if-down.d
if-up.d
/etc/network/interfaces
source
宣言されたインターフェイスを起動するプロセスを「デバッグ」するには、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
また参考にしてください欲しい人=部分 - オペレーティングシステムでネットワーク接続が確立される前に、これらの規則が適用されます。