📝 Writing docs.

This commit is contained in:
Zhang Peng 2018-02-28 16:48:00 +08:00
parent 66beab4329
commit 9f350203c4
2 changed files with 1073 additions and 48 deletions

View File

@ -10,59 +10,94 @@ tags:
<!-- TOC --> <!-- TOC -->
- [linux 常用命令-网络应用](#linux-常用命令-网络应用) - [linux 常用命令-网络应用](#linux-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4-%E7%BD%91%E7%BB%9C%E5%BA%94%E7%94%A8)
- [curl](#curl) - [curl](#curl)
- [补充说明](#补充说明) - [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#语法) - [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#选项) - [选项](#%E9%80%89%E9%A1%B9)
- [实例](#实例) - [实例](#%E5%AE%9E%E4%BE%8B)
- [wget](#wget) - [wget](#wget)
- [补充说明](#补充说明-1) - [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#语法-1) - [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#选项-1) - [选项](#%E9%80%89%E9%A1%B9)
- [参数](#参数) - [参数](#%E5%8F%82%E6%95%B0)
- [实例](#实例-1) - [实例](#%E5%AE%9E%E4%BE%8B)
- [telnet](#telnet) - [telnet](#telnet)
- [补充说明](#补充说明-2) - [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#语法-2) - [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#选项-2) - [选项](#%E9%80%89%E9%A1%B9)
- [参数](#参数-1) - [参数](#%E5%8F%82%E6%95%B0)
- [实例](#实例-2) - [实例](#%E5%AE%9E%E4%BE%8B)
- [ip](#ip) - [ip](#ip)
- [补充说明](#补充说明-3) - [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#语法-3) - [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#选项-3) - [选项](#%E9%80%89%E9%A1%B9)
- [参数](#参数-2) - [参数](#%E5%8F%82%E6%95%B0)
- [实例](#实例-3) - [实例](#%E5%AE%9E%E4%BE%8B)
- [hostname](#hostname)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [ifconfig](#ifconfig)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [route](#route)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [ssh](#ssh)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [背后故事](#%E8%83%8C%E5%90%8E%E6%95%85%E4%BA%8B)
- [将 SSH 协议端口号设为 22 的故事](#%E5%B0%86-ssh-%E5%8D%8F%E8%AE%AE%E7%AB%AF%E5%8F%A3%E5%8F%B7%E8%AE%BE%E4%B8%BA-22-%E7%9A%84%E6%95%85%E4%BA%8B)
- [如何更改 SSH 服务的端口号](#%E5%A6%82%E4%BD%95%E6%9B%B4%E6%94%B9-ssh-%E6%9C%8D%E5%8A%A1%E7%9A%84%E7%AB%AF%E5%8F%A3%E5%8F%B7)
- [配置 SSH 协议穿越防火墙](#%E9%85%8D%E7%BD%AE-ssh-%E5%8D%8F%E8%AE%AE%E7%A9%BF%E8%B6%8A%E9%98%B2%E7%81%AB%E5%A2%99)
- [出站的 SSH 连接](#%E5%87%BA%E7%AB%99%E7%9A%84-ssh-%E8%BF%9E%E6%8E%A5)
- [反向通道是有风险的](#%E5%8F%8D%E5%90%91%E9%80%9A%E9%81%93%E6%98%AF%E6%9C%89%E9%A3%8E%E9%99%A9%E7%9A%84)
- [入站的 SSH 访问](#%E5%85%A5%E7%AB%99%E7%9A%84-ssh-%E8%AE%BF%E9%97%AE)
- [通过 iptables 服务限制 SSH 访问](#%E9%80%9A%E8%BF%87-iptables-%E6%9C%8D%E5%8A%A1%E9%99%90%E5%88%B6-ssh-%E8%AE%BF%E9%97%AE)
- [ssh-keygen](#ssh-keygen)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [iptables](#iptables) - [iptables](#iptables)
- [补充说明](#补充说明-4) - [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#语法-4) - [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#选项-4) - [选项](#%E9%80%89%E9%A1%B9)
- [基本参数](#基本参数) - [基本参数](#%E5%9F%BA%E6%9C%AC%E5%8F%82%E6%95%B0)
- [命令选项输入顺序](#命令选项输入顺序) - [命令选项输入顺序](#%E5%91%BD%E4%BB%A4%E9%80%89%E9%A1%B9%E8%BE%93%E5%85%A5%E9%A1%BA%E5%BA%8F)
- [工作机制](#工作机制) - [工作机制](#%E5%B7%A5%E4%BD%9C%E6%9C%BA%E5%88%B6)
- [防火墙的策略](#防火墙的策略) - [防火墙的策略](#%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E7%AD%96%E7%95%A5)
- [防火墙的策略](#防火墙的策略-1) - [防火墙的策略](#%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E7%AD%96%E7%95%A5)
- [实例](#实例-4) - [实例](#%E5%AE%9E%E4%BE%8B)
- [空当前的所有规则和计数](#空当前的所有规则和计数) - [空当前的所有规则和计数](#%E7%A9%BA%E5%BD%93%E5%89%8D%E7%9A%84%E6%89%80%E6%9C%89%E8%A7%84%E5%88%99%E5%92%8C%E8%AE%A1%E6%95%B0)
- [配置允许ssh端口连接](#配置允许ssh端口连接) - [配置允许ssh端口连接](#%E9%85%8D%E7%BD%AE%E5%85%81%E8%AE%B8ssh%E7%AB%AF%E5%8F%A3%E8%BF%9E%E6%8E%A5)
- [允许本地回环地址可以正常使用](#允许本地回环地址可以正常使用) - [允许本地回环地址可以正常使用](#%E5%85%81%E8%AE%B8%E6%9C%AC%E5%9C%B0%E5%9B%9E%E7%8E%AF%E5%9C%B0%E5%9D%80%E5%8F%AF%E4%BB%A5%E6%AD%A3%E5%B8%B8%E4%BD%BF%E7%94%A8)
- [设置默认的规则](#设置默认的规则) - [设置默认的规则](#%E8%AE%BE%E7%BD%AE%E9%BB%98%E8%AE%A4%E7%9A%84%E8%A7%84%E5%88%99)
- [配置白名单](#配置白名单) - [配置白名单](#%E9%85%8D%E7%BD%AE%E7%99%BD%E5%90%8D%E5%8D%95)
- [开启相应的服务端口](#开启相应的服务端口) - [开启相应的服务端口](#%E5%BC%80%E5%90%AF%E7%9B%B8%E5%BA%94%E7%9A%84%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%8F%A3)
- [保存规则到配置文件中](#保存规则到配置文件中) - [保存规则到配置文件中](#%E4%BF%9D%E5%AD%98%E8%A7%84%E5%88%99%E5%88%B0%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E4%B8%AD)
- [列出已设置的规则](#列出已设置的规则) - [列出已设置的规则](#%E5%88%97%E5%87%BA%E5%B7%B2%E8%AE%BE%E7%BD%AE%E7%9A%84%E8%A7%84%E5%88%99)
- [清除已有规则](#清除已有规则) - [清除已有规则](#%E6%B8%85%E9%99%A4%E5%B7%B2%E6%9C%89%E8%A7%84%E5%88%99)
- [删除已添加的规则](#删除已添加的规则) - [删除已添加的规则](#%E5%88%A0%E9%99%A4%E5%B7%B2%E6%B7%BB%E5%8A%A0%E7%9A%84%E8%A7%84%E5%88%99)
- [开放指定的端口](#开放指定的端口) - [开放指定的端口](#%E5%BC%80%E6%94%BE%E6%8C%87%E5%AE%9A%E7%9A%84%E7%AB%AF%E5%8F%A3)
- [屏蔽IP](#屏蔽ip) - [屏蔽IP](#%E5%B1%8F%E8%94%BDip)
- [指定数据包出去的网络接口](#指定数据包出去的网络接口) - [指定数据包出去的网络接口](#%E6%8C%87%E5%AE%9A%E6%95%B0%E6%8D%AE%E5%8C%85%E5%87%BA%E5%8E%BB%E7%9A%84%E7%BD%91%E7%BB%9C%E6%8E%A5%E5%8F%A3)
- [查看已添加的规则](#查看已添加的规则) - [查看已添加的规则](#%E6%9F%A5%E7%9C%8B%E5%B7%B2%E6%B7%BB%E5%8A%A0%E7%9A%84%E8%A7%84%E5%88%99)
- [启动网络转发规则](#启动网络转发规则) - [启动网络转发规则](#%E5%90%AF%E5%8A%A8%E7%BD%91%E7%BB%9C%E8%BD%AC%E5%8F%91%E8%A7%84%E5%88%99)
- [端口映射](#端口映射) - [端口映射](#%E7%AB%AF%E5%8F%A3%E6%98%A0%E5%B0%84)
- [字符串匹配](#字符串匹配) - [字符串匹配](#%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%8C%B9%E9%85%8D)
- [阻止Windows蠕虫的攻击](#阻止windows蠕虫的攻击) - [阻止Windows蠕虫的攻击](#%E9%98%BB%E6%AD%A2windows%E8%A0%95%E8%99%AB%E7%9A%84%E6%94%BB%E5%87%BB)
- [防止SYN洪水攻击](#防止syn洪水攻击) - [防止SYN洪水攻击](#%E9%98%B2%E6%AD%A2syn%E6%B4%AA%E6%B0%B4%E6%94%BB%E5%87%BB)
<!-- /TOC --> <!-- /TOC -->
@ -929,6 +964,450 @@ default via 112.124.15.247 dev eth1
ip link | grep ^[0-9] | awk -F: '{print $2}' ip link | grep ^[0-9] | awk -F: '{print $2}'
``` ```
## hostname
显示和设置系统的主机名
### 补充说明
**hostname命令** 用于显示和设置系统的主机名称。环境变量HOSTNAME也保存了当前的主机名。在使用hostname命令设置主机名后系统并不会永久保存新的主机名重新启动机器之后还是原来的主机名。如果需要永久修改主机名需要同时修改`/etc/hosts`和`/etc/sysconfig/network`的相关内容。
### 语法
```
hostname(选项)(参数)
```
### 选项
```
-v详细信息模式
-a显示主机别名
-d显示DNS域名
-f显示FQDN名称
-i显示主机的ip地址
-s显示短主机名称在第一个点处截断
-y显示NIS域名。
```
### 参数
主机名:指定要设置的主机名。
### 实例
```
[root@AY1307311912260196fcZ ~]# hostname
AY1307311912260196fcZ
```
## ifconfig
配置和显示Linux系统网卡的网络参数
### 补充说明
**ifconfig命令** 被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息在网卡重启后机器重启后配置就不存在。要想将上述的配置信息永远的存的电脑里那就要修改网卡的配置文件了。
### 语法
```
ifconfig(参数)
```
### 参数
```
add<地址>设置网络设备IPv6的ip地址
del<地址>删除网络设备IPv6的IP地址
down关闭指定的网络设备
<hw<网络设备类型><硬件地址>:设置网络设备的类型与硬件地址;
io_addr<I/O地址>设置网络设备的I/O地址
irq<IRQ地址>设置网络设备的IRQ
media<网络媒介类型>:设置网络设备的媒介类型;
mem_start<内存地址>:设置网络设备在主内存所占用的起始地址;
metric<数目>:指定在计算数据包的转送次数时,所要加上的数目;
mtu<字节>设置网络设备的MTU
netmask<子网掩码>:设置网络设备的子网掩码;
tunnel<地址>建立IPv4与IPv6之间的隧道通信地址
up启动指定的网络设备
-broadcast<地址>:将要送往指定地址的数据包当成广播数据包来处理;
-pointopoint<地址>:与指定地址的网络设备建立直接连线,此模式具有保密功能;
-promisc关闭或启动指定网络设备的promiscuous模式
IP地址指定网络设备的IP地址
网络设备:指定网络设备的名称。
```
### 实例
**显示网络设备信息(激活状态的):**
```
[root@localhost ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:16:3E:00:1E:51
inet addr:10.160.7.81 Bcast:10.160.15.255 Mask:255.255.240.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:61430830 errors:0 dropped:0 overruns:0 frame:0
TX packets:88534 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3607197869 (3.3 GiB) TX bytes:6115042 (5.8 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:56103 errors:0 dropped:0 overruns:0 frame:0
TX packets:56103 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5079451 (4.8 MiB) TX bytes:5079451 (4.8 MiB)
```
说明:
**eth0** 表示第一块网卡,其中`HWaddr`表示网卡的物理地址,可以看到目前这个网卡的物理地址(MAC地址是`00:16:3E:00:1E:51`。
**inet addr** 用来表示网卡的IP地址此网卡的IP地址是`10.160.7.81`,广播地址`Bcast:10.160.15.255`,掩码地址`Mask:255.255.240.0`。
**lo** 是表示主机的回坏地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如把 httpd服务器的指定到回坏地址在浏览器输入127.0.0.1就能看到你所架WEB网站了。但只是您能看得到局域网的其它主机或用户无从知道。
* 第一行连接类型Ethernet以太网HWaddr硬件mac地址
* 第二行网卡的IP地址、子网、掩码。
* 第三行UP代表网卡开启状态RUNNING代表网卡的网线被接上MULTICAST支持组播MTU:1500最大传输单元1500字节。
* 第四、五行:接收、发送数据包情况统计。
* 第七行:接收、发送数据字节数统计信息。
**启动关闭指定网卡:**
```
ifconfig eth0 up
ifconfig eth0 down
```
`ifconfig eth0 up`为启动网卡eth0`ifconfig eth0 down`为关闭网卡eth0。ssh登陆linux服务器操作要小心关闭了就不能开启了除非你有多网卡。
**为网卡配置和删除IPv6地址**
```
ifconfig eth0 add 33ffe:3240:800:1005::2/64 #为网卡eth0配置IPv6地址
ifconfig eth0 del 33ffe:3240:800:1005::2/64 #为网卡eth0删除IPv6地址
```
**用ifconfig修改MAC地址**
```
ifconfig eth0 hw ether 00:AA:BB:CC:dd:EE
```
**配置IP地址**
```
[root@localhost ~]# ifconfig eth0 192.168.2.10
[root@localhost ~]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0
[root@localhost ~]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0 broadcast 192.168.2.255
```
**启用和关闭arp协议**
```
ifconfig eth0 arp #开启网卡eth0 的arp协议
ifconfig eth0 -arp #关闭网卡eth0 的arp协议
```
**设置最大传输单元:**
```
ifconfig eth0 mtu 1500 #设置能通过的最大数据包大小为 1500 bytes
```
## route
显示并设置Linux中静态路由表
### 补充说明
**route命令** 用来显示并设置Linux内核中的网络路由表route命令设置的路由主要是静态路由。要实现两个不同的子网之间的通信需要一台连接两个网络的路由器或者同时位于两个网络的网关来实现。
在Linux系统中设置路由通常是为了解决以下问题该Linux系统在一个局域网中局域网中有一个网关能够让机器访问Internet那么就需要将这台机器的ip地址设置为Linux机器的默认路由。要注意的是直接在命令行下执行route命令来添加路由不会永久保存当网卡重启或者机器重启之后该路由就失效了可以在`/etc/rc.local`中添加route命令来保证该路由设置永久有效。
### 语法
```
route(选项)(参数)
```
### 选项
```
-A设置地址类型
-C打印将Linux核心的路由缓存
-v详细信息模式
-n不执行DNS反向查找直接显示数字形式的IP地址
-enetstat格式显示路由表
-net到一个网络的路由表
-host到一个主机的路由表。
```
### 参数
```
Add增加指定的路由记录
Del删除指定的路由记录
Target目的网络或目的主机
gw设置默认网关
mss设置TCP的最大区块长度MSS单位MB
window指定通过路由表的TCP连接的TCP窗口大小
dev路由记录所表示的网络接口。
```
### 实例
**显示当前路由:**
```
[root@localhost ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
112.124.12.0    *               255.255.252.0   U     0      0        0 eth1
10.160.0.0      *               255.255.240.0   U     0      0        0 eth0
192.168.0.0     10.160.15.247   255.255.0.0     UG    0      0        0 eth0
172.16.0.0      10.160.15.247   255.240.0.0     UG    0      0        0 eth0
10.0.0.0        10.160.15.247   255.0.0.0       UG    0      0        0 eth0
default         112.124.15.247  0.0.0.0         UG    0      0        0 eth1
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
112.124.12.0 0.0.0.0 255.255.252.0 U 0 0 0 eth1
10.160.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
192.168.0.0 10.160.15.247 255.255.0.0 UG 0 0 0 eth0
172.16.0.0 10.160.15.247 255.240.0.0 UG 0 0 0 eth0
10.0.0.0 10.160.15.247 255.0.0.0 UG 0 0 0 eth0
0.0.0.0 112.124.15.247 0.0.0.0 UG 0 0 0 eth1
```
其中Flags为路由标志标记当前网络节点的状态Flags标志说明
* U Up表示此路由当前为启动状态。
* H Host表示此网关为一主机。
* G Gateway表示此网关为一路由器。
* R Reinstate Route使用动态路由重新初始化的路由。
* D Dynamically,此路由是动态性地写入。
* M Modified此路由是由路由守护程序或导向器动态修改。
* ! 表示此路由当前为关闭状态。
**添加网关/设置网关:**
```
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 #增加一条到达244.0.0.0的路由。
```
**屏蔽一条路由:**
```
route add -net 224.0.0.0 netmask 240.0.0.0 reject #增加一条屏蔽的路由目的地址为224.x.x.x将被拒绝。
```
**删除路由记录:**
```
route del -net 224.0.0.0 netmask 240.0.0.0
route del -net 224.0.0.0 netmask 240.0.0.0 reject
```
**删除和添加设置默认网关:**
```
route del default gw 192.168.120.240
route add default gw 192.168.120.240
```
## ssh
openssh套件中的客户端连接工具
### 补充说明
**ssh命令** 是openssh套件中的客户端连接工具可以给予ssh加密协议实现安全的远程登录服务器。
### 语法
```
ssh(选项)(参数)
```
### 选项
```
-1强制使用ssh协议版本1
-2强制使用ssh协议版本2
-4强制使用IPv4地址
-6强制使用IPv6地址
-A开启认证代理连接转发功能
-a关闭认证代理连接转发功能
-b使用本机指定地址作为对应连接的源ip地址
-C请求压缩所有数据
-F指定ssh指令的配置文件
-f后台执行ssh指令
-g允许远程主机连接主机的转发端口
-i指定身份文件
-l指定连接远程服务器登录用户名
-N不执行远程指令
-o指定配置选项
-p指定远程服务器上的端口
-q静默模式
-X开启X11转发功能
-x关闭X11转发功能
-y开启信任X11转发功能。
```
### 参数
* 远程主机指定要连接的远程ssh服务器
* 指令要在远程ssh服务器上执行的指令。
### 实例
```bash
# ssh 用户名@远程服务器地址
ssh user1@172.24.210.101
# 指定端口
ssh -p 2211 root@140.206.185.170
```
### 背后故事
> 英文Tatu Ylonen
> 编译Linux中国/kenxx
> 来源https://linux.cn/article-8476-1.html
为什么 SSH安全终端的端口号是 22 呢这不是一个巧合这其中有个我Tatu YlonenSSH 协议的设计者)未曾诉说的故事。
#### 将 SSH 协议端口号设为 22 的故事
1995 年春我编写了 SSH 协议的最初版本,那时候 telnet 和 FTP 正被广泛使用。
当时我设计 SSH 协议想着是为了替代 telnet端口 23和 ftp端口21两个协议的而端口 22 是空闲的。我想当然地就选择了夹在 telnet 和 ftp 的端口中间的数字。我觉得端口号虽然是个小事但似乎又存在着某种信念。但我到底要怎么拿到那个端口号呢?我未曾拥有过任何一个端口号,但我却认识几个拥有端口号的人!
在那时取得端口号的事情其实说来挺简单的。毕竟当时的因特网Internet并不是很大是因特网爆炸的早期。端口号分配的活儿是 IANAInternet Assigned Numbers Authority互联网数字分配机构干的。在那时这机构可相当于是因特网先驱 [Jon Postel](https://en.wikipedia.org/wiki/Jon_Postel) 和 [Joyce K. Reynolds](https://en.wikipedia.org/wiki/Joyce_K._Reynolds) 一般的存在。Jon 参与编写了多项主要的协议标准,例如 IPRFC 791、ICMPRFC 792和 TCPRFC 793等一些你应该早有耳闻的协议。
我可以说是敬畏 Jon 先生的他参与编写了几乎所有主要的因特网标准文档Internet RFC
1995 年 7 月,就在我发布 ssh-1.0 前,我发送了一封邮件给 IANA
> From ylo Mon Jul 10 11:45:48 +0300 1995
> From: Tatu Ylonen
> To: Internet Assigned Numbers Authority
> Subject: 请求取得一个端口号
> Organization: 芬兰赫尔辛基理工大学
>
> 亲爱的机构成员:
>
> 我写了个可以在不安全的网络环境中安全地从一台机器登录到另一台机器的程序。它主要是对现有的 telnet 协议以及 rlogin 协议的功能性提升和安全性改进。说的具体些,就是可以防御 IP、DNS > 或路由等欺骗行为。我打算将我的软件免费地发布在因特网上,以得到广泛地使用。
>
> 我希望为该软件注册一个特权端口号,要是这个端口号在 1 到 255 > 之间就更好了,这样它就可以用在名字服务器的 WKS 字段中了。
>
> 我在附件中附上了协议标准的草案。这个软件已经在本地运行了几个月了,我已准备在获得端口号后就发布。如果端口号分配一事安排的及时,我希望这周就将要发布的软件准备好。我目前在 beta 版测试时使用的端口号是 > 22如果要是能够分配到这个端口我就不用做什么更改了目前这个端口在列表中还是空闲的
>
> 软件中服务的名称叫 ssh系 Secure Shell 的缩写)。
>
> 您最真诚的,
> Tatu Ylonen
LCTT 译注DNS 协议中的 WKS 记录类型意即“众所周知的业务描述”,是类似于 A、MX 这样的 DNS 记录类型,用于描述某个 IP 所提供的服务,目前鲜见使用。参见: https://docs.oracle.com/cd/E19683-01/806-4077/dnsintro-154/index.html 。)
第二天,我就收到了 Joyce 发来的邮件:
> Date: Mon, 10 Jul 1995 15:35:33 -0700
> From: jkrey@ISI.EDU
> To: ylo@cs.hut.fi
> Subject: 回复:请求取得一个端口号
> Cc: iana@ISI.EDU
> Tatu,
> 我们将端口号 22 分配给 ssh 服务了,你目前是该服务的主要联系人。
> Joyce
这就搞定了SSH 的端口正式使用 22
1995 年 7 月 12 日上午 2 点 21 分,我给我在赫尔辛基理工大学的测试者们宣布了 SSH 的最后 beta 版本。当日下午 5 点 23 分,我给测试者们宣布了 ssh-1.0.0 版本。1995 年 7 月 12 日,下午 5 点 51 分,我将一份 SSH安全终端的宣告发给了 cypherpunks@toad.com 的邮件列表,此外我还将其发给了一些新闻组、邮件列表和一些在因特网上讨论相关话题的人们。
#### 如何更改 SSH 服务的端口号
SSH 服务器是默认运行在 22 号端口上的。然而,由于某些原因需要,它也可以运行在别的端口上。比如为了方便测试使用,又比如在同一个宿主机上运行多个不同的配置。当然,极少情况下,不使用 root 权限运行它也可以,比如某些必须运行在非特权的端口的情况(端口号大于等于 1024
端口号可以在配置文件 /etc/ssh/sshd_config 中将 Port 22 更改。也可以使用 -p 选项运行 sshd。SSH 客户端和 sftp 程序也可以使用 -p 选项。
#### 配置 SSH 协议穿越防火墙
SSH 是少数通常被许可穿越防火墙的协议之一。通常的做法是不限制出站的 SSH 连接,尤其常见于一些较小的或者比较技术型的组织中,而入站的 SSH 连接通常会限制到一台或者是少数几台服务器上。
#### 出站的 SSH 连接
在防火墙中配置出站的 SSH 连接十分简单。如果完全限制了外发连接,那么只需要创建一个允许 TCP 端口 22 可以外发的规则即可。如果你想限制目标地址,你可以限制该规则仅允许访问你的组织放在云端的外部服务器或保护该云端的跳板服务器即可。
#### 反向通道是有风险的
其实不限制出站的 SSH 连接虽然是可以的但是是存在风险的SSH 协议是支持 通道访问 的。最初的想法是在外部服务器搭建一个 SSH 服务监听来自各处的连接,将进入的连接转发到组织,并让这个连接可以访问某个内部服务器。
在某些场景下这当然非常的方便。开发者和系统管理员经常使用它打开一个通道以便于他们可以远程访问,比如在家里或者在旅行中使用笔记本电脑等场景。
然而通常来讲这些做法是违背安全策略的,跳过了防火墙管理员和安全团队保护的控制无疑是违背安全策略的,比如这些: PCI、HIPAA、NIST SP 800-53 等。它可以被黑客和外国情报机构用来在组织内留下后门。
CryptoAuditor 是一款可以控制通道穿过防火墙或者一组云端服务器入口的产品。该款产品可以配合 通用 SSH 密钥管理器Universal SSH Key Manager 来获得对 主机密钥host keys的访问以在启用防火墙并阻挡未授权转发的场景中解密 SSH 会话。
#### 入站的 SSH 访问
对于入站访问而言,这里有几点需要说一下:
配置防火墙,并转发所有去往 22 端口的连接只能流向到一个特定的内部网络 IP 地址或者一个 DMZ 主机。在该 IP 上运行 CryptoAuditor 或者跳板机来控制和审查所有访问该组织的连接。
在防火墙上使用不同的端口访问不同的服务器。
只允许使用 IPsec 协议这样的 VPN虚拟专用网登录后连接 SSH 服务。
#### 通过 iptables 服务限制 SSH 访问
iptables 是一款内建在 Linux 内核的宿主防火墙。通常配置用于保护服务器以防止被访问那些未明确开启的端口。
如果服务器上启用了 iptables使用下面的命令将可以允许进入的 SSH 访问,当然命令需要以 root 身份运行。
```
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
```
如果你想将上述命令创建的规则持久地保存,在某些系统版本中,可使用如下命令:
```
service iptables save
```
## ssh-keygen
为ssh生成、管理和转换认证密钥
### 补充说明
**ssh-keygen命令** 用于为“ssh”生成、管理和转换认证密钥它支持RSA和DSA两种认证密钥。
### 语法
```
ssh-keygen(选项)
```
### 选项
```
-b指定密钥长度
-e读取openssh的私钥或者公钥文件
-C添加注释
-f指定用来保存密钥的文件名
-i读取未加密的ssh-v2兼容的私钥/公钥文件然后在标准输出设备上显示openssh兼容的私钥/公钥;
-l显示公钥文件的指纹数据
-N提供一个新密语
-P提供密语
-q静默模式
-t指定要创建的密钥类型。
```
## iptables ## iptables
Linux上常用的防火墙软件 Linux上常用的防火墙软件

View File

@ -0,0 +1,546 @@
---
title: linux 常用命令-网络应用
date: 2018/02/28
categories:
- linux
tags:
- linux
- command
---
# linux 常用命令-网络应用
## host
常用的分析域名查询工具
### 补充说明
**host命令** 是常用的分析域名查询工具,可以用来测试域名系统工作是否正常。
### 语法
```
host(选项)(参数)
```
### 选项
```
-a显示详细的DNS信息
-c<类型>指定查询类型默认值为“IN“
-C查询指定主机的完整的SOA记录
-r在查询域名时不使用递归的查询方式
-t<类型>:指定查询的域名信息类型;
-v显示指令执行的详细信息
-w如果域名服务器没有给出应答信息则总是等待直到域名服务器给出应答
-W<时间>:指定域名查询的最长时间,如果在指定时间内域名服务器没有给出应答信息,则退出指令;
-4使用IPv4
-6使用IPv6.
```
### 参数
主机:指定要查询信息的主机信息。
### 实例
```
[root@localhost ~]# host www.jsdig.com
www.jsdig.com is an alias for host.1.jsdig.com.
host.1.jsdig.com has address 100.42.212.8
[root@localhost ~]# host -a www.jsdig.com
Trying "www.jsdig.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34671
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.jsdig.com. IN ANY
;; ANSWER SECTION:
www.jsdig.com. 463 IN CNAME host.1.jsdig.com.
Received 54 bytes from 202.96.104.15#53 in 0 ms
```
## nslookup
查询域名DNS信息的工具
### 补充说明
**nslookup命令** 是常用域名查询工具就是查DNS信息用的命令。
nslookup4有两种工作模式即“交互模式”和“非交互模式”。在“交互模式”下用户可以向域名服务器查询各类主机、域名的信息或者输出域名中的主机列表。而在“非交互模式”下用户可以针对一个主机或域名仅仅获取特定的名称或所需信息。
进入交互模式直接输入nslookup命令不加任何参数则直接进入交互模式此时nslookup会连接到默认的域名服务器即`/etc/resolv.conf`的第一个dns地址。或者输入`nslookup -nameserver/ip`。进入非交互模式,就直接输入`nslookup 域名`就可以了。
### 语法
```
nslookup(选项)(参数)
```
### 选项
```
-sil不显示任何警告信息。
```
### 参数
域名:指定要查询域名。
### 实例
```
[root@localhost ~]# nslookup www.jsdig.com
Server: 202.96.104.15
Address: 202.96.104.15#53
Non-authoritative answer:
www.jsdig.com canonical name = host.1.jsdig.com.
Name: host.1.jsdig.com
Address: 100.42.212.8
```
## nc/netcat
命令用于设置路由器。
### 补充说明
**nc命令** 用于设置路由器。执行本指令可设置路由器的相关参数。
### 语法
```
nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>]
[-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...]
```
### 选项
```
-g<网关> 设置路由器跃程通信网关最丢哦可设置8个。
-G<指向器数目> 设置来源路由指向器其数值为4的倍数。
-h 在线帮助。
-i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
-l 使用监听模式,管控传入的资料。
-n 直接使用IP地址而不通过域名服务器。
-o<输出文件> 指定文件名称把往来传输的数据以16进制字码倾倒成该文件保存。
-p<通信端口> 设置本地主机使用的通信端口。
-r 乱数指定本地与远端主机的通信端口。
-s<来源位址> 设置本地主机送出数据包的IP地址。
-u 使用UDP传输协议。
-v 显示指令执行过程。
-w<超时秒数> 设置等待连线的时间。
-z 使用0输入/输出模式,只在扫描通信端口时使用。
```
### 实例
TCP端口扫描
```
[root@localhost ~]# nc -v -z -w2 192.168.0.3 1-100
192.168.0.3: inverse host lookup failed: Unknown host
(UNKNOWN) [192.168.0.3] 80 (http) open
(UNKNOWN) [192.168.0.3] 23 (telnet) open
(UNKNOWN) [192.168.0.3] 22 (ssh) open
```
扫描192.168.0.3 的端口 范围是 1-100
扫描UDP端口
```
[root@localhost ~]# nc -u -z -w2 192.168.0.1 1-1000 # 扫描192.168.0.3 的端口 范围是 1-1000
```
扫描指定端口
```
[root@localhost ~]# nc -nvv 192.168.0.1 80 # 扫描 80端口
(UNKNOWN) [192.168.0.1] 80 (?) open
y //用户输入
```
## dig
域名查询工具
### 补充说明
**dig命令** 是常用的域名查询工具,可以用来测试域名系统工作是否正常。
### 语法
```
dig(选项)(参数)
```
### 选项
```
@<服务器地址>:指定进行域名解析的域名服务器;
-b<ip地址>当主机具有多个IP地址指定使用本机的哪个IP地址向域名服务器发送域名查询请求
-f<文件名称>指定dig以批处理的方式运行指定的文件中保存着需要批处理查询的DNS任务信息
-P指定域名服务器所使用端口号
-t<类型>指定要查询的DNS数据类型
-x<IP地址>:执行逆向域名查询;
-4使用IPv4
-6使用IPv6
-h显示指令帮助信息。
```
### 参数
* 主机:指定要查询域名主机;
* 查询类型指定DNS查询的类型
* 查询类指定查询DNS的class
* 查询选项:指定查询选项。
### 实例
```
[root@localhost ~]# dig www.jsdig.com
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.1 <<>> www.jsdig.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2115
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 0
;; QUESTION SECTION:
;www.jsdig.com. IN A
;; ANSWER SECTION:
www.jsdig.com. 0 IN CNAME host.1.jsdig.com.
host.1.jsdig.com. 0 IN A 100.42.212.8
;; AUTHORITY SECTION:
jsdig.com. 8 IN NS f1g1ns2.dnspod.net.
jsdig.com. 8 IN NS f1g1ns1.dnspod.net.
;; Query time: 0 msec
;; SERVER: 202.96.104.15#53(202.96.104.15)
;; WHEN: Thu Dec 26 11:14:37 2013
;; MSG SIZE rcvd: 121
```
## ping
测试主机之间网络的连通性
### 补充说明
**ping命令** 用来测试主机之间网络的连通性。执行ping指令会使用ICMP传输协议发出要求回应的信息若远端主机的网络功能没有问题就会回应该信息因而得知该主机运作正常。
### 语法
```
ping(选项)(参数)
```
### 选项
```
-d使用Socket的SO_DEBUG功能
-c<完成次数>:设置完成要求回应的次数;
-f极限检测
-i<间隔秒数>:指定收发信息的间隔时间;
-I<网络界面>:使用指定的网络界面送出数据包;
-l<前置载入>:设置在送出要求信息之前,先行发出的数据包;
-n只输出数值
-p<范本样式>:设置填满数据包的范本样式;
-q不显示指令执行过程开头和结尾的相关信息除外
-r忽略普通的Routing Table直接将数据包送到远端主机上
-R记录路由过程
-s<数据包大小>:设置数据包的大小;
-t<存活数值>设置存活数值TTL的大小
-v详细显示指令的执行过程。
```
### 参数
目的主机指定发送ICMP报文的目的主机。
### 实例
```
[root@AY1307311912260196fcZ ~]# ping www.jsdig.com
PING host.1.jsdig.com (100.42.212.8) 56(84) bytes of data.
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=1 ttl=50 time=177 ms
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=2 ttl=50 time=178 ms
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=3 ttl=50 time=174 ms
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=4 ttl=50 time=177 ms
...按Ctrl+C结束
--- host.1.jsdig.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2998ms
rtt min/avg/max/mdev = 174.068/176.916/178.182/1.683 ms
```
## traceroute
显示数据包到主机间的路径
### 补充说明
**traceroute命令** 用于追踪数据包在网络上的传输时的全部路径它默认发送的数据包大小是40字节。
通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点source到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。
traceroute通过发送小的数据包到目的设备直到其返回来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称如有的话及其ip地址。
### 语法
```
traceroute(选项)(参数)
```
### 选项
```
-d使用Socket层级的排错功能
-f<存活数值>设置第一个检测数据包的存活数值TTL的大小
-F设置勿离断位
-g<网关>设置来源路由网关最多可设置8个
-i<网络界面>:使用指定的网络界面送出数据包;
-I使用ICMP回应取代UDP资料信息
-m<存活数值>设置检测数据包的最大存活数值TTL的大小
-n直接使用IP地址而非主机名称
-p<通信端口>设置UDP传输协议的通信端口
-r忽略普通的Routing Table直接将数据包送到远端主机上。
-s<来源地址>设置本地主机送出数据包的IP地址
-t<服务类型>设置检测数据包的TOS数值
-v详细显示指令的执行过程
-w<超时秒数>:设置等待远端主机回报的时间;
-x开启或关闭数据包的正确性检验。
```
### 参数
主机指定目的主机IP地址或主机名。
### 实例
```
traceroute www.58.com
traceroute to www.58.com (211.151.111.30), 30 hops max, 40 byte packets
1 unknown (192.168.2.1) 3.453 ms 3.801 ms 3.937 ms
2 221.6.45.33 (221.6.45.33) 7.768 ms 7.816 ms 7.840 ms
3 221.6.0.233 (221.6.0.233) 13.784 ms 13.827 ms 221.6.9.81 (221.6.9.81) 9.758 ms
4 221.6.2.169 (221.6.2.169) 11.777 ms 122.96.66.13 (122.96.66.13) 34.952 ms 221.6.2.53 (221.6.2.53) 41.372 ms
5 219.158.96.149 (219.158.96.149) 39.167 ms 39.210 ms 39.238 ms
6 123.126.0.194 (123.126.0.194) 37.270 ms 123.126.0.66 (123.126.0.66) 37.163 ms 37.441 ms
7 124.65.57.26 (124.65.57.26) 42.787 ms 42.799 ms 42.809 ms
8 61.148.146.210 (61.148.146.210) 30.176 ms 61.148.154.98 (61.148.154.98) 32.613 ms 32.675 ms
9 202.106.42.102 (202.106.42.102) 44.563 ms 44.600 ms 44.627 ms
10 210.77.139.150 (210.77.139.150) 53.302 ms 53.233 ms 53.032 ms
11 211.151.104.6 (211.151.104.6) 39.585 ms 39.502 ms 39.598 ms
12 211.151.111.30 (211.151.111.30) 35.161 ms 35.938 ms 36.005 ms
```
记录按序列号从1开始每个纪录就是一跳 每跳表示一个网关我们看到每行有三个时间单位是ms其实就是`-q`的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果用`traceroute -q 4 www.58.com`表示向每个网关发送4个数据包。
有时我们traceroute一台主机时会看到有一些行是以星号表示的。出现这样的情况可能是防火墙封掉了ICMP的返回信息所以我们得不到什么相关的数据包返回数据。
有时我们在某一网关处延时比较长有可能是某台网关比较阻塞也可能是物理设备本身的原因。当然如果某台DNS出现问题时不能解析主机名、域名时也会 有延时长的现象您可以加`-n`参数来避免DNS解析以IP格式输出数据。
如果在局域网中的不同网段之间我们可以通过traceroute 来排查问题所在是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时我们用到traceroute 追踪数据包所经过的网关提交IDC服务商也有助于解决问题但目前看来在国内解决这样的问题是比较困难的就是我们发现问题所在IDC服务商也不可能帮助我们解决。
**跳数设置**
```
[root@localhost ~]# traceroute -m 10 www.baidu.com
traceroute to www.baidu.com (61.135.169.105), 10 hops max, 40 byte packets
1 192.168.74.2 (192.168.74.2) 1.534 ms 1.775 ms 1.961 ms
2 211.151.56.1 (211.151.56.1) 0.508 ms 0.514 ms 0.507 ms
3 211.151.227.206 (211.151.227.206) 0.571 ms 0.558 ms 0.550 ms
4 210.77.139.145 (210.77.139.145) 0.708 ms 0.729 ms 0.785 ms
5 202.106.42.101 (202.106.42.101) 7.978 ms 8.155 ms 8.311 ms
6 bt-228-037.bta.net.cn (202.106.228.37) 772.460 ms bt-228-025.bta.net.cn (202.106.228.25) 2.152 ms 61.148.154.97 (61.148.154.97) 772.107 ms
7 124.65.58.221 (124.65.58.221) 4.875 ms 61.148.146.29 (61.148.146.29) 2.124 ms 124.65.58.221 (124.65.58.221) 4.854 ms
8 123.126.6.198 (123.126.6.198) 2.944 ms 61.148.156.6 (61.148.156.6) 3.505 ms 123.126.6.198 (123.126.6.198) 2.885 ms
9 * * *
10 * * *
```
其它一些实例
```
traceroute -m 10 www.baidu.com # 跳数设置
traceroute -n www.baidu.com # 显示IP地址不查主机名
traceroute -p 6888 www.baidu.com # 探测包使用的基本UDP端口设置6888
traceroute -q 4 www.baidu.com # 把探测包的个数设置为值4
traceroute -r www.baidu.com # 绕过正常的路由表,直接发送到网络相连的主机
traceroute -w 3 www.baidu.com # 把对外发探测包的等待响应时间设置为3秒
```
## netstat
查看Linux中网络系统状态信息
### 补充说明
**netstat命令** 用来打印Linux中网络系统的状态信息可让你得知整个Linux系统的网络情况。
### 语法
```
netstat(选项)
```
### 选项
```
-a或--all显示所有连线中的Socket
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
-c或--continuous持续列出网络状态
-C或--cache显示路由器配置的快取信息
-e或--extend显示网络其他相关信息
-F或--fib显示FIB
-g或--groups显示多重广播功能群组组员名单
-h或--help在线帮助
-i或--interfaces显示网络界面信息表单
-l或--listening显示监控中的服务器的Socket
-M或--masquerade显示伪装的网络连线
-n或--numeric直接使用ip地址而不通过域名服务器
-N或--netlink或--symbolic显示网络硬件外围设备的符号连接名称
-o或--timers显示计时器
-p或--programs显示正在使用Socket的程序识别码和程序名称
-r或--route显示Routing Table
-s或--statistice显示网络工作信息统计表
-t或--tcp显示TCP传输协议的连线状况
-u或--udp显示UDP传输协议的连线状况
-v或--verbose显示指令执行过程
-V或--version显示版本信息
-w或--raw显示RAW传输协议的连线状况
-x或--unix此参数的效果和指定"-A unix"参数相同;
--ip或--inet此参数的效果和指定"-A inet"参数相同。
```
### 实例
**列出所有端口 (包括监听和未监听的)**
```
netstat -a #列出所有端口
netstat -at #列出所有tcp端口
netstat -au #列出所有udp端口
```
**列出所有处于监听状态的 Sockets**
```
netstat -l #只显示监听端口
netstat -lt #只列出所有监听 tcp 端口
netstat -lu #只列出所有监听 udp 端口
netstat -lx #只列出所有监听 UNIX 端口
```
**显示每个协议的统计信息**
```
netstat -s 显示所有端口的统计信息
netstat -st 显示TCP端口的统计信息
netstat -su 显示UDP端口的统计信息
```
**在netstat输出中显示 PID 和进程名称**
```
netstat -pt
```
`netstat -p`可以与其它开关一起使用就可以添加“PID/进程名称”到netstat输出中这样debugging的时候可以很方便的发现特定端口运行的程序。
**在netstat输出中不显示主机端口和用户名(host, port or user)**
当你不想让主机,端口和用户名显示,使用`netstat -n`。将会使用数字代替那些名称。同样可以加速输出,因为不用进行比对查询。
```
netstat -an
```
如果只是不想让这三个名称中的一个被显示,使用以下命令:
```
netsat -a --numeric-ports
netsat -a --numeric-hosts
netsat -a --numeric-users
```
**持续输出netstat信息**
```
netstat -c #每隔一秒输出网络信息
```
**显示系统不支持的地址族(Address Families)**
```
netstat --verbose
```
在输出的末尾,会有如下的信息:
```
netstat: no support for `AF IPX' on this system.
netstat: no support for `AF AX25' on this system.
netstat: no support for `AF X25' on this system.
netstat: no support for `AF NETROM' on this system.
```
**显示核心路由信息**
```
netstat -r
```
使用`netstat -rn`显示数字格式,不查询主机名称。
**找出程序运行的端口**
并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
```
netstat -ap | grep ssh
```
找出运行在指定端口的进程:
```
netstat -an | grep ':80'
```
**显示网络接口列表**
```
netstat -i
```
显示详细信息像是ifconfig使用`netstat -ie`。
**IP和TCP分析**
查看连接某服务端口最多的的IP地址
```
netstat -ntu | grep :80 | awk '{print $5}' | cut -d: -f1 | awk '{++ip[$1]} END {for(i in ip) print ip[i],"\t",i}' | sort -nr
```
TCP各种状态列表
```
netstat -nt | grep -e 127.0.0.1 -e 0.0.0.0 -e ::: -v | awk '/^tcp/ {++state[$NF]} END {for(i in state) print i,"\t",state[i]}'
```
查看phpcgi进程数如果接近预设值说明不够用需要增加
```
netstat -anpo | grep "php-cgi" | wc -l
```