警告: Netcatのソフトウェア作成者は2006年以降ソフトウェアを更新していません。したがって、Rackspace Technologyは、Netcatの品質がお客様の期待に応えることを保証しません。
ネットワークサービスが誤動作しているが、サービスがネットワークポートをリッスンしていることがわかっている場合は、プログラム接続を確認して問題のトラブルシューティングを行うことができます。
Netcatコマンドnc
を使用します 、サービスにアクセスします。 RedHat®ベースのディストリビューションを実行していて、nc
がない場合 インストールされている場合は、コマンドラインで次のコマンドを入力します。
$ sudo yum install nc`
Debian®ベースのディストリビューションの場合、コマンドラインで次のコマンドを入力します。
$ sudo apt-get install Netcat`
簡単なテストを実行して、ポートが接続を受け入れることを確認します。
nc
と入力します コマンドラインの後に-vz
が続きます IPアドレスとポートのオプション:
$ nc -vz IP_address port
IPアドレスは、サービスが接続を受信するアドレスである必要があります。
次の例は、可能な出力メッセージを示しています。
$ nc -vz 203.0.113.96 21
Connection to 203.0.113.96 21 port [tcp/ftp] succeeded!
$ nc -vz 203.0.113.96 80
nc: connect to 203.0.113.96 port 80 (tcp) failed: Connection refused
$ nc -vz 203.0.113.96 80
nc: connect to 203.0.113.96 port 80 (tcp) failed: Connection timed out
サービスが実行されていないか、ファイアウォールが接続を拒否しています。 ps
を実行して、プロセスのステータスを確認します コマンドラインで。その他のオプションについては、Linuxで実行中のサービスを確認するを参照してください。
注: サービスが実行されている場合、ファイアウォールが接続を拒否する可能性があります。 接続がタイムアウトしましたをお読みください ファイアウォールのトラブルシューティングの手順については、セクションをご覧ください。
接続がタイムアウトしました 応答は、接続が機能していないことを示しています。これは、ファイアウォールがポートをブロックしていることを意味している可能性があります。必要なポートでの接続を受け入れるルールを追加して、接続ステータスをテストします。
次の例では、入力チェーンの1行目に、ポート80
ですべてのTCP接続を受け入れるルールを挿入します。 (HTTP)。 Apache®などのWebサーバーをテストするときにこのルールを使用します。
$ sudo /sbin/iptables -I INPUT 1 -p tcp --dport http -j ACCEPT
IPテーブルは、加えられた変更を即座に反映します。 nc
でテストを繰り返します 応答に変化があるかどうかを確認します。
追加したルールを削除する場合は、-D
を使用できます。 チェーン内のルールの位置と組み合わせたオプション。前の例では、チェーンの一番上にある1行目にルールを追加しました。次の例は、それを削除する方法を示しています。
$ sudo /sbin/iptables -D INPUT 1
コマンドラインで次のコマンドを実行すると、現在のファイアウォール構成をいつでも確認できます。
$ sudo /sbin/iptables -L -v
初期接続が成功すると、Netcatはサービスに接続できます。接続の詳細を確認してください。
まず、-vt
を使用します サービスが基本的なネットワーククエリに応答できるかどうかを確認するオプション:
$ nc -vt IP Address Port
コマンドをサービスデーモンに送信して応答を受信できる場合は、プログラムにアクセスできることを示しており、問題はクライアントの接続構成が原因である可能性があります。
接続したら、サービスをテストして応答を取得します。 GET
を送信してサービスをテストできます Webサーバーへのリクエスト、またはサーバーに応答を求めるその他の適切なデータ。
Ctrl-C を押すと、接続を終了できます。 または、サービス固有のquitコマンドを入力します。
たとえば、QUIT
を使用して、ファイル転送プロトコル、FTP、サーバーへの接続を閉じることができます。 コマンド:
$ nc -vt 203.0.113.96 21
Connection to 203.0.113.96 21 port [tcp/ftp] succeeded!
220 (vsFTPd 2.0.5)
$ QUIT
221 Goodbye.
nc
と仮定します 成功を報告しますが、コマンドを送信することはできません。または、サービスが利用できないことを報告するサービスデーモンから応答を受け取ります。その場合、伝送制御プロトコルラッパー、TCPラッパーがある可能性があります。 、アクセス制御を提供します。
TCPラッパーによってブロックされているFTPサービスは、次の例のようになります。
$ nc -vt 203.0.113.96 21
Connection to 203.0.113.96 21 port [tcp/ftp] succeeded!
421 Service not available.
TCPラッパーと互換性のあるプログラムは、libwrap
でコンパイルされます。 。プログラムがTCPwrappersを使用できるかどうかを確認するには、次のコマンドを使用します。
$ ldd /path/to/binary | grep libwrap
次の例では、vsftpd
をチェックします libwrap
のプログラム 共有ライブラリファイル。
ldd /usr/sbin/vsftpd | grep libwrap
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f62c734a000)
プログラムがTCPラッパーと互換性がない場合は、前のgrep
コマンドは何も返しません。
ブロックされた接続はログエントリを生成します。プログラムのログで関連するメッセージを確認してください。
vsftpd
内 ログ、 /var/log/vsftpd.logにあります 、tcpラッパーが原因でブロックされた接続は次の例のようになります:
Tue Jun 7 16:14:21 2011 [pid 28599] CONNECT: Client "203.0.113.43", "Connection refused: tcp_wrappers denial."
hosts.deny
/etc/hosts.deny ファイルは、ブロックされた接続の定義を確立します。ファイルにサービスのエントリが表示されない場合は、grep
を使用してください 検索します。
次のコマンドを実行して、ファイルでプログラム名を検索します。
$ sudo grep "vsftpd" /etc/hosts.deny
vsftpd : ALL
ハッシュ(#)を使用して、問題のある行をコメントアウトしてみてください。このファイルへの変更は自動的に有効になります。サービスを再起動する必要はありません。
TCPラッパーはデフォルトで接続を許可するため、問題の原因である場合は、 /etc/hosts.denyにエントリが存在する必要があることに注意してください。 サービスのために。ファイルの名前を/etc/hosts.denyに変更できます すべての拒否ルールを一時的に削除します。たとえば、sudo mv /etc/hosts.deny /etc/hosts.deny.old
を実行します。 。このコマンドは、TCPラッパーを使用するすべてのアプリケーションに影響することに注意してください。必要に応じて、テスト終了後に元に戻すことを忘れないでください。
この記事のすべてのテストを問題を特定せずに完了した場合、サービスは正常に実行されている可能性があります。次のステップは、ping
を使用してサーバーへの接続をテストすることです。 およびtraceroute
ユーティリティ。