[命令] Linux 端口扫描工具 nmap 的使用 (转载)

注意:

在使用 nmap 命令之前要先安装 nmap 软件包

Nmap

简介

Nmap (“Network Mapper(网络映射器)”) 是一款开放源代码的 网络探测和安全审核的工具。它的设计目标是快速地扫描大型网络,当然用它扫描单个 主机也没有问题。Nmap以新颖的方式使用原始IP报文来发现网络上有哪些主机,那些 主机提供什么服务(应用程序名和版本),那些服务运行在什么操作系统(包括版本信息), 它们使用什么类型的报文过滤器/防火墙,以及一堆其它功能。虽然Nmap通常用于安全审核, 许多系统管理员和网络管理员也用它来做一些日常的工作,比如查看整个网络的信息, 管理服务升级计划,以及监视主机和服务的运行。

用法

sT 	 TCP connect()扫描,这种方式会在目标主机的日志中记录大批连接请求和错误信息。
-sS 	 半开扫描,很少有系统能把它记入系统日志。不过,需要Root权限。
-sF  -sN 	 秘密FIN数据包扫描、Xmas Tree、Null扫描模式
-sP 	 ping扫描,Nmap在扫描端口时,默认都会使用ping扫描,只有主机存活,Nmap才会继续扫描。
-sU 	 UDP扫描,但UDP扫描是不可靠的
-sA 	 这项高级的扫描方法通常用来穿过防火墙的规则集
-sV 	 探测端口服务版本
-Pn 	 扫描之前不需要用ping命令,有些防火墙禁止ping命令。可以使用此选项进行扫描
-v 	 显示扫描过程,推荐使用
-h 	 帮助选项,是最清楚的帮助文档
-p 	 指定端口,如“1-65535、1433、135、22、80”等
-O 	 启用远程操作系统检测,存在误报
-A 	 全面系统检测、启用脚本检测、扫描等
-oN/-oX/-oG 	 将报告写入文件,分别是正常、XML、grepable 三种格式
-T4 	 针对TCP端口禁止动态扫描延迟超过10ms
-iL 	 读取主机列表,例如,“-iL C:\ip.txt”

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

端口扫描
nmap默认发送一个ARP的PING数据包,来探测目标主机1-1000范围内所开放的所有端口

nmap ip

    1

在这里插入图片描述

nmap简单扫描,并对结果返回详细的描述输出

nmap -vv IP

    1

在这里插入图片描述

使用 -sT来实现tcp全连接扫描,与目标端口进行三次握手,尝试建立连接。如果建立连接成功,则说明端口开放,但是扫描速度慢。

 nmap -sT ip

    1

在这里插入图片描述

nmap 操作系统类型的探测

nmap -O IP

    1

在这里插入图片描述

nmap万能开关

nmap -A IP

    1


root@kali:~# nmap -A 192.168.124.3
Starting Nmap 7.70 ( https://nmap.org ) at 2018-09-27 04:27 EDT
Nmap scan report for 192.168.124.3
Host is up (0.044s latency).
Not shown: 998 filtered ports
PORT    STATE SERVICE      VERSION
139/tcp open  netbios-ssn  Microsoft Windows netbios-ssn
445/tcp open  microsoft-ds Windows 10 Home China 10586 microsoft-ds (workgroup: WORKGROUP)
MAC Address: F0:03:8C:09:C6:C9 (AzureWave Technology)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Microsoft Windows 10 1511 - 1607 (95%), Microsoft Windows Vista SP0 or SP1, Windows Server 2008 SP1, or Windows 7 (93%), Microsoft Windows Vista SP2, Windows 7 SP1, or Windows Server 2008 (93%), Microsoft Windows Phone 7.5 or 8.0 (92%), Microsoft Windows 10 1607 (92%), Microsoft Windows 10 1511 (92%), Microsoft Windows Server 2008 R2 or Windows 8.1 (92%), Microsoft Windows Server 2016 (92%), Microsoft Windows 7 Professional or Windows 8 (92%), Microsoft Windows Embedded Standard 7 (91%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop
Service Info: Host: DESKTOP-ME19QK1; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: mean: -2h39m59s, deviation: 4h37m07s, median: 0s
|_nbstat: NetBIOS name: DESKTOP-ME19QK1, NetBIOS user: <unknown>, NetBIOS MAC: f0:03:8c:09:c6:c9 (AzureWave Technology)
| smb-os-discovery: 
|   OS: Windows 10 Home China 10586 (Windows 10 Home China 6.3)
|   OS CPE: cpe:/o:microsoft:windows_10::-
|   Computer name: DESKTOP-ME19QK1
|   NetBIOS computer name: DESKTOP-ME19QK1\x00
|   Workgroup: WORKGROUP\x00
|_  System time: 2018-09-27T16:27:43+08:00
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2018-09-27 04:27:43
|_  start_date: 2018-09-24 08:00:45

TRACEROUTE
HOP RTT      ADDRESS
1   44.42 ms 192.168.124.3

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 79.39 seconds

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43

SYN扫描(-sS),也被称为 “半开连接”或者 “SYN stealth”。nmap发送syn包后等待回应,如果接受SYS/ACK包说明端口开放,如果收到RST包,说明端口关闭,如果没有回应或者回应icmp不可达错误信息,则说明端口被过滤。

nmap -sS IP

    1

NULL扫描

nmap -sN IP

    1

探测服务版本

nmap -sV IP
————————————————
版权声明:本文为CSDN博主「孤君」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Wu000999/article/details/82859621

注明:所有转载内容皆直接从被转载文章网页的标题和内容的文本中复制而来

CC 4.0 BY-SA 版权协议网址:https://creativecommons.org/licenses/by-sa/4.0/deed.z
站主补充:
案例一:扫描某一台服务器的所有 UDP 端口
# nmap -sU 192.168.1.1 -Pn

(补充:这里以扫描 192.168.1.1 为例,这里的 -Pn 是指不测试 icmp 而直接测试端口)

案例二:扫描某一台服务器的所有 TCP 端口
# nmap -sT 192.168.1.1 -Pn

(补充:这里以扫描 192.168.1.1 为例,这里的 -Pn 是指不测试 icmp 而直接测试端口)

案例三:扫描某一台服务器某一个 UDP 端口
# nmap -sU 192.168.1.1 -p 161 -Pn

(补充:这里以扫描 192.168.1.1 为例,这里的 -Pn 是指不测试 icmp 而直接测试端口)

案例四:扫描某一台服务器某一个 TCP 端口
# nmap -sU 192.168.1.1 -t 443 -Pn

(补充:这里以扫描 192.168.1.1 为例,这里的 -Pn 是指不测试 icmp 而直接测试端口)

案例五:扫描某一台服务器多个 TCP 端口
# nmap -sU 192.168.1.1 -t 1-65535 -Pn

(补充:这里以扫描 192.168.1.1 为例,这里的 -Pn 是指不测试 icmp 而直接测试端口)

案例六:扫描多个 IP 地址
6.1 一次性扫描多个 IP 地址
# nmap 192.168.1.1 192.168.1.2 192.168.1.3

或者:

# nmap 192.168.1.1,2,3

或者:

# nmap 192.168.1.1-3

(补充:这里以扫描 192.168.1.1、192.168.1.2、192.168.1.3 为例)

6.2 扫描某一个网段

# nmap 192.168.1.0/24

(补充:这里以扫描 192.168.1.0 网段为例)

6.3 扫描某一个文件里记录的 IP 地址
# cat ip_list.txt
192.168.1.1
192.168.1.2
# nmap -iL ip_list.txt 

(补充:这里以扫描 ip_list.txt 文本里 192.168.1.1 和 192.168.1.2 IP 地址为例)

案例七:扫描时排除 IP 地址
7.1 扫描时排除某一个 IP 地址
# nmap 192.168.1.1-192.168.1.5 --exclude 192.168.1.3

(补充:这里以扫描 192.168.1.1 到 192.168.1.5 但排除 192.168.1.3 为例)

7.1 扫描时排除多个 IP 地址
# nmap 192.168.1.1-192.168.1.5 --exclude 192.168.1.3,192.168.1.4

或者:

# nmap 192.168.1.1-192.168.1.5 --exclude 192.168.1.3,4

或者:

# nmap 192.168.1.1-192.168.1.5 --exclude 192.168.1.3-4

(补充:这里以扫描 192.168.1.1 到 192.168.1.5 但排除 192.168.1.3 和 192.168.1.4 为例)

6.3 扫描时排除某一个文件里记录的 IP 地址
# cat ip_list.txt
192.168.1.3
192.168.1.4
# nmap 192.168.1.1-192.168.1.5 --excludefile ip_list.txt 

(补充:这里以扫描 192.168.1.1 到 192.168.1.5,但是排除 ip_list.txt 文本里 192.168.1.1 和 192.168.1.2 IP 地址为例)

[内容] Linux 路由转发的设置

注意:

openSUSE&SUSE 搭配 docker 环境可能只能使用永久路由转发才会实现路由转发

内容目录:

内容一:临时路由转发的设置
1.1 临时开启路由转发
1.2 临时停止路由转发

内容二:永久路由转发的设置
2.1 永久开启路由转发
2.2 永久关闭路由转发
2.3 让路由转发的永久设置立刻生效的方法

内容三:查看当前路由转发的状态

具体的内容:

内容一:临时路由转发的设置
1.1 临时开启路由转发

# echo 1 > /proc/sys/net/ipv4/ip_forward

或者:

# sysctl -w net.ipv4.ip_forward=1

1.2 临时停止路由转发

# echo 0 > /proc/sys/net/ipv4/ip_forward

或者:

# sysctl -w net.ipv4.ip_forward=0

内容二:永久路由转发的设置
2.1 永久开启路由转发

# vim /etc/sysctl.conf

添加以下内容:

......
net.ipv4.ip_forward = 1

(注意:对路由转发进行了永久设置了以后它不会立刻生效,只会在重启后生效)

2.2 永久关闭路由转发

# vim /etc/sysctl.conf

添加以下内容:

......
net.ipv4.ip_forward = 0

(注意:对路由转发进行了永久设置了以后它不会立刻生效,只会在重启后生效)

2.3 让路由转发的永久设置立刻生效的方法

# sysctl -p /etc/sysctl.conf

内容三:查看当前路由转发的状态

# cat /proc/sys/net/ipv4/ip_forward


补充:
如果返回的结果是 1 则代表已经生效
如果返回的结果是 0 则代表没有生效

(注意:此种方法可能不能检验 openSUSE&SUSE 搭配 docker 的环境)

[内容] CentOS&RHEL yum 的使用 (设置代理)

内容一:设置所有 yum 源网络代理的方法

# vim /etc/yum.conf

添加以下内容:

......
proxy=http://<user>:<password>@<IP address>:<port>/


注意:
1) 如果没有用户和密码就写成 proxy=http://<IP address>:<port>/
2) 如果密码中也有一个 “@” 符号,则需要把 “@” 符号转义一下,转义成 %40

或者:

# vim /etc/yum.conf

添加以下内容:

......
proxy=http:<IP address>:<port>
proxy_username=<user>
proxy_password=<password>

(注意:如果没有用户和密码就不写后面两行)

内容二:单独设置某个 yum 源网络代理的方法

# vim /etc/yum.repos.d/<yum source file name prefix>.repo

添加以下内容:

......
proxy=http://<user>:<password>@<IP address>:<port>/
......


注意:
1) 如果没有用户和密码就写成 proxy=http://<IP address>:<port>/
2) 如果密码中也有一个 “@” 符号,则需要把 “@” 符号转义一下,转义成 %40

或者:

# vim /etc/yum.repos.d/<yum source file name prefix>.repo

添加以下内容:

......
proxy=http://<IP address>:<port>
proxy_username=<user>
proxy_password=<password>

(注意:如果没有用户和密码就不写后面两行)

[命令] Linux 命令 firewall-cmd (设置防火墙)

内容目录:

内容一:防火墙信息查询
1.1 防火墙运行状态查询
1.2 防火墙默认信息查询
1.2.1 查看防火墙的所有区域
1.2.2 查看防火墙支持的所有服务
1.2.3 查看防火墙支持的所有 icmp 协议
1.3 查看防火墙当前所在的区域
1.4 查看防火墙的策略
1.4.1 查看防火墙当前所在的区域的所有策略
1.4.2 查看所有区域的所有策略
1.4.3 查看某一个区域的策略
1.4.3.1 查看某一个区域的策略的格式
1.4.3.2 查看某一个区域的策略的案例

内容二: 区域的网卡管理
2.1 查看网卡所在的区域
2.1.1 查看哪些区域处于激活状态
2.1.2 查看某一个网卡所属的区域
2.1.2.1 查看某一个网卡所属的区域的格式
2.1.2.2 查看某一个网卡所属的区域的案例
2.2 将某一个网卡放入某一个区域
2.2.1 将某一个网卡放入某一个区域的格式
2.2.2 将某一个网卡放入某一个区域的案例
2.3 将某一个网卡从某一个区域删除
2.3.1 将某一个网卡从某一个区域删除的格式
2.3.2 将某一个网卡从某一个区域删除的案例

内容三:防火墙区域设置
3.1 查看防火墙目前所在的区域
3.2 指定防火墙的区域
3.2.1 指定防火墙的区域的格式
3.2.2 指定防火墙的区域的案例

内容四:防火墙暂时策略设置(防火墙重启后失效)
4.1 开放策略相关
4.1.1 暂时开放端口
4.1.1.1 暂时在防火墙当前所在区域里开放某一个端口
4.1.1.1.1 暂时在防火墙当前所在区域里开放某一个端口的格式
4.1.1.1.2 暂时在防火墙当前所在区域里开放某一个端口的案例
4.1.1.2 暂时在防火墙当前所在区域里开放某一个服务的所有端口
4.1.1.2.1 暂时在防火墙当前所在区域里开放某一个服务的所有端口的格式
4.1.1.2.2 暂时在防火墙当前所在区域里开放某一个服务的所有端口的案例
4.1.1.3 暂时在防火墙当前所在区域里对某个网段开放某一个端口
4.1.1.3.1 暂时在防火墙当前所在区域里对某个网段开放某一个端口的格式
4.1.1.3.2 暂时在防火墙当前所在区域里对某个网段开放某一个端口的案例
4.1.1.4 暂时在防火墙当前所在区域里对某一个 IP 地址开放多个端口
4.1.1.4.1 暂时在防火墙当前所在区域里对某一个 IP 地址开放多个端口的格式
4.1.1.4.2 暂时在防火墙当前所在区域里对某一个 IP 地址开放多个端口的案例
4.1.1.5 暂时在防火墙当前所在区域里对除了某一个 IP 地址外的 IP 地址开放多个端口
4.1.1.5.1 暂时在防火墙当前所在区域里对除了某一个 IP 地址外的 IP 地址开放多个端口的格式
4.1.1.5.2 暂时在防火墙当前所在区域里对除了某一个 IP 地址外的 IP 地址开放多个端口的案例
4.1.2 暂时关闭已开放的端口
4.1.2.1 暂时在防火墙当前所在区域里关闭已开放的某一个端口
4.1.2.1.1 暂时在防火墙当前所在区域里关闭已开放的某一个端口的格式
4.1.2.1.2 暂时在防火墙当前所在区域里关闭已开放的某一个端口的案例
4.1.2.2 暂时在防火墙当前所在区域里关闭已开放的某一个服务的所有端口
4.1.2.2.1 暂时在防火墙当前所在区域里关闭已开放的某一个服务的所有端口的格式
4.1.2.2.2 暂时在防火墙当前所在区域里关闭已开放的某一个服务的所有端口的案例
4.1.2.3 暂时在防火墙当前所在区域里关闭已开放的对某个网段开放某一个端口
4.1.2.3.1 暂时在防火墙当前所在区域里关闭已开放的对某个网段开放某一个端口的格式
4.1.2.3.2 暂时在防火墙当前所在区域里关闭已开放的对某个网段开放的某一个端口的案例
4.1.2.4 暂时在防火墙当前所在区域里关闭已开放的对某一个 IP 地址开放的多个端口
4.1.2.4.1 暂时在防火墙当前所在区域里关闭已开放的对某一个 IP 地址开放的多个端口的格式
4.1.2.4.2 暂时在防火墙当前所在区域里关闭已开放的对某一个 IP 地址开放的多个端口的案例
4.1.2.5 暂时在防火墙当前所在区域里关闭对除了某一个 IP 地址外的 IP 地址开放多个端口
4.1.2.5.1 暂时在防火墙当前所在区域里对除了某一个 IP 地址外的 IP 地址开放多个端口的格式
4.1.2.5.2 暂时在防火墙当前所在区域里关闭对除了某一个 IP 地址外的 IP 地址开放多个端口的案例
4.2 拒绝策略相关
4.2.1 暂时拒绝端口
4.2.1.1 暂时在防火墙当前所在区域里对某个网段拒绝某一个端口
4.2.1.1.1 暂时在防火墙当前所在区域里对某个网段拒绝某一个端口的格式
4.2.1.1.2 暂时在防火墙当前所在区域里对某个网段拒绝某一个端口的案例
4.2.1.2 暂时在防火墙当前所在区域里对某一个 IP 地址拒绝多个端口
4.2.1.2.1 暂时在防火墙当前所在区域里对某个网段拒绝某一个端口的格式
4.2.1.2.2 暂时在防火墙当前所在区域里对某个网段拒绝某一个端口的案例
4.2.1.2 暂时在防火墙当前所在区域里对除了某一个 IP 地址外的 IP 地址拒绝多个端口
4.2.1.2.1 暂时在防火墙当前所在区域里对除了某一个 IP 地址外的 IP 地址拒绝多个端口的格式
4.2.1.2.2 暂时在防火墙当前所在区域里对除了某一个 IP 地址外的 IP 地址拒绝多个端口的案例
4.2.2 暂时撤销已拒绝端口
4.2.2.1 暂时在防火墙当前所在区域里撤销已设置的对某个网段拒绝某一个端口
4.2.2.1.1 暂时在防火墙当前所在区域里撤销已设置的对某个网段拒绝某一个端口的格式
4.2.2.1.2 暂时在防火墙当前所在区域里撤销撤销已设置的对某个网段拒绝某一个端口的案例
4.2.2.2 暂时在防火墙当前所在区域里撤销已设置的对某一个 IP 地址拒绝多个端口
4.2.2.2.1 暂时在防火墙当前所在区域里撤销已设置的对某个网段拒绝某一个端口的格式
4.2.2.1.2 暂时在防火墙当前所在区域里撤销已设置的对某个网段拒绝某一个端口的案例
4.2.3.2 暂时在防火墙当前所在区域里撤销已设置的对除了某一个 IP 地址外的 IP 地址拒绝多个端口
4.2.3.2.1 暂时在防火墙当前所在区域里撤销已设置的对除了某一个 IP 地址外的 IP 地址拒绝多个端口的格式
4.2.2.3.2 暂时在防火墙当前所在区域里撤销已设置的对除了某一个 IP 地址外的 IP 地址拒绝多个端口的案例
4.3 转发策略相关
4.3.1 开启防火墙转发策略
4.3.2 暂时在防火墙当前所在区域里开启一个端口跳转到另一个 IP 地址的另一个端口
4.3.2.1 暂时在防火墙当前所在区域里开启一个端口跳转到另一个 IP 地址的另一个端口的格式
4.3.2.2 暂时在防火墙当前所在区域里开启一个端口跳转到另一个 IP 地址的另一个端口的案例
4.3.3 暂时在防火墙当前所在区域里关闭已开放的一个端口跳转到另一个 IP 地址的另一个端口
4.3.3.1 暂时在防火墙当前所在区域里关闭已开放的一个端口跳转到另一个 IP 地址的另一个端口的格式
4.3.3.2 暂时在防火墙当前所在区域里关闭已开放的一个端口跳转到另一个 IP 地址的另一个端口的案例

内容五:防火墙暂时禁止 icmp 的设置
5.1 防火墙暂时禁止 icmp
5.2 防火墙暂时取消禁止 icmp

内容六:防火墙暂时禁止所有网络的设置
6.1 让防火墙暂时进入拒绝模式
6.2 取消防火墙的拒绝模式
6.3 查看防火墙目前的状态

内容七:将防火墙暂时策略的设置方法转换成永久策略和限时策略的设置方法
7.1 防火墙暂时策略的设置方法
7.2 防火墙永久策略的设置
7.3 防火墙限时策略的设置

内容八:防火墙策略的加载
8.1 使用防火墙命令加载策略
8.2 在系统层面上重启防火墙以加载策略

相关链接:与 firewall-cmd 相关的 shell 脚本

具体的内容:

内容一:防火墙信息查询
1.1 防火墙运行状态查询

# firewall-cmd –state

1.2 防火墙默认信息查询
1.2.1 查看防火墙的所有区域

# firewall-cmd --get-zones

1.2.2 查看防火墙支持的所有服务

# firewall-cmd --get-services

1.2.3 查看防火墙支持的所有 icmp 协议

# firewall-cmd --get-icmptypes

1.3 查看防火墙当前所在的区域

# firewall-cmd --get-default-zone

1.4 查看防火墙的策略
1.4.1 查看防火墙当前所在的区域的所有策略

# firewall-cmd --list-all

1.4.2 查看所有区域的所有策略

# firewall-cmd --list-all-zones

1.4.3 查看某一个区域的策略
1.4.3.1 查看某一个区域的策略的格式

# firewall-cmd --zone=<zone> --list-all

1.4.3.2 查看某一个区域的策略的案例

# firewall-cmd --zone=public --list-all

内容二: 区域的网卡管理
2.1 查看网卡所在的区域
2.1.1 查看哪些区域处于激活状态

# firewall-cmd --get-active-zones

(注意:只有放入了显卡的区域才会处于激活状态)

2.1.2 查看某一个网卡所属的区域
2.1.2.1 查看某一个网卡所属的区域的格式

# firewall-cmd –get-zone-of-interface=<network card>

2.1.2.2 查看某一个网卡所属的区域的案例

# firewall-cmd --get-zone-of-interface=eth0

(补充:这里以往区域里加入 eth0 网卡为例)

2.2 将某一个网卡放入某一个区域
2.2.1 将某一个网卡放入某一个区域的格式

# firewall-cmd --zone=<zone> --add-interface=<network card>

2.2.2 将某一个网卡放入某一个区域的案例

# firewall-cmd --zone=public --add-interface=eth0

(补充:这里以往 public 区域里加入 eth0 网卡为例)

2.3 将某一个网卡从某一个区域删除
2.3.1 将某一个网卡从某一个区域删除的格式

# firewall-cmd --zone=<zone> --remove-interface=<network card>

2.3.2 将某一个网卡从某一个区域删除的案例

# firewall-cmd --zone=public --remove-interface=eth0

(补充:这里以从 public 区域删除 eth0 网卡为例)

内容三:防火墙区域设置
3.1 查看防火墙目前所在的区域

# firewall-cmd --get-default

3.2 指定防火墙的区域
3.2.1 指定防火墙的区域的格式

# firewall-cmd --set-default=<zone>

3.2.2 指定防火墙的区域的案例

# firewall-cmd --set-default=public

(补充:这里以将默认区域设置为 public 为例)

内容四:防火墙暂时策略设置(防火墙重启后失效)

(注意:防火墙的规则没有现后之分,但是拒绝规则永远高于允许规则)

4.1 开放策略相关
4.1.1 暂时开放端口
4.1.1.1 暂时在防火墙当前所在区域里开放某一个端口
4.1.1.1.1 暂时在防火墙当前所在区域里开放某一个端口的格式

# firewall-cmd --add-port=<port>/tcp

4.1.1.1.2 暂时在防火墙当前所在区域里开放某一个端口的案例

# firewall-cmd --add-port=80/tcp

(补充:这里以暂时添加 80/TCP 端口为例)

4.1.1.2 暂时在防火墙当前所在区域里开放某一个服务的所有端口
4.1.1.2.1 暂时在防火墙当前所在区域里开放某一个服务的所有端口的格式

# firewall-cmd --add-service=<service>

4.1.1.2.2 暂时在防火墙当前所在区域里开放某一个服务的所有端口号的案例

# firewall-cmd --add-service=http

(补充:这里以暂时添加 http 服务为例)

4.1.1.3 暂时在防火墙当前所在区域里对某个网段开放某一个端口
4.1.1.3.1 暂时在防火墙当前所在区域里对某个网段开放某一个端口的格式

# firewall-cmd --add-rich-rule="rule family="<network protocol>" source address="<network segment>/<subnet mask>" port protocol="<port protocol>" port="<port>" accept"

4.1.1.3.2 暂时在防火墙当前所在区域里对某个网段开放某一个端口的案例

# firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="80" accept"

(补充:这里以暂时对 192.168.1.0/24 开放 80/tcp 端口为例)

4.1.1.4 暂时在防火墙当前所在区域里对某一个 IP 地址开放多个端口
4.1.1.4.1 暂时在防火墙当前所在区域里对某一个 IP 地址开放多个端口的格式

# firewall-cmd --add-rich-rule="rule family="<network protocol>" source address="<IP address>" port protocol="<port protocol>" port="<starting port>-<end port>" accept"

4.1.1.4.2 暂时在防火墙当前所在区域里对某一个 IP 地址开放多个端口的案例

# firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="0-65535" accept"

(补充:这里以暂时对 192.168.1.1 开放 0/tcp 到 65535/tcp 端口为例)

4.1.1.5 暂时在防火墙当前所在区域里对除了某一个 IP 地址外的 IP 地址开放多个端口
4.1.1.5.1 暂时在防火墙当前所在区域里对除了某一个 IP 地址外的 IP 地址开放多个端口的格式

# firewall-cmd --add-rich-rule="rule family="<network protocol>" source NOT address="<IP address>" port protocol="<port protocol>" port="<starting port>-<end port>" accept"

4.1.1.5.2 暂时在防火墙当前所在区域里对除了某一个 IP 地址外的 IP 地址开放多个端口的案例

# firewall-cmd --add-rich-rule="rule family="ipv4" source NOT address="192.168.1.1" port protocol="tcp" port="0-65535" accept"

(补充:这里以暂时对非 192.168.1.1 开放 0/tcp 到 65535/tcp 端口为例)

4.1.2 暂时关闭已开放的端口
4.1.2.1 暂时在防火墙当前所在区域里关闭已开放的某一个端口
4.1.2.1.1 暂时在防火墙当前所在区域里关闭已开放的某一个端口的格式

# firewall-cmd --remove-port=<port>/tcp

4.1.2.1.2 暂时在防火墙当前所在区域里关闭已开放的某一个端口的案例

# firewall-cmd --remove-port=80/tcp

(补充:这里以暂时关闭 80/TCP 端口为例)

4.1.2.2 暂时在防火墙当前所在区域里关闭已开放的某一个服务的所有端口
4.1.2.2.1 暂时在防火墙当前所在区域里关闭已开放的某一个服务的所有端口的格式

# firewall-cmd --remove-service=<service>

4.1.2.2.2 暂时在防火墙当前所在区域里关闭已开放的某一个服务的所有端口号的案例

# firewall-cmd --remove-service=http

(补充:这里以暂时关闭 http 服务为例)

4.1.2.3 暂时在防火墙当前所在区域里关闭已开放的对某个网段开放某一个端口
4.1.2.3.1 暂时在防火墙当前所在区域里关闭已开放的对某个网段开放某一个端口的格式

# firewall-cmd --remove-rich-rule="rule family="ipv4" source address="<network segment>/<subnet mask>" port protocol="<port protocol>" port="<port>" accept"

4.1.2.3.2 暂时在防火墙当前所在区域里关闭已开放的对某个网段开放的某一个端口的案例

# firewall-cmd --remove-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="80" accept"

(补充:这里以暂时对 192.168.1.0/24 关闭 80/tcp 端口为例)

4.1.2.4 暂时在防火墙当前所在区域里关闭已开放的对某一个 IP 地址开放的多个端口
4.1.2.4.1 暂时在防火墙当前所在区域里关闭已开放的对某一个 IP 地址开放的多个端口的格式

# firewall-cmd --remove-rich-rule="rule family="ipv4" source address="<IP address>" port protocol="<port protocol>" port="<starting port>-<end port>" accept"

4.1.2.4.2 暂时在防火墙当前所在区域里关闭已开放的对某一个 IP 地址开放的多个端口的案例

# firewall-cmd --remove-rich-rule="rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="0-65535" accept"

(补充:这里以暂时对 192.168.1.1 关闭 0/tcp 到 65535/tcp 端口为例)

4.1.2.5 暂时在防火墙当前所在区域里关闭对除了某一个 IP 地址外的 IP 地址开放多个端口
4.1.2.5.1 暂时在防火墙当前所在区域里对除了某一个 IP 地址外的 IP 地址开放多个端口的格式

# firewall-cmd --remove-rich-rule="rule family="<network protocol>" source NOT address="<IP address>" port protocol="<port protocol>" port="<starting port>-<end port>" accept"

4.1.2.5.2 暂时在防火墙当前所在区域里关闭对除了某一个 IP 地址外的 IP 地址开放多个端口的案例

# firewall-cmd --remove-rich-rule="rule family="ipv4" source NOT address="192.168.1.1" port protocol="tcp" port="0-65535" accept"

(补充:这里以暂时对非 192.168.1.1 关闭 0/tcp 到 65535/tcp 端口为例)

4.2 拒绝策略相关
4.2.1 暂时拒绝端口
4.2.1.1 暂时在防火墙当前所在区域里对某个网段拒绝某一个端口
4.2.1.1.1 暂时在防火墙当前所在区域里对某个网段拒绝某一个端口的格式

# firewall-cmd --zone=public --add-rich-rule="rule family="<network protocol>" source address="<network segment>/<subnet mask>" port protocol="<port protocol>" port="<port>" drop"

或者:

# firewall-cmd --zone=public --add-rich-rule="rule family="<network protocol>" source address="<network segment>/<subnet mask>" port protocol="<port protocol>" port="<port>" reject"

(补充:这里 drop 和 reject 的区别是 drop 收到数据包后直接丢掉不给发送方任何回应,而 drop 收到数据包后会给发送方发送一个拒绝的回应)

4.2.1.1.2 暂时在防火墙当前所在区域里对某个网段拒绝某一个端口的案例

# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol=tcp port=80 drop"

或者:

# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol=tcp port=80 reject"


补充:
1) 这里以在 public 区域拒绝 192.168.1.0/24 访问 80/tcp 端口为例
2) 这里 drop 和 reject 的区别是 drop 收到数据包后直接丢掉不给发送方任何回应,而 drop 收到数据包后会给发送方发送一个拒绝的回应

4.2.1.2 暂时在防火墙当前所在区域里对某一个 IP 地址拒绝多个端口
4.2.1.2.1 暂时在防火墙当前所在区域里对某个网段拒绝某一个端口的格式

# firewall-cmd --zone=public --add-rich-rule="rule family="<network protocol>" source address="<IP address>" port protocol="<port protocol>" port="<starting port>-<end port>" drop"

或者:

# firewall-cmd --zone=public --add-rich-rule="rule family="<network protocol>" source address="<IP address>" port protocol="<port protocol>" port="<starting port>-<end port>" reject"

(补充:这里 drop 和 reject 的区别是 drop 收到数据包后直接丢掉不给发送方任何回应,而 drop 收到数据包后会给发送方发送一个拒绝的回应)

4.2.1.2.2 暂时在防火墙当前所在区域里对某个网段拒绝某一个端口的案例

# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.1.1" port protocol=tcp port="0-65535" drop"

或者:

# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.1.1" port protocol=tcp port="0-65535" reject"


补充:
1) 这里以在 public 区域拒绝 192.168.1.1 访问 0/tcp 到 65536/tcp 端口为例
2) 这里 drop 和 reject 的区别是 drop 收到数据包后直接丢掉不给发送方任何回应,而 drop 收到数据包后会给发送方发送一个拒绝的回应

4.2.1.2 暂时在防火墙当前所在区域里对除了某一个 IP 地址外的 IP 地址拒绝多个端口
4.2.1.2.1 暂时在防火墙当前所在区域里对除了某一个 IP 地址外的 IP 地址拒绝多个端口的格式

# firewall-cmd --add-rich-rule="rule family="<network protocol>" source NOT address="<IP address>" port protocol="<port protocol>" port="<starting port>-<end port>" accept"

或者:

# firewall-cmd --add-rich-rule="rule family="<network protocol>" source NOT address="<IP address>" port protocol="<port protocol>" port="<starting port>-<end port>" reject"

(补充:这里 drop 和 reject 的区别是 drop 收到数据包后直接丢掉不给发送方任何回应,而 drop 收到数据包后会给发送方发送一个拒绝的回应)

4.2.1.2.2 暂时在防火墙当前所在区域里对除了某一个 IP 地址外的 IP 地址拒绝多个端口的案例

# firewall-cmd --add-rich-rule="rule family="ipv4" source NOT address="192.168.1.1" port protocol="tcp" port="0-65535" accept"

或者:

# firewall-cmd --add-rich-rule="rule family="ipv4" source NOT address="192.168.1.1" port protocol="tcp" port="0-65535" accept"


补充:
1) 这里以拒绝非 192.168.1.1 访问 0/tcp 到 65536/tcp 端口为例
2) 这里 drop 和 reject 的区别是 drop 收到数据包后直接丢掉不给发送方任何回应,而 drop 收到数据包后会给发送方发送一个拒绝的回应

4.2.2 暂时撤销已拒绝端口
4.2.2.1 暂时在防火墙当前所在区域里撤销已设置的对某个网段拒绝某一个端口
4.2.2.1.1 暂时在防火墙当前所在区域里撤销已设置的对某个网段拒绝某一个端口的格式

# firewall-cmd --zone=public --add-rich-rule="rule family="<network protocol>" source address="<network segment>/<subnet mask>" port protocol="<port protocol>" port="<port>" drop"

或者:

# firewall-cmd --zone=public --add-rich-rule="rule family="<network protocol>" source address="<network segment>/<subnet mask>" port protocol="<port protocol>" port="<port>" reject"

(补充:这里 drop 和 reject 的区别是 drop 收到数据包后直接丢掉不给发送方任何回应,而 drop 收到数据包后会给发送方发送一个拒绝的回应)

4.2.2.1.2 暂时在防火墙当前所在区域里撤销撤销已设置的对某个网段拒绝某一个端口的案例

# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol=tcp port=80 drop"

或者:

# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol=tcp port=80 reject"


补充:
1) 这里以取消在 public 区域拒绝 192.168.1.1 访问 0/tcp 到 65536/tcp 端口为例
2) 这里 drop 和 reject 的区别是 drop 收到数据包后直接丢掉不给发送方任何回应,而 drop 收到数据包后会给发送方发送一个拒绝的回应

4.2.2.2 暂时在防火墙当前所在区域里撤销已设置的对某一个 IP 地址拒绝多个端口
4.2.2.2.1 暂时在防火墙当前所在区域里撤销已设置的对某个网段拒绝某一个端口的格式

# firewall-cmd --zone=public --add-rich-rule="rule family="<network protocol>" source address="<IP address>" port protocol="<port protocol>" port="<starting port>-<end port>" drop"

或者:

# firewall-cmd --zone=public --add-rich-rule="rule family="<network protocol>" source address="<IP address>" port protocol="<port protocol>" port="<starting port>-<end port>" reject"

(补充:这里 drop 和 reject 的区别是 drop 收到数据包后直接丢掉不给发送方任何回应,而 drop 收到数据包后会给发送方发送一个拒绝的回应)

4.2.2.1.2 暂时在防火墙当前所在区域里撤销已设置的对某个网段拒绝某一个端口的案例

# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.1.1" port protocol=tcp port="0-65535" drop"

或者:

# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.1.1" port protocol=tcp port="0-65535" reject"


补充:
1) 这里以取消拒绝 192.168.1.1 访问 0/tcp 到 65536/tcp 端口为例
2) 这里 drop 和 reject 的区别是 drop 收到数据包后直接丢掉不给发送方任何回应,而 drop 收到数据包后会给发送方发送一个拒绝的回应

4.2.3.2 暂时在防火墙当前所在区域里撤销已设置的对除了某一个 IP 地址外的 IP 地址拒绝多个端口
4.2.3.2.1 暂时在防火墙当前所在区域里撤销已设置的对除了某一个 IP 地址外的 IP 地址拒绝多个端口的格式

# firewall-cmd --add-rich-rule="rule family="<network protocol>" source NOT address="<IP address>" port protocol="<port protocol>" port="<starting port>-<end port>" accept"

或者:

# firewall-cmd --add-rich-rule="rule family="<network protocol>" source NOT address="<IP address>" port protocol="<port protocol>" port="<starting port>-<end port>" reject"

(补充:这里 drop 和 reject 的区别是 drop 收到数据包后直接丢掉不给发送方任何回应,而 drop 收到数据包后会给发送方发送一个拒绝的回应)

4.2.2.3.2 暂时在防火墙当前所在区域里撤销已设置的对除了某一个 IP 地址外的 IP 地址拒绝多个端口的案例

# firewall-cmd --add-rich-rule="rule family="ipv4" source NOT address="192.168.1.1" port protocol="tcp" port="0-65535" accept"

或者:

# firewall-cmd --add-rich-rule="rule family="ipv4" source NOT address="192.168.1.1" port protocol="tcp" port="0-65535" accept"


补充:
1) 这里以取消拒绝非 192.168.1.1 访问 0/tcp 到 65536/tcp 端口为例
2) 这里 drop 和 reject 的区别是 drop 收到数据包后直接丢掉不给发送方任何回应,而 drop 收到数据包后会给发送方发送一个拒绝的回应

4.3 转发策略相关
4.3.1 开启防火墙转发策略

# firewall-cmd --add-masquerade --permanent

(注意:只有开启了防火墙转发策略之后防火墙才能转发端口)

4.3.2 暂时在防火墙当前所在区域里开启一个端口跳转到另一个 IP 地址的另一个端口
4.3.2.1 暂时在防火墙当前所在区域里开启一个端口跳转到另一个 IP 地址的另一个端口的格式

# firewall-cmd --add-forward-port=port=<port>:proto=<port protocol>:toport=<port>:toaddr=<IP address>

4.3.2.2 暂时在防火墙当前所在区域里开启一个端口跳转到另一个 IP 地址的另一个端口的案例

# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.1

(补充:这里以将本地的 80 端口转向 192.168.1.1 的 8080 端口为例)

4.3.3 暂时在防火墙当前所在区域里关闭已开放的一个端口跳转到另一个 IP 地址的另一个端口
4.3.3.1 暂时在防火墙当前所在区域里关闭已开放的一个端口跳转到另一个 IP 地址的另一个端口的格式

# firewall-cmd --remove-forward-port=port=<port>:proto=<port protocol>:toport=<port>:toaddr=<IP address>

4.3.3.2 暂时在防火墙当前所在区域里关闭已开放的一个端口跳转到另一个 IP 地址的另一个端口的案例

# firewall-cmd --remove-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.1

(补充:这里以取消将本地的 80 端口转向 192.168.1.1 的 8080 端口为例)

内容五:防火墙暂时禁止 icmp 的设置
5.1 防火墙暂时禁止 icmp

# firewall-cmd --add-rich-rule='rule protocol value=icmp drop'

5.2 防火墙暂时取消禁止 icmp

# firewall-cmd --remove-rich-rule='rule protocol value=icmp drop'

内容六:防火墙暂时禁止所有网络的设置
6.1 让防火墙暂时进入拒绝模式

# firewall-cmd –panic-on

6.2 取消防火墙的拒绝模式

# firewall-cmd –panic-off

6.3 查看防火墙目前的状态

# firewall-cmd –query-panic

内容七:将防火墙暂时策略的设置方法转换成永久策略和限时策略的设置方法
7.1 防火墙暂时策略的设置方法

和内容一、内容二、内容三、内容四里的大部分设置命令一样,例

# firewall-cmd --add-port=80/tcp

(补充:这里以临时添加 80/tcp 端口为例)

7.2 防火墙永久策略的设置

和内容一、内容二、内容三、内容四里的大部分设置命令一样,但是需要在后面添加 –permanent 参数,例

# firewall-cmd --add-port=80/tcp --permanent

(补充:这里以永久添加 80/tcp 端口为例)

(注意:永久策略设置后,防火墙要重新加载才会生效)

7.3 防火墙限时策略的设置

和内容一、内容二、内容三、内容四的大部分设置命令一样,但是需要在后面添加 –timeout=<秒> 参数,列

# firewall-cmd --add-port=80/tcp --timeout=3600

(补充:这里以在 3600 秒期间添加 80/tcp 端口为例)

(注意:此策略会在 3600 秒后失效)

内容八:防火墙策略的加载
8.1 使用防火墙命令加载策略

# firewall-cmd --reload

(注意:此时暂时策略会失效,永久策略会生效)

8.2 在系统层面上重启防火墙以加载策略

# systemctl retart firewalld

(注意:此时暂时策略会失效,永久策略会生效)

相关链接:与 firewall-cmd 相关的 shell 脚本

Shell 在 firewalld 防火墙上批量对多个 IP 地址开发多个端口号

Shell 在 firewalld 防火墙上开放所有正在处于监听状态的端口号

Shell 在 firewalld 防火墙上取消所有已设置的复杂端口号策略

Shell 在 firewalld 防火墙上取消所有已开放的端口号

[工具] Shell 批量检测服务器 TCP 端口的联通状态 (telnet 版)

介绍:

作者:朱明宇
名称:批量检测服务器 TCP 端口的联通状态
作用:批量检测服务器 TCP 端口的联通状态,并将此服务器无法联通的端口存储到 $checklist 文件里

使用方法:
1. 将此脚本和端口清单 $portlist 文件放在同一目录下
2. 端口清单 $portlist 每一个端口占用一行,格式为:<要联通端口号对应的 IP 地址>:<要联通的端口号>:<端口功能>,并和此脚本放在同一目录下
3. 在此脚本的分割线内写入相应的内容
4. 给此脚本添加执行权限
5. 执行此脚本,并将要测试的服务器 IP 地址跟在脚本的后面,例:. <脚本名> <服务器 IP 地址 1> <服务器 IP 地址 2> ……

脚本分割线里的变量:
1. portlist=tcp_ports.txt #存放要测试的 TCP 端口的文件
2. checklist=tcp_ports_checklist.txt #存放测试结果的文件

注意:
1. 此脚本执行前必须要先保证执行本脚本的用户能无密码 ssh 远程这些远程服务器
2. 此脚本会清空 $checklist
3. 执行此脚本前确保 telnet 命令已经安装
4. 执行此脚本可能有些慢

脚本:

#!/bin/bash

####################### Separator ########################

portlist=tcp_ports.txt
checklist=tcp_ports_checklist.txt

####################### Separator ########################

echo  > $checklist
maxnum=`cat $portlist | wc -l`

for hosts in $*
do

        echo $hosts >> $checklist

        for i in `seq 1 $maxnum`
        do

                ips=`sed -n $[i]p $portlist | awk -F':' '{print $1}'`
                ports=`sed -n $[i]p $portlist | awk -F':' '{print $2}'`
                remarks=`sed -n $[i]p $portlist | awk -F':' '{print $3}'`

                ssh $hosts "(sleep 1;) | telnet $ips $ports 2>&1" | grep 'timed out' >> $checklist

                if [ $? == 0 ];then
                        echo "`sed -n $[i]p $portlist`" >> $checklist
                        echo >> $checklist
                fi

        done

        echo >> $checklist

done