回復中にエラーを無視できるかどうかを知りたいです。
私のルールには、次のような多くの行があります。
-A mychain -s somehost.com -j DROP
私のルールはダイナミックリストから来ており、somehost.comが一時的にオフラインであるか、ルーティングできないか、それと似ている場合、iptables-restoreはルールの復元を拒否し、次のエラーを引き起こす可能性があります。
iptables-restore v1.6.0: host/network 'somehost.com' not found
Error occurred at line: 342
Try 'iptables-restore -h' or 'iptables-restore --help' for more information.
さて、ホストにアクセスできない場合は、その行をiptables
無視できることを願っていました。somehost.com
これを行うためにいくつかのフラグを追加できますかiptables-restore
?
答え1
DNS名はiptablesルールに使用できますが、これはベストプラクティスではありません。さらに理由があります。主な理由は、iptablesがルールのロード中に解析を実行するためです。 DNS名は後で変更される可能性があり、ホストはそれを認識しません。
ご存知のように、iptablesには次のものだけが必要です。DNS名解決成功。したがって、DNS名が存在しない場合、ルールのロードはエラーで終了します。
スクリプトを生成し、その中で名前解決を確認できます。
#!/bin/bash
host_check=$( dig -t A somehost.com +short 2>/dev/null | wc -l )
if (( $host_check > 0 ))
then sed -i '/.*somehost\.com/s/^#//' file
else sed -i 's/.*somehost\.com/#&/' file
fi
このスクリプトは名前解決を確認します。名前が解決されると(出力は1つ以上の行になります)、スクリプトは各行から特定のDNS名を含むコメントを削除します。それ以外の場合、sciptはDNS名を含む各行にコメントを追加します。
file
- これはiptables-save > file
コマンドのiptablesスクリプトです。
確認したら、次のようにルールをロードできます。iptables-restore < file
この方法を使用しないことをお勧めします。iptablesルールでDNS名を拒否する方法を見つける必要があります。