hana_shinのLinux技術ブログ読者になるhana_shinのLinux技術ブログLinuxの技術情報を掲載しています。ネットワークをメインに掲載していきます。nmapコマンドとは?ポートが開放されているかどうかを確認するために使うコマンドです。ネットワーク構成サーバとクライアントの2台構成です。図中のens33はNICの名前です。版数サーバ、クライアントともに下記版数です。インストール方法クライアントにnmapをインストールします。nmapnmapの版数を確認します。オプション一覧オプションは以下のとおりです。基本的な使いかたnmapコマンドは以下のように実行します。デフォルトは、TCPによるポートスキャンを実行します。開放されているポート番号を確認する方法"開放されている"とは、パケットフィルタ(iptables)でパケットがフィルタされていないことを意味します。開放されているポートをポート番号で確認します。~]#次に開放されているポートをサービス名で調べてみます。ssh(22)のポートだけが、開放されていることがわかります。サービス名は/etc/servicesに登録されています。--list-servicesssh次に、クライアントでnmapを実行します。このとき、スキャン対象のIPアドレス(192.168.2.100)を指定します。実行結果を確認すると、sshはopenと表示されています。sshdとやりとりが可能な状態になっています。ports"と表示(★)されています。これは、999個のポートがパケットフィルタでフィルタされていることを意味しています。実験1サーバで11111番ポートを開放して、nmapの実行結果がどのようになるのかを確認してみます。--add-port=11111/tcpsuccess次に、クライアントでnmapを実行します。seconds11111番ポートが、filteredからclosed(★印)に変化したことがわかります。closedは、ポートスキャンのパケットが11111番ポートまで到達したけど、そのポート番号でListenしているプロセスが存在しないことを意味しています。この時の様子を以下に図示します。11111番ポートに対するSYNパケットに対して、RSTパケットが送信されています。RSTパケットが送信されるのは、11111番ポートでListenしているプロセスがいないためです。実験2次に、サーバでncコマンドを実行します。ncコマンドは、11111番ポートでncプロセスがListenするように実行します。hana_shinのLinux技術ブログを参照してください。11111もう1つターミナルを開きます。ncプロセスがListenしているポートをlsofコマンドで確認します。ncプロセスは、TCPの11111番ポートでListenしていることがわかります。hana_shinのLinux技術ブログを参照してください。(LISTEN)次に、クライアントでnmapを実行します。seconds今度は、11111番ポートがopen(★)になりました。11111番ポートでListenするプロセス(nc)が存在することを意味しています。この時の様子を以下に図示します。SYNパケットに対して、SYN+ACKパケットを返信しています。クライアントはSYN+ACKを受信すると、サーバにRSTを送信しています。開放されているポート番号を確認します。22番ポートだけが開放されていることがわかります。特定のポート番号を指定する方法(-p)sshの22番ポートが開放されているかどうか確認してみます。openと表示されているので、開放されていることがわかります。seconds次にTCPの11111番ポートが開放されているかどうか確認してみます。11111番ポートは、filteredと表示されているので、開放されていないことがわかります。範囲を指定する方法(-p)TCPの20番ポートから30番ポートについて、ポートが開放されているかどうかを確認してみます。sshの22番ポートだけが開放されていることがわかります。UDPポートをスキャンする方法(-sU)ncコマンドを実行します。UDPの11111番ポートでデータを待ち受けます。11111ncプロセスが使用しているポート番号を確認します。*:11111UDPの11111番ポートを開放します。--add-port=11111/udpsuccessポート番号を確認します。--list-ports11111/udpサーバの11111番ポーに対してnmapを実行します。状態がclosedとなってしまいます。ARPを使う方法(-sn)ARPを使って192.168.2.0/24に存在するホストを確認してみます。up."と表示されます。全部で5台のホストが存在することがわかります。特定のホストをポートスキャンから除外する方法(--exclude)192.168.2.0/24のネットワークで192.168.2.252と192.168.2.253のホストに対してポートスキャンを実行しないようにしてみます。nmapを実行すると、以下のように192.168.2.252と192.168.2.253に対してポートスキャンが実行されていないことがわかります。パケットトレースを行う方法(--packet-trace)packet-traceオプションを使うと、サーバとクライアントのやりとりがわかります。以下の例では、まずはじめにARPを使って、サーバのMACアドレスを得ています。次に、クライアントからサーバの11111番ポートにSYNパケットが2回送信されています。そのあと、サーバからクライアントにSYN+ACKパケットが2回返信されています。送信元ポート番号を指定する方法(-g)gオプションを指定すると、ポートスキャンの送信元ポート番号を明に指定することができます。gオプションを指定しないと、ポートスキャンのパケットを送信する毎に送信元ポート番号が変化します。送信元ポート番号を22222に指定してみます。このとき、さきほど確認したpacket-traceオプションを指定して、送信元ポート番号を確認してみます。送信元ポート番号が22222であることがわかります。sshのバージョン確認sshのバージョンを確認します。2017sshdプロセスがListenしているポート番号を確認します。22番ポートでListenしていることがわかります。(LISTEN)-snip-クライアントでnmapを実行します。2.0)であることがわかります。httpdのバージョン確認httpdを起動します。httpdhttpdの版数を確認します。14:26:31httpdプロセスがListenしているポート番号を確認します。80番ポートでListenしていることがわかります。(LISTEN)httpdに対してnmapを実行します。*1"と表示されていることがわかります。ポートスキャンの結果を確認する方法(--reason)reasonオプションを使うと、どのような理由でポートへのアクセスが失敗したのかの理由を調べることができます。開放されているポートを確認します。sshのポートだけが開放されていることがわかります。開放されていないTCPの11111番ポートに対してnmapを実行してみます。ポートがパケットフィルタでフィルタされており開放されていない状態の場合、host-prohibitedという理由が表示されます。解放したポートでListenするプロセスが存在しない場合TCPの11111番ポートを開放します。--list-ports11111/tcp開放したTCPの11111番ポートに対してnmapを実行してみます。今度はresetが表示されました。resetはポートは開放されているけど、そのポートでListenしているプロセスが存在しないことを表しています。開放したポートでListenするプロセスが存在する場合ncコマンドを実行して、ncプロセスがTCPの11111番ポートでListenするようにします。11111ncプロセスがListenしているポート番号を確認します。(LISTEN)TCPの11111番ポートに対してnmapを実行してみます。今度はsyn-ackが表示されました。syn-ackは、そのポートでListenしているプロセスが存在することを表しています。ファイルからターゲットを読み込んでポートスキャンをする方法(-iL)スキャン対象のターゲットのIPアドレスを記載したテキストファイルを作成します。8.8.8.8はGoogleのオープンDNSサーバのIPアドレスです。インターネット上のサーバに対して実行するのはあまりよくありませんが、例として一度実行してみます。192.168.2.100nmapを実行します。GoogleのオープンDNSサーバは、DNSのポート(53)とHTTPS(443)のポートが開放されていることがわかります。テスト環境のサーバは、ssh(22)のポートが開放されていることがわかります。私が業務や記事執筆で参考にした書籍を以下のページに記載します。)はてなブログをはじめよう!hana_shinさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。