- 1 nmapコマンドとは?
- 2 検証環境
- 3 インストール方法
- 4 オプション一覧
- 5 基本的な使いかた
- 6 TCPポートをスキャンする方法
- 7 UDPポートをスキャンする方法(-sU)
- 8 ネットワーク内のホスト一覧を表示する方法
- 9 パケットトレースを行う方法(--packet-trace)
- 10 送信元ポート番号を指定する方法(-g)
- 11 サービスのバージョンを確認する方法
- 12 ポートスキャンの結果を確認する方法(--reason)
- 13 ファイルからターゲットを読み込んでポートスキャンをする方法(-iL)
- Z 参考情報
1 nmapコマンドとは?
ポートが開放されているかどうかを確認するために使うコマンドです。
2 検証環境
2.1 ネットワーク構成
サーバとクライアントの2台構成です。図中のens33はNICの名前です。
192.168.2.0/24 client(ens33) -------------------------------------(ens33) server .105 .100
2.2 版数
サーバ、クライアントともに下記版数です。
[root@server ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)
3 インストール方法
クライアントにnmapをインストールします。
[root@server ~]# yum -y install nmap
nmapの版数を確認します。
[root@server ~]# nmap -V Nmap version 6.40 ( http://nmap.org ) Platform: x86_64-redhat-linux-gnu Compiled with: nmap-liblua-5.2.2 openssl-1.0.2k libpcre-8.32 libpcap-1.5.3 nmap-libdnet-1.12 ipv6 Compiled without: Available nsock engines: epoll poll select
4 オプション一覧
オプションは以下のとおりです。
[root@server ~]# nmap --help Nmap 6.40 ( http://nmap.org ) Usage: nmap [Scan Type(s)] [Options] {target specification} TARGET SPECIFICATION: Can pass hostnames, IP addresses, networks, etc. Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254 -iL <inputfilename>: Input from list of hosts/networks -iR <num hosts>: Choose random targets --exclude <host1[,host2][,host3],...>: Exclude hosts/networks --excludefile <exclude_file>: Exclude list from file HOST DISCOVERY: -sL: List Scan - simply list targets to scan -sn: Ping Scan - disable port scan -Pn: Treat all hosts as online -- skip host discovery -PS/PA/PU/PY[portlist]: TCP SYN/ACK, UDP or SCTP discovery to given ports -PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes -PO[protocol list]: IP Protocol Ping -n/-R: Never do DNS resolution/Always resolve [default: sometimes] --dns-servers <serv1[,serv2],...>: Specify custom DNS servers --system-dns: Use OS's DNS resolver --traceroute: Trace hop path to each host SCAN TECHNIQUES: -sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans -sU: UDP Scan -sN/sF/sX: TCP Null, FIN, and Xmas scans --scanflags <flags>: Customize TCP scan flags -sI <zombie host[:probeport]>: Idle scan -sY/sZ: SCTP INIT/COOKIE-ECHO scans -sO: IP protocol scan -b <FTP relay host>: FTP bounce scan PORT SPECIFICATION AND SCAN ORDER: -p <port ranges>: Only scan specified ports Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9 -F: Fast mode - Scan fewer ports than the default scan -r: Scan ports consecutively - don't randomize --top-ports <number>: Scan <number> most common ports --port-ratio <ratio>: Scan ports more common than <ratio> SERVICE/VERSION DETECTION: -sV: Probe open ports to determine service/version info --version-intensity <level>: Set from 0 (light) to 9 (try all probes) --version-light: Limit to most likely probes (intensity 2) --version-all: Try every single probe (intensity 9) --version-trace: Show detailed version scan activity (for debugging) SCRIPT SCAN: -sC: equivalent to --script=default --script=<Lua scripts>: <Lua scripts> is a comma separated list of directories, script-files or script-categories --script-args=<n1=v1,[n2=v2,...]>: provide arguments to scripts --script-args-file=filename: provide NSE script args in a file --script-trace: Show all data sent and received --script-updatedb: Update the script database. --script-help=<Lua scripts>: Show help about scripts. <Lua scripts> is a comma separted list of script-files or script-categories. OS DETECTION: -O: Enable OS detection --osscan-limit: Limit OS detection to promising targets --osscan-guess: Guess OS more aggressively TIMING AND PERFORMANCE: Options which take <time> are in seconds, or append 'ms' (milliseconds), 's' (seconds), 'm' (minutes), or 'h' (hours) to the value (e.g. 30m). -T<0-5>: Set timing template (higher is faster) --min-hostgroup/max-hostgroup <size>: Parallel host scan group sizes --min-parallelism/max-parallelism <numprobes>: Probe parallelization --min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <time>: Specifies probe round trip time. --max-retries <tries>: Caps number of port scan probe retransmissions. --host-timeout <time>: Give up on target after this long --scan-delay/--max-scan-delay <time>: Adjust delay between probes --min-rate <number>: Send packets no slower than <number> per second --max-rate <number>: Send packets no faster than <number> per second FIREWALL/IDS EVASION AND SPOOFING: -f; --mtu <val>: fragment packets (optionally w/given MTU) -D <decoy1,decoy2[,ME],...>: Cloak a scan with decoys -S <IP_Address>: Spoof source address -e <iface>: Use specified interface -g/--source-port <portnum>: Use given port number --data-length <num>: Append random data to sent packets --ip-options <options>: Send packets with specified ip options --ttl <val>: Set IP time-to-live field --spoof-mac <mac address/prefix/vendor name>: Spoof your MAC address --badsum: Send packets with a bogus TCP/UDP/SCTP checksum OUTPUT: -oN/-oX/-oS/-oG <file>: Output scan in normal, XML, s|<rIpt kIddi3, and Grepable format, respectively, to the given filename. -oA <basename>: Output in the three major formats at once -v: Increase verbosity level (use -vv or more for greater effect) -d: Increase debugging level (use -dd or more for greater effect) --reason: Display the reason a port is in a particular state --open: Only show open (or possibly open) ports --packet-trace: Show all packets sent and received --iflist: Print host interfaces and routes (for debugging) --log-errors: Log errors/warnings to the normal-format output file --append-output: Append to rather than clobber specified output files --resume <filename>: Resume an aborted scan --stylesheet <path/URL>: XSL stylesheet to transform XML output to HTML --webxml: Reference stylesheet from Nmap.Org for more portable XML --no-stylesheet: Prevent associating of XSL stylesheet w/XML output MISC: -6: Enable IPv6 scanning -A: Enable OS detection, version detection, script scanning, and traceroute --datadir <dirname>: Specify custom Nmap data file location --send-eth/--send-ip: Send using raw ethernet frames or IP packets --privileged: Assume that the user is fully privileged --unprivileged: Assume the user lacks raw socket privileges -V: Print version number -h: Print this help summary page. EXAMPLES: nmap -v -A scanme.nmap.org nmap -v -sn 192.168.0.0/16 10.0.0.0/8 nmap -v -iR 10000 -Pn -p 80 SEE THE MAN PAGE (http://nmap.org/book/man.html) FOR MORE OPTIONS AND EXAMPLES
5 基本的な使いかた
nmapコマンドは以下のように実行します。
デフォルトは、TCPによるポートスキャンを実行します。
nmap <スキャン対象のホストのIPアドレス(またはホスト名) >
5.1 開放されているポート番号を確認する方法
"開放されている"とは、パケットフィルタ(iptables)でパケットがフィルタされていないことを意味します。まず、開放されているポートをポート番号で確認します。
[root@server ~]# firewall-cmd --list-ports [root@server ~]#
次に開放されているポートをサービス名で調べてみます。ssh(22)のポートだけが、開放されていることがわかります。なお、サービス名は/etc/servicesに登録されています。
[root@server ~]# firewall-cmd --list-services ssh
次に、クライアントでnmapを実行します。このとき、スキャン対象のIPアドレス(192.168.2.100)を指定します。実行結果を確認すると、sshはopenと表示されています。sshdとやりとりが可能な状態になっています。また、"Not shown: 999 filtered ports"と表示(★)されています。これは、999個のポートがパケットフィルタでフィルタされていることを意味しています。
[root@client ~]# nmap 192.168.2.100 Starting Nmap 6.40 ( http://nmap.org ) at 2022-01-07 21:49 JST Nmap scan report for 192.168.2.100 Host is up (0.0013s latency). Not shown: 999 filtered ports ★ PORT STATE SERVICE 22/tcp open ssh MAC Address: xx:xx:xx:yy:yy:yy (CCC) Nmap done: 1 IP address (1 host up) scanned in 4.69 seconds
5.2 実験1
サーバで11111番ポートを開放して、nmapの実行結果がどのようになるのかを確認してみます。
[root@server ~]# firewall-cmd --add-port=11111/tcp success
次に、クライアントでnmapを実行します。
[root@client ~]# nmap 192.168.2.100 Starting Nmap 6.40 ( http://nmap.org ) at 2022-01-07 21:55 JST Nmap scan report for 192.168.2.100 Host is up (0.00049s latency). Not shown: 998 filtered ports PORT STATE SERVICE 22/tcp open ssh 11111/tcp closed vce ★ MAC Address: xx:xx:xx:yy:yy:yy (ZZZZZZ) Nmap done: 1 IP address (1 host up) scanned in 8.07 seconds
11111番ポートが、filteredからclosed(★印)に変化したことがわかります。closedは、ポートスキャンのパケットが11111番ポートまで到達したけど、そのポート番号でListenしているプロセスが存在しないことを意味しています。
この時の様子を以下に図示します。11111番ポートに対するSYNパケットに対して、RSTパケットが送信されています。RSTパケットが送信されるのは、11111番ポートでListenしているプロセスがいないためです。
client server(11111) | | |----------------- SYN ---------------->| |<---------------- RST------------------| | |
5.3 実験2
次に、サーバでncコマンドを実行します。ncコマンドは、11111番ポートでncプロセスがListenするように実行します。なお、ncコマンドの使い方は、ncコマンドの使い方(ネットワーク実験の幅が広がるなぁ~) - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# nc -kl 11111
もう1つターミナルを開きます。そして、ncプロセスがListenしているポートをlsofコマンドで確認します。ncプロセスは、TCPの11111番ポートでListenしていることがわかります。なお、lsofコマンドの使い方は、lsofコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# lsof -i4:11111 -a -P COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nc 2930 root 4u IPv4 38848 0t0 TCP *:11111 (LISTEN)
次に、クライアントでnmapを実行します。
[root@client ~]# nmap 192.168.2.100 Starting Nmap 6.40 ( http://nmap.org ) at 2022-01-07 23:09 JST Nmap scan report for 192.168.2.100 Host is up (0.00067s latency). Not shown: 998 filtered ports PORT STATE SERVICE 22/tcp open ssh 11111/tcp open vce ★ MAC Address: xx:xx:xx:yy:yy:yy (ZZZZZZ) Nmap done: 1 IP address (1 host up) scanned in 12.30 seconds
今度は、11111番ポートがopen(★)になりました。つまり、11111番ポートでListenするプロセス(nc)が存在することを意味しています。
この時の様子を以下に図示します。SYNパケットに対して、SYN+ACKパケットを返信しています。なお、クライアントはSYN+ACKを受信すると、サーバにRSTを送信しています。
client server(11111) | | |----------------- SYN ---------------->| |<---------------- SYN +ACK ------------| |----------------- RST ---------------->| | |
6 TCPポートをスキャンする方法
開放されているポート番号を確認します。22番ポートだけが開放されていることがわかります。
[root@server ~]# firewall-cmd --list-ports [root@server ~]# firewall-cmd --list-services ssh [root@server ~]#
6.1 特定のポート番号を指定する方法(-p)
sshの22番ポートが開放されているかどうか確認してみます。openと表示されているので、開放されていることがわかります。
[root@client ~]# nmap -p22 192.168.2.100 Starting Nmap 6.40 ( http://nmap.org ) at 2022-01-08 15:16 JST Nmap scan report for 192.168.2.100 Host is up (0.0010s latency). PORT STATE SERVICE 22/tcp open ssh MAC Address: xx:xx:xx:yy:yy:yy (ZZZZZZ) Nmap done: 1 IP address (1 host up) scanned in 0.72 seconds
次にTCPの11111番ポートが開放されているかどうか確認してみます。11111番ポートは、filteredと表示されているので、開放されていないことがわかります。
[root@client ~]# nmap -p11111 192.168.2.100 Starting Nmap 6.40 ( http://nmap.org ) at 2022-01-08 15:17 JST Nmap scan report for 192.168.2.100 Host is up (0.00075s latency). PORT STATE SERVICE 11111/tcp filtered vce MAC Address: xx:xx:xx:yy:yy:yy (ZZZZZZ) Nmap done: 1 IP address (1 host up) scanned in 0.71 seconds
6.2 範囲を指定する方法(-p)
TCPの20番ポートから30番ポートについて、ポートが開放されているかどうかを確認してみます。sshの22番ポートだけが開放されていることがわかります。
[root@client ~]# nmap -p20-30 192.168.2.100 Starting Nmap 6.40 ( http://nmap.org ) at 2022-01-08 15:19 JST Nmap scan report for 192.168.2.100 Host is up (0.00055s latency). PORT STATE SERVICE 20/tcp filtered ftp-data 21/tcp filtered ftp 22/tcp open ssh 23/tcp filtered telnet 24/tcp filtered priv-mail 25/tcp filtered smtp 26/tcp filtered rsftp 27/tcp filtered nsw-fe 28/tcp filtered unknown 29/tcp filtered msg-icp 30/tcp filtered unknown MAC Address: xx:xx:xx:yy:yy:yy (ZZZZZZ) Nmap done: 1 IP address (1 host up) scanned in 1.90 seconds
7 UDPポートをスキャンする方法(-sU)
ncコマンドを実行します。UDPの11111番ポートでデータを待ち受けます。
[root@server ~]# nc -ul 11111
ncプロセスが使用しているポート番号を確認します。
[root@server ~]# lsof -i4:11111 -a -P COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nc 5399 root 4u IPv4 74676 0t0 UDP *:11111
UDPの11111番ポートを開放します。
[root@server ~]# firewall-cmd --add-port=11111/udp success
ポート番号を確認します。
[root@server ~]# firewall-cmd --list-ports 11111/udp
サーバの11111番ポーに対してnmapを実行します。なぜか状態がclosedとなってしまいます。バグですかね?
[root@client ~]# nmap -sU -p11111 192.168.2.100 Starting Nmap 6.40 ( http://nmap.org ) at 2022-01-08 15:41 JST Nmap scan report for 192.168.2.100 Host is up (0.00079s latency). PORT STATE SERVICE 11111/udp closed unknown MAC Address: xx:xx:xx:yy:yy:yy (ZZZZZZ) Nmap done: 1 IP address (1 host up) scanned in 0.74 seconds
8 ネットワーク内のホスト一覧を表示する方法
8.1 ARPを使う方法(-sn)
ARPを使って192.168.2.0/24に存在するホストを確認してみます。ARP要求に応答したホストは"Host is up."と表示されます。全部で5台のホストが存在することがわかります。
[root@client ~]# nmap -sn 192.168.2.0/24 Starting Nmap 6.40 ( http://nmap.org ) at 2022-01-08 18:42 JST Nmap scan report for WRC-2533GS2 (192.168.2.1) Host is up (-0.10s latency). MAC Address: xx:xx:xx:xx:xx:xx (Unknown) Nmap scan report for DESKTOP-XXXXXXX (192.168.2.12) Host is up (0.00016s latency). MAC Address: xx:xx:xx:xx:xx:xx (Unknown) Nmap scan report for 192.168.2.100 Host is up (0.00036s latency). MAC Address: xx:xx:xx:xx:xx:xx (ZZZZZZ) Nmap scan report for client (192.168.2.37) Host is up. Nmap scan report for 192.168.2.105 Host is up. Nmap done: 256 IP addresses (5 hosts up) scanned in 4.27 seconds
8.2 特定のホストをポートスキャンから除外する方法(--exclude)
192.168.2.0/24のネットワークで192.168.2.252と192.168.2.253のホストに対してポートスキャンを実行しないようにしてみます。nmapを実行すると、以下のように192.168.2.252と192.168.2.253に対してポートスキャンが実行されていないことがわかります。
[root@client ~]# nmap --exclude 192.168.2.252,192.168.2.253 -sL 192.168.2.0/24 -snip- Nmap scan report for 192.168.2.250 Nmap scan report for 192.168.2.251 Nmap scan report for 192.168.2.254 Nmap scan report for 192.168.2.255 Nmap done: 254 IP addresses (0 hosts up) scanned in 2.51 seconds
9 パケットトレースを行う方法(--packet-trace)
packet-traceオプションを使うと、サーバとクライアントのやりとりがわかります。以下の例では、まずはじめにARPを使って、サーバのMACアドレスを得ています。次に、クライアントからサーバの11111番ポートにSYNパケットが2回送信されています。そのあと、サーバからクライアントにSYN+ACKパケットが2回返信されています。
[root@client ~]# nmap --packet-trace -p11111 192.168.2.100 Starting Nmap 6.40 ( http://nmap.org ) at 2022-01-08 18:14 JST SENT (0.0609s) ARP who-has 192.168.2.100 tell 192.168.2.105 RCVD (0.0615s) ARP reply 192.168.2.100 is-at xx:xx:xx:yy:yy:yy -snip- SENT (0.2815s) TCP 192.168.2.105:43579 > 192.168.2.100:11111 S ttl=47 id=26942 iplen=44 seq=3321984755 win=1024 <mss 1460> SENT (0.3824s) TCP 192.168.2.105:43580 > 192.168.2.100:11111 S ttl=57 id=56633 iplen=44 seq=3321919218 win=1024 <mss 1460> RCVD (0.2822s) TCP 192.168.2.100:11111 > 192.168.2.105:43579 SA ttl=64 id=0 iplen=44 seq=4010614734 win=29200 <mss 1460> RCVD (0.3829s) TCP 192.168.2.100:11111 > 192.168.2.105:43580 SA ttl=64 id=0 iplen=44 seq=1336599785 win=29200 <mss 1460> Nmap scan report for 192.168.2.100 Host is up (0.00068s latency). PORT STATE SERVICE 11111/tcp open vce MAC Address: xx:xx:xx:yy:yy:yy (ZZZZZZ) Nmap done: 1 IP address (1 host up) scanned in 0.51 seconds
10 送信元ポート番号を指定する方法(-g)
gオプションを指定すると、ポートスキャンの送信元ポート番号を明に指定することができます。gオプションを指定しないと、ポートスキャンのパケットを送信する毎に送信元ポート番号が変化します。
送信元ポート番号を22222に指定してみます。このとき、さきほど確認したpacket-traceオプションを指定して、送信元ポート番号を確認してみます。送信元ポート番号が22222であることがわかります。
[root@client ~]# nmap --packet-trace -g 22222 -p11111 192.168.2.100 -snip- SENT (0.4400s) TCP 192.168.2.105:22222 > 192.168.2.100:11111 S ttl=47 id=28127 iplen=44 seq=1253010836 win=1024 <mss 1460> SENT (0.5493s) TCP 192.168.2.105:22222 > 192.168.2.100:11111 S ttl=41 id=63524 iplen=44 seq=1252945301 win=1024 <mss 1460> RCVD (0.4407s) TCP 192.168.2.100:11111 > 192.168.2.105:22222 SA ttl=64 id=0 iplen=44 seq=217630012 win=29200 <mss 1460> RCVD (0.5499s) TCP 192.168.2.100:11111 > 192.168.2.105:22222 SA ttl=64 id=0 iplen=44 seq=219335868 win=29200 <mss 1460> Nmap scan report for 192.168.2.100 Host is up (0.0012s latency). PORT STATE SERVICE 11111/tcp open vce MAC Address: xx:xx:xx:yy:yy:yy (ZZZZZZ) Nmap done: 1 IP address (1 host up) scanned in 0.72 seconds [root@client ~]#
11 サービスのバージョンを確認する方法
11.1 sshのバージョン確認
sshのバージョンを確認します。
[root@server ~]# ssh -V OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
sshdプロセスがListenしているポート番号を確認します。22番ポートでListenしていることがわかります。
[root@server ~]# lsof -c sshd -a -iTCP -a -P COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1116 root 3u IPv4 27789 0t0 TCP *:22 (LISTEN) sshd 1116 root 4u IPv6 27374 0t0 TCP *:22 (LISTEN) -snip-
クライアントでnmapを実行します。sshのバージョンがOpenSSH 7.4 (protocol 2.0)であることがわかります。
[root@client ~]# nmap -sV -p22 192.168.2.100 Starting Nmap 6.40 ( http://nmap.org ) at 2022-01-08 15:57 JST Nmap scan report for 192.168.2.100 Host is up (0.00056s latency). PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.4 (protocol 2.0) MAC Address: xx:xx:xx:yy:yy:yy (ZZZZZZ) Service detection performed. Please report any incorrect results at http://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 0.88 seconds
11.2 httpdのバージョン確認
httpdを起動します。
[root@server ~]# systemctl start httpd
httpdの版数を確認します。
[root@server ~]# httpd -v Server version: Apache/2.4.6 (CentOS) Server built: Nov 10 2021 14:26:31
httpdプロセスがListenしているポート番号を確認します。80番ポートでListenしていることがわかります。
[root@server ~]# lsof -c httpd -a -iTCP -a -P COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 5797 root 4u IPv6 77404 0t0 TCP *:80 (LISTEN) httpd 5798 apache 4u IPv6 77404 0t0 TCP *:80 (LISTEN) httpd 5799 apache 4u IPv6 77404 0t0 TCP *:80 (LISTEN) httpd 5800 apache 4u IPv6 77404 0t0 TCP *:80 (LISTEN) httpd 5801 apache 4u IPv6 77404 0t0 TCP *:80 (LISTEN) httpd 5802 apache 4u IPv6 77404 0t0 TCP *:80 (LISTEN)
httpdに対してnmapを実行します。httpdの版数が"Apache httpd 2.4.6 *1"と表示されていることがわかります。
[root@client ~]# nmap -sV -p80 192.168.2.100 Starting Nmap 6.40 ( http://nmap.org ) at 2022-01-08 16:02 JST Nmap scan report for 192.168.2.100 Host is up (0.00074s latency). PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.6 ((CentOS)) MAC Address: xx:xx:xx:yy:yy:yy (ZZZZZZ) Service detection performed. Please report any incorrect results at http://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 6.87 seconds
12 ポートスキャンの結果を確認する方法(--reason)
reasonオプションを使うと、どのような理由でポートへのアクセスが失敗したのかの理由を調べることができます。
開放されているポートを確認します。sshのポートだけが開放されていることがわかります。
[root@server ~]# firewall-cmd --list-ports [root@server ~]# firewall-cmd --list-services ssh [root@server ~]#
12.1 ポートが解放されていない場合
開放されていないTCPの11111番ポートに対してnmapを実行してみます。
ポートがパケットフィルタでフィルタされており開放されていない状態の場合、host-prohibitedという理由が表示されます。
[root@client ~]# nmap --reason -p11111 192.168.2.100 Starting Nmap 6.40 ( http://nmap.org ) at 2022-01-08 16:29 JST Nmap scan report for 192.168.2.100 Host is up, received arp-response (0.00066s latency). PORT STATE SERVICE REASON 11111/tcp filtered vce host-prohibited MAC Address: xx:xx:xx:yy:yy:yy (ZZZZZZ) Nmap done: 1 IP address (1 host up) scanned in 0.72 seconds
12.2 解放したポートでListenするプロセスが存在しない場合
TCPの11111番ポートを開放します。
[root@server ~]# firewall-cmd --add-port=11111/tcp success [root@server ~]# firewall-cmd --list-ports 11111/tcp
開放したTCPの11111番ポートに対してnmapを実行してみます。
今度はresetが表示されました。resetはポートは開放されているけど、そのポートでListenしているプロセスが存在しないことを表しています。
[root@client ~]# nmap --reason -p11111 192.168.2.100 Starting Nmap 6.40 ( http://nmap.org ) at 2022-01-08 16:31 JST Nmap scan report for 192.168.2.100 Host is up, received arp-response (0.00074s latency). PORT STATE SERVICE REASON 11111/tcp closed vce reset MAC Address: xx:xx:xx:yy:yy:yy (ZZZZZZ) Nmap done: 1 IP address (1 host up) scanned in 0.73 seconds
12.3 開放したポートでListenするプロセスが存在する場合
ncコマンドを実行して、ncプロセスがTCPの11111番ポートでListenするようにします。
[root@server ~]# nc -kl 11111
ncプロセスがListenしているポート番号を確認します。
[root@server ~]# lsof -c nc -a -i4 -a -P COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nc 6505 root 4u IPv4 84971 0t0 TCP *:11111 (LISTEN)
TCPの11111番ポートに対してnmapを実行してみます。
今度はsyn-ackが表示されました。syn-ackは、そのポートでListenしているプロセスが存在することを表しています。
[root@client ~]# nmap --reason -p11111 192.168.2.100 Starting Nmap 6.40 ( http://nmap.org ) at 2022-01-08 16:33 JST Nmap scan report for 192.168.2.100 Host is up, received arp-response (0.00056s latency). PORT STATE SERVICE REASON 11111/tcp open vce syn-ack MAC Address: xx:xx:xx:yy:yy:yy (ZZZZZZ) Nmap done: 1 IP address (1 host up) scanned in 0.74 seconds
13 ファイルからターゲットを読み込んでポートスキャンをする方法(-iL)
スキャン対象のターゲットのIPアドレスを記載したテキストファイルを作成します。
8.8.8.8はGoogleのオープンDNSサーバのIPアドレスです。インターネット上のサーバに対して実行するのはあまりよくありませんが、例として一度実行してみます。
[root@client ~]# vi scan_list.txt [root@client ~]# cat scan_list.txt 8.8.8.8 192.168.2.100
nmapを実行します。GoogleのオープンDNSサーバは、DNSのポート(53)とHTTPS(443)のポートが開放されていることがわかります。また、テスト環境のサーバは、ssh(22)のポートが開放されていることがわかります。
[root@client ~]# nmap -iL scan_list.txt Starting Nmap 6.40 ( http://nmap.org ) at 2022-01-08 19:39 JST Nmap scan report for dns.google (8.8.8.8) Host is up (0.016s latency). Not shown: 998 filtered ports PORT STATE SERVICE 53/tcp open domain 443/tcp open https Nmap scan report for 192.168.2.100 Host is up (0.00057s latency). Not shown: 999 filtered ports PORT STATE SERVICE 22/tcp open ssh MAC Address: xx:xx:xx:yy:yy:yy (ZZZZZZ) Nmap done: 2 IP addresses (2 hosts up) scanned in 25.93 seconds
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ