准备环境

  1. Nmap

Nmap用于允许系统管理员查看一个大的网络系统有哪些主机,以及其上运行何种服务。它支持多种协议的扫描,如UDP、TCP connect()、TCP SYN(half open)、ftp proxy(bounce attack)、Reverse-ident、ICMP(ping sweep)、FIN、ACK sweep、Xmas Tree、SYN sweep和Null扫描。Nmap还提供了一些实用功能,比如通过TCP/IP来甄别操作系统类型、秘密扫描、动态延迟和重发、平行扫描,通过并行的ping监测下属的主机、欺骗扫描、端口过滤探测、直接的RPC扫描、分布扫描、灵活的目标选择及端口的描述。它的扫描功能异常强大,以至于人们叫它扫描之王。

1.1Window安装

进入nmap官网下载Download the Free Nmap Security Scanner for Linux/Mac/Windows。

android端 拦截网络请求_android端 拦截网络请求

android端 拦截网络请求_tcp/ip_02

点击Windows,选择nmap-7.93-setup.exe下载后,双击安装。

Windows安装后使用确实很方便,但是会因为用户名中文等原因,导致产生“关于Nmap中扫描时出现“utf8’ codec can’t decode byte 0xc0 in position 0: invalid start byte”错误的情况“如下图。

android端 拦截网络请求_服务器_03

 

此时可以将中文用户修改为英文解决,但是windows10版本尝试很多种办法,不是难度和风险很大,就是不行。

这里介绍一种最直接简单的方法,尝试用Administered用户安装nmap后使用。

要知道Win10系统的管理员账户Administrator是默认隐藏和关闭的,因为该账户权限极高,如果被不法分子利用会存在极大风险。此时就需要自己手动将其开启,而且要在使用完以后及时关闭,下面来就介绍Win10登录管理员账号的方法。

(1)在左下角Cortana搜索栏输入cmd,并右键点击“以管理员身份运行”。

android端 拦截网络请求_windows_04

  2、在命令提示符中输入如下命令后回车:

  net user administrator /active:yes

android端 拦截网络请求_windows_05

  3、此时管理员账户已开启,在开始菜单点击用户头像就可以看到切换选项。

android端 拦截网络请求_tcp/ip_06

  4、点击Administrator后,会切换到登录画面,此时点击登录即可。

android端 拦截网络请求_服务器_07

  5、初次进入该账户,同样需要等待应用设置。

android端 拦截网络请求_服务器_08

至此,以管理员身份登入系统,则可正常使用namap工具正常,扫描。

当然如果没有中文问题导致nmap报错的情况可以省略以上步骤。

1.2Linux版本安装

Linux版本安装更简单,按照下图官网红色区域的流程依次安装即可

android端 拦截网络请求_tcp/ip_09

Nmap的作用和使用方法,此处可参考csdn中的天花板学习,链接如下。^v47^control_1,201^v3^add_ask&utm_term=nmap%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B&spm=1018.2226.3001.4187

最后,在使用nmap时需要注意以下几点。

1)避免误解。不要随意选择测试Nmap的扫描目标。许多单位把端口扫描视为恶意行为,所以测试Nmap最好在内部网络进行。如有必要,应该告诉同事你正在试验端口扫描,因为扫描可能引发IDS警报或其他网络问题。如果不是在你控制的网络、系统及站点上用该工具,你应该首先看许可权。记住,尊重他人网络和系统的隐私意味着别人以后也会这样对你。2)关闭不必要的服务。根据Nmap提供的报告(同时考虑网络的安全要求),关闭不必要的服务,或者调整路由器的访问控制规则(ACL),禁用网络开放给外界的某些端口。

3)建立安全基准。在Nmap的帮助下加固网络,在搞清楚哪些系统和服务可能受到攻击之后,下一步是从这些已知的系统和服务出发建立一个安全基准,以后如果要启用新的服务或服务器,就可以方便地根据这个安全基准来执行。

2、iptables

安装iptables的步骤如下。

yum install iptables -y
service iptables start
yum install iptables-services
systemctl start iptables.service

执行systemctl enable iptables.service,使得iptables.service服务器开机自动启动

执行

systemctl status iptables

查看状态是否是Active:active(exited)

就是启动成功了

Iptables的原理和使用可以参考我的上一篇博客“iptables原理与设置”

3、查看端口状态

3.1、lsof命令

如果您直接或通过 SSH 登录到系统,则可以使用lsof 命令检查其端口,通过 lsof 命令可以查看当前登录的 Linux 系统中打开的端口。

sudo lsof -i -P -n

lsof 命令用于查找用户使用的文件和进程。这里用到的选项是:

i:如果没有指定IP地址,这个选项选择列出所有网络文件

P:禁止将端口号转换为端口名称, 如 3306 转为 MySQL

n:禁止IP转换为hostname,缺省是不加上-n参数

[root@VM-4-6-centos ~]#  lsof -i -P -n | grep LISTEN
mysqld     1254 mysql   14u  IPv4  16638      0t0  TCP *:3306 (LISTEN)
sshd       1371  root    3u  IPv4  15293      0t0  TCP *:22 (LISTEN)
sshd       1371  root    4u  IPv6  15295      0t0  TCP *:22 (LISTEN)

然而,上面命令也向我们展示了许多计算机实际上并未监听的额外端口。

您可以将此命令的输出通过管道传输到 grep 命令并匹配模式“LISTEN”,如下所示:

sudo lsof -i -P -n | grep LISTEN

这样只会显示我们的计算机正在监听的端口以及哪个服务正在使用所述开放端口。

3.2 netstat

netstat -tunlp |grep 端口号,用于查看指定的端口号的进程情况,如查看5050端口的情况,netstat -tunlp   |   grep 5050

android端 拦截网络请求_网络_10

netstat -tunlp |grep *查看所有端口情况。

-t (tcp) 仅显示tcp相关选项 -u (udp)仅显示udp相关选项 -n 拒绝显示别名,能显示数字的全部转化为数字 -l 仅列出在Listen(监听)的服务状态 -p 显示建立相关链接的程序名

4.iptables防止nmap扫描

4.1nmap扫描

在服务器上启动我们的ssh、MySQL和应用服务后,使用nmap扫描。

android端 拦截网络请求_windows_11

服务端端口启动情况如下。

android端 拦截网络请求_网络_12

扫描结果如下。

端口信息

android端 拦截网络请求_服务器_13

拓扑信息

android端 拦截网络请求_tcp/ip_14

主机信息

android端 拦截网络请求_服务器_15

为了防止通过nmap对我们的服务器进行端口扫描,这里以数据库端口3306为例,默认只允许内部网络访问,不允许外部访问和扫描,这里通过iptables进行设置,iptables的原理和设置,以及相关方案在我的上一篇博客iptables原理与设置_weixin_42145464的博客-CSDN博客中。

实现效果如下

Nmap已经扫描无法通过远程扫描到服务器的数据库端口。

android端 拦截网络请求_android端 拦截网络请求_16

如下图所示,之前通过navicat远程连接服务器的数据连接中断。

android端 拦截网络请求_windows_17

在服务器内网内仍能够正常连接数据库服务。

android端 拦截网络请求_windows_18

至此一个关于nmap端口扫描和阻止nmap端口扫描的防火墙设置的实验已经全部验证完成,希望能够给大家带来帮助。