はじめに
この記事では、iptablesルールで実行したいことを実行する際に発生する可能性のある問題をトラブルシューティングするために実行できるいくつかの基本的な手順について説明します。
前提条件
CentOS 6.x(またはLinuxの任意のディストリビューション)を実行しているサーバー
インストールおよび構成されたiptables(基本構成については、基本IPTablesファイル構成を参照)
基本的なIPTablesのトラブルシューティング
iptablesルールを作成するための便利な追加機能の1つは、ロギングを設定することです。ロギングは、選択した出力をオペレーティングシステムのログファイル(dmesgまたはsystemd)にパイプするiptablesツールボックスの特別なターゲットを使用します。
コマンドライン:
sudo iptables -A INPUT -j LOG --log-prefix DROPPED-INGRESS-
または、/ etc / sysconfig / iptablesファイル内:
ロギング構文の例
構文を解凍しましょう:
*‘-A INPUT
‘はこのルールをINPUTチェーンの最後に追加します。ルールの順序は重要であるため、トラフィックをドロップまたは拒否するルールの後にこのルールを配置すると、使用されることはありません。これについては、--log-prefix
について説明するときに詳しく説明します。 以下。
*‘-j LOG
‘はLOG
にジャンプします 目標。このターゲットは、「非終了」ターゲットと呼ばれる特別なターゲットです。最も一般的に使用されるターゲット(ACCEPT
など)とは異なります 、DROP
、またはREJECT
)、これはiptablesがそれ以上のルールを解析するのを止めません。したがって、このルールが呼び出されると、パケットがログに記録され(後続のオプションで指定されている場合は、追加のオプションが実行される可能性があります)、終了するターゲットと一致するルールに到達するまで、またはそれが完了するまで、同じチェーン内のルールの評価を続けます。チェーンの最後のルールを通過し、デフォルトのターゲットに従います。
*‘--log-prefix DROPPED-INGRESS-
‘は各ログエントリに文字列「DROPPED-INGRESS-」を追加します。この追加は、長いログファイルをフィルタリングまたは検索するのに役立ちます。 「--log-prefix
」オプションは、最大256文字の文字列を取ることができます。このルールはこのINPUT
の最後のルールであるため チェーンの場合、これにより、上記のルールのいずれにも一致しないパケットがログに記録され、デフォルトのポリシー(この場合はDROP
)で処理されます。 。
どのルールが呼び出されているか(そして、おそらく同様に重要なことですが、どれが呼び出されていないか)を確認したい場合は、パケットカウンターとトラフィックカウンターを確認できます。 「-v
」を使用します ‘iptables
への‘オプション ‘カウンター(およびいくつかの追加情報も)を表示するコマンド:
sudo iptables -vL INPUT
または
sudo iptables -nvL INPUT
これらのコマンドのいずれかからの出力は、各ルールのパケットおよびバイトカウンターの左側の列に表示されます。 ‘-L
‘オプションは、ルールをリストする必要があることを示します(この特定のオプションは大文字で表記されていることに注意してください)。 ‘-n
‘は、IPをホスト名に解決したくないことを示します(長いリストでは、この逆の名前解決により、不要なサーバーオーバーヘッドが発生し、トラブルシューティングが煩わしく遅くなる可能性があります)。各フラグを個別に使用できます(-n
-v
-L
、たとえば)または上記のように一緒に、ただし注意してください:「L
‘は、リストするチェーンの名前の形式でさらに入力を探すため、最後である必要があります(何も指定されていない場合、デフォルトでは、フィルターテーブル内のすべてのチェーンがリストされます)。
iptables-nvLINPUT出力
ここで、1つのパケットがallow-all sshルールにヒットし、いくつかが最初のallow RELATED/ESTABLISHED
にヒットすることに注意してください。 ルール(これは、このサーバーへのsshセッションに対応します)。また、192.168.50.0/24の範囲からのsshトラフィックを許可するためのルールにヒットがないこともわかります。したがって、たとえば、その範囲からこのサーバーにアクセスできないと誰かが言った場合、その試みはこのサーバーに到達することすらできなかったことがわかります。
パケットバイトカウンタが十分に高くなり、値がそれぞれ1000、1,000,000、または1,000,000,000に対応する「K」、「M」、または「G」で省略される可能性があります。それでも省略されていないカウントを表示したい場合は、「-x
」を含めてください ‘フラグ:
sudo iptables -nvxL INPUT
大きなカウント数を処理する必要がない場合は、「-Z
」を使用してカウントをリセット(ゼロ)できます。 ‘コマンド(ここでも、このフラグは大文字になっていることに注意してください)。すべてのチェーン、特定のチェーン、またはチェーン内の特定の行のカウントをゼロにすることができます。それぞれ:
sudo iptables -Z
sudo iptables -Z INPUT
sudo iptables -Z INPUT 1
最後の例では、INPUT
の行番号1のカウンターのみをゼロにします。 チェーン。
iptablesをリロードするたびに(サーバーの再起動からでも、sudo service iptables reloadの実行からでも)、カウンターもリセットされます。ただし、これらはこのタスクを実行するための最も理想的な方法ではありません。
また、iptablesカウンターのよりリアルタイムの検査を取得することもできます。ここで「watch
‘コマンドが便利です。 ‘Watch
‘を使用すると、同じコマンドを繰り返して出力を頻繁に監視できます(デフォルトは2秒ごとです)。
sudo watch iptables -nvL INPUT
「watch
‘自体はsudoアクセスを必要としません。監視するコマンドに必要な場合は、‘ sudo
を前に付けることができます。 ‘から‘ watch
監視するコマンドのroot権限を持つコマンド。また、監視対象の出力を「grep
」のようなものにパイプする場合 ‘、コマンド文字列全体を一重引用符で囲みます:
sudo watch 'iptables -nvL INPUT | grep tcp'
「watch
」を終了するには ‘、<Ctrl-C>
を押します 。
VPSホスティングサービスと仮想プライベートサーバーの詳細をご覧ください。