常用linux网络相关命令使用和输出详解

               

2)  网卡驱动程序所在目录
/lib/modules/2.6.29.4-167.fc11.i686.PAE/kernel/drivers/net

3)  查看网卡信息命令
ethtool eth0 (^ 查看网卡信息 ^)
dmesg | grep -i eth (^ 查看网卡信息 ^)


1 tcpdump
http://anheng.com.cn/news/24/586.html

1.1 tcpdump的选项介绍
tcpdump
    -a  将网络地址和广播地址转变成名字;
    -c      在收到指定的包的数目后, tcpdump就会停止;
    -ddd    将匹配信息包的代码以十进制的形式给出;
    -dd     将匹配信息包的代码以c语言程序段的格式给出;
    -d      将匹配信息包的代码以人们能够理解的汇编格式给出;
    -e      在输出行打印出数据链路层的头部信息;
    -F      从指定的文件中读取表达式,忽略其它的表达式;
    -f      将外部的Internet地址以数字的形式打印出来;
    -i      指定监听的网络接口;
    -l      使标准输出变为缓冲行形式;(即: 将数据重定向)
    -nn 不进行端口名称的转换.
    -n      不把网络地址转换成名字;
    -N      不打印出默认的域名.
    -O      不进行匹配代码的优化.
    -r      从指定的文件中读取包(这些包一般通过-w选项产生);
    -tt     打印原始的,未格式化过的时间.
    -T      将监听到的包直接解释为指定的类型的报文, 常见的类型有rpc(远程过
    -t      在输出的每一行不打印时间戳;
    -vv     输出详细的报文信息;
    -v      输出一个稍微详细的信息, 例如在ip包中可以包括ttl和服务类型的信息;
    -w      直接将包写入文件中, 并不分析和打印出来;
        程调用)和snmp(简单网络管理协议;);

Note: 如想dump包给别的软件分析, tcpdump的包长度限制截断默认90个字节一定要去掉.
      即: 加上 -s 0 参数.

1) example
tcpdump -l > tcpcap.txt (^ 将得到的数据存入tcpcap.txt文件中 ^)

1.2 tcpdump的表达式介绍
1)  第一种是关于类型的关键字, 主要包括host, net, port, 例如 host 210.27.48.2,
    指明 210.27.48.2是一台主机, net 202.0.0.0 指明 202.0.0.0是一个网络地址,
    port 23 指明端口号是23. 如果没有指定类型, 缺省的类型是host.

2)  第二种是确定传输方向的关键字, 主要包括src , dst ,dst or src, dst and src ,
    这些关键字指明了传输的方向. 举例说明, src 210.27.48.2 ,指明ip包中源地址是
    210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 . 如果没有指明
    方向关键字, 则缺省是src or dst关键字.

3)  第三种是协议的关键字, 主要包括fddi,ip,arp,rarp,tcp,udp等类型. Fddi指明是在
    FDDI(分布式光纤数据接口网络)上的特定的网络协议, 实际上它是"ether"的别名,
    fddi和ether具有类似的源地址和目的地址, 所以可以将fddi协议包当作ether的包进
    行处理和分析. 其他的几个关键字就是指明了监听的包的协议内容. 如果没有指定任
    何协议, 则tcpdump将会监听所有协议的信息包.

4)  除了这三种类型的关键字之外, 其他重要的关键字如下: gateway,
    broadcast,less,greater,还有三种逻辑运算, 取非运算是 'not' '!', 与运算是
    'and','&&';或运算 是'or' ,'||'; 这些关键字可以组合起来构成强大的组合条件
    来满足人们的需要, 下面举几个例子来说明.

1.3 例子
note: tcpdump 对截获的数据并没有进行彻底解码, 数据包内的大部分内容是使用十六进
    制的形式直接打印输出的. 显然这不利于分析网络故障, 通常的解决办法是先使用带
    -w参数的tcpdump 截获数据并保存到文件中, 然后再使用其他程序进行解码分析. 当
    然也应该定义过滤规则, 以避免捕获的数据包填满整个硬盘.
note: 如果在ethernet 使用混杂模式 系统的日志将会记录
| May  7 20:03:46 localhost kernel: eth0: Promiscuous mode enabled.      |
| May  7 20:03:46 localhost kernel: device eth0 entered promiscuous mode |
| May  7 20:03:57 localhost kernel: device eth0 left promiscuous mode    |
note: ip icmp arp rarp 和 tcp,udp,icmp这些选项等都要放到第一个参数的位置,
    用来过滤数据报的类型.

tcpdump host 210.27.48.1 and (210.27.48.2 or 210.27.48.3) // 截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信
tcpdump host 210.27.48.1 // 截获主机210.27.48.1所有收到的和发出的所有的数据包
tcpdump -i eth0 dst host hostname // 监视所有发送到主机hostname的数据包
tcpdump -i eth0 gateway Gatewayname // 还可以监视通过指定网关的数据包
tcpdump -i eth0 host ! 211.161.223.70 and ! 211.161.223.71 and dst port 80 // 如果条件很多的话  要在条件之前加and 或 or 或 not
tcpdump -i eth0 host hostname and dst port 80 // 只监视发送到80端口的数据包
tcpdump -i eth0 host hostname and port 80 // 监视指定端口的TCP或UDP数据包
tcpdump -i eth0 src host hostname // 只对名为hostname的主机的发出数据包进行监视
tcpdump ip host 210.27.48.1 and ! 210.27.48.2 // 获取主机210.27.48.1和除了主机210.27.48.2之外所有主机通信的ip包
tcpdump src host 192.168.0.1 and dst net 192.168.0.0/24 // 源主机为192.168.0.1与目的网络为192.168.0.0
Tcpdump src host 192.168.0.1 and dst port not telnet // 过滤源主机192.168.0.1和目的端口不是telnet的报头.
tcpdump tcp port 23 host 210.27.48.1 // 获取主机210.27.48.1接收或发出的telnet包
tcpdump udp and src host 192.168.0.1 // 只过滤源主机192.168.0.1的所有udp报头.
tcpdump udp port 123 // 对本机的udp 123 端口进行监视.(123 为ntp的服务端口)


1.4 tcpdump的输出结果介绍
1.4.0 other
[~]#  tcpdump   -i eth1 src  host 211.167.237.199
| 00:02:03.096713 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010208:2010352(144) ack 33377 win 8576 |
| 00:02:03.096951 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010352:2010496(144) ack 33377 win 8576 |
| 00:02:03.100928 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010496:2010640(144) ack 33377 win 8576 |
| 00:02:03.101165 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010640:2010784(144) ack 33377 win 8576 |
| 00:02:03.102554 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010784:2010928(144) ack 33425 win 8576 |
    analysis: 表明在00:02:03点的时候, 211.167.237.199通过ssh源端口连接到221.216.165.189的1467端口

// 截获所有由eth1进入,源地址(src)为211.167.237.199的主机(host), 并且(and)目标
// (dst)端口(port)为1467的数据包:
[~]# tcpdump -i eth1 src host 211.167.237.199 and dst port 1467
| 00:09:27.603075 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 180400:180544(144) ack 2833 win 8576 |
| 00:09:27.605631 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 180544:180688(144) ack 2881 win 8576 |

// 观看网卡传送,接收数据包的状态
[~]$ netstat  -i
| Kernel Interface table                                                  |
| Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg |
| eth0 1500  0  14639   0      0      0    5705    119    0     0   BMRU  |
    analysis: 各字段意思:
    Iface:  网卡
    RX-OK RX-ERR RX-DRP RX-OVR : 网卡正确接收数据包的数量以及发生错误,流失,碰撞的总数
    TX-OK TX-ERR TX-DRP TX-OVR : 网卡正确发送数据包的数量以及发生错误,流失,碰撞的总数

1.4.1 数据链路层头信息
[~]# tcpdump -e host ice
| 21:50:12.847509 eth0 < 8:0:20:79:5b:46   0:90:27:58:af:1a ip 60: h219.33357 > ice.telne t 0:0(0) ack 22535 win 8760 (DF) |

// ice是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A; H219是一台装有SOLARIC
// 的SUN工作站,它的MAC地址是8:0:20:79:5B:46;  上一条命令的输出结果如下所示:
    analysis: 21:50:12是显示的时间,847509是微秒, eth0<表示从网络接口eth0接受该数据包
    ; eth0>表示从网络接口设备发送数据包,8:0:20:79:5b:46是主机H219的MAC地址. 它表
    明是从源地址H219发来的数据包.0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据
    包的目的地址是ICE.ip是表明该数据包是IP数据包,60是数据包的长度,
    h219.33357>ice.telnet表明该数据包是从主机H219的33357端口发往主机ICE的
    TELNET(23)端口.ack22535表明对序列号是22535的包进行响应.win8760表明发送窗
    口的大小是8760.

1.4.2 ARP包的TCPDUMP输出信息
[~]# tcpdump arp
| 22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)             |
| 22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a) |

    analysis: 22:32:42是时间戳, 802509是微秒, eth0 >表明从主机发出该数据包, arp表
    明是ARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址.
    0:90:27:58:af:1a是主机ICE的MAC地址.

1.4.3 TCP包的输出信息
用TCPDUMP捕获的TCP包的一般输出信息格式是:
src > dst: flags data-seqno ack window urgent options
    analysis: src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标
    志, F (FIN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据
    的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数
    据包中是否有紧急指针. Options是选项.

1.4.4 UDP包的输出信息
用TCPDUMP捕获的UDP包的一般输出信息格式是:
route.port1 > ice.port2: udp lenth
    analysis: UDP十分简单, 上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据
    包到主机ICE的port2端口, 类型是UDP,  包的长度是lenth.


2 netstat
netstat主要用于Linux察看自身的网络状况, 如开启的端口,在为哪些用户服务, 以及服
务的状态等. 此外, 它还显示系统路由表,网络接口状态等. 可以说, 它是一个综合性的
网络状态的察看工具. 在默认情况下, netstat只显示已建立连接的端口. 如果要显示处
于监听状态的所有端口, 使用-a参数即可:

2.1 tcpdump的选项介绍
格式:
    netstat [-acCeFghilMnNoprstuvVwx][-A][--ip]
参数:
    -a--all:        显示所有连线中的Socket.
    -A:         列出该网络类型连线中的IP相关地址和网络类型.
    -C--cache:      显示路由器配置的缓冲区信息.
    -c--continuous: 持续列出网络状态.
    -e--extend:     显示网络其它相关信息.
    -F--fib:        显示FIB.
    -g--groups:     显示多重广播功能群组组员名单.
    -h--help:       在线帮助.
    -i--interfaces: 显示网络界面信息表单.
    --ip--inet:     和指定"-A inet"参数相同.
    -l--listening:  显示监控中的服务器的Socket.
    -M--masquerade: 显示伪装的网络连线.
    -N--netlink--symbolic:  显示网络硬件外围设备的符号连接名称.
    -n--numeric:    直接使用IP地址, 而不通过域名服务器.
    -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"参数相同.

2.2 应用实例
netstat -al | grep telnet // (&1&) 查看telnet是否正常启动到监听状态
netstat -aln | grep :23 // (&1&) 查看telnet是否正常启动到监听状态
netstat -tuln | grep ':80' (^ 查看系统是否己启动某一端口号 ^)
netstat -r (^ 查看route表 ^)
netstat -s -u (^ 统计udp数据包信息 ^)


2.3 netstat的输出结果介绍
// 显示处于监听状态的所有端口, 使用-a参数即可:
[~]# netstat -a
Active Internet connections (only servers)
Proto  Recv-Q   Send-Q    Local Address  Foreign Address  State
tcp     0      0   *:32768  *:* LISTEN
tcp     0      0   *:32769  *:* LISTEN
tcp     0      0   *:nfs    *:* LISTEN
tcp     0      0   *:32770  *:* LISTEN
tcp     0      0   *:868    *:* LISTEN
tcp     0      0   *:617    *:* LISTEN
tcp     0      0   *:mysql  *:* LISTEN
tcp     0      0   *:netbios-ssn    *:* LISTEN
tcp     0      0   *:sunrpc *:* LISTEN
tcp     0      0   *:10000  *:* LISTEN
tcp     0      0   *:http   *:* LISTEN
......

Analysis: 上面显示出, 这台主机同时提供HTTP,FTP,NFS,MySQL等服务.


// 观看网卡传送,接收数据包的状态
[~]$ netstat  -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500  0  14639   0      0      0    5705    119    0     0   BMRU

Analysis: 各字段意思:
Iface:  网卡
RX-OK RX-ERR RX-DRP RX-OVR : 网卡正确接收数据包的数量以及发生错误,流失,碰撞的总数
TX-OK TX-ERR TX-DRP TX-OVR : 网卡正确发送数据包的数量以及发生错误,流失,碰撞的总数


3 ping
ping检测主机网络接口状态, 使用权限是所有用户.

3.1 ping的选项介绍
格式:
    ping [-dfnqrRv][-c][-i][-I][-l][-p][-s][-t] IP地址

参数:
    -d:     使用Socket的SO_DEBUG功能.
    -c:     设置完成要求回应的次数.
    -f:     极限检测.
    -i:     指定收发信息的间隔秒数.
    -I:     网络界面使用指定的网络界面送出数据包.
    -l:     前置载入, 设置在送出要求信息之前, 先行发出的数据包.
    -n:     只输出ip, 不试着输出域名.
    -p:     设置填满数据包的范本样式.
    -q:     不显示指令执行过程, 开头和结尾的相关信息除外.
    -r:     忽略普通的Routing Table, 直接将数据包送到远端主机上.
    -R:     记录路由过程.
    -s:     设置数据包的大小.
    -t:     设置存活数值TTL的大小.
    -v:     详细显示指令的执行过程.

Note:
ping命令是使用最多的网络指令, 通常我们使用它检测网络是否连通, 它使用 ICMP协议.
但是有时会有这样的情况, 我们可以浏览器查看一个网页, 但是却无法ping通, 这是因为
一些网站处于安全考虑安装了防火墙. 另外, 也可以在自己计算机上试一试, 通过下面的
方法使系统对ping没有反应:
[~]# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

3.2 例子
// 每隔2秒发送一个数据包
ping -i 2 localhost


4 arp
显示和修改地址解析协议(ARP)使用的"IP 到物理"地址转换表.

4.1 arp的选项介绍
ARP -s inet_addr eth_addr [if_addr]
ARP -d inet_addr [if_addr]
ARP -a [inet_addr] [-N if_addr] [-v]

 -a             通过询问当前协议数据, 显示当前 ARP 项. 如果指定 inet_addr, 则只
        显示指定计算机的 IP 地址和物理地址. 如果不止一个网络接口使用
        ARP, 则显示每个ARP 表的项.
 -g             与 -a 相同.
 -v             在详细模式下显示当前 ARP 项. 所有无效项和环回接口上的项都将显示
 inet_addr      指定 Internet 地址.
 -N if_addr     显示 if_addr 指定的网络接口的 ARP 项.
 -d             删除 inet_addr 指定的主机. inet_addr 可以是通配符 *, 以删除所有
        主机.
 -s             添加主机并且将 Internet 地址 inet_addr与物理地址 eth_addr 相关
        联. 物理地址是用连字符分隔的 6 个十六进制字节. 该项是永久的.
 eth_addr       指定物理地址.
 if_addr        如果存在, 此项指定地址转换表应修改的接口的 Internet 地址. 如果
        不存在, 则使用第一个适用的接口.

4.2 示例:
arp -d 10.3.10.254 // Remove any entry for host: 10.3.10.254
arp -d IP // 删除
arp -s IP MAC // 添加
arp // 查看ARP缓存

4.3 arp输出解释 ?????

// 添加静态项. 这个很有用, 特别是局域网中中了arp病毒以后
[~]$ arp -s 123.253.68.209 00:19:56:6F:87:D2
Note:   arp -s 设置的静态项在用户登出之后或重起之后会失效, 如果想要任何时候都
    不失效, 可以将ip和mac的对应关系写入arp命令默认的配置文件/etc/ethers中,
    写入之后执行下面的命令就好了.
[~]# vi /etc/ethers
| 211.144.68.254 00:12:D9:32:BF:44 |


5. ifconfig
5.1 ifconfig的选项介绍
语 法:
    ifconfig [interface][down up -allmulti -arp -promisc][add<地址>][del<
    地址>][<class> <address>][io_addr][irq ][media<网络>媒介类型
    >][mem_start<内存地址>][metric<数目>][mtu<字节>][netmask< >子网掩码
    >][tunnel<地址>][-broadcast<地址>] [-pointopoint<地址>>][IP地址]

参 数: ( - 应该是 [-] )
    add<地址> 设置网络设备IPv6的IP地址.
    -allmulti 允许或禁止组播模式(all-multicast). 如果选用, 则接口可以接收网络上的所有组播分组.
    -broadcast<地址> 设置广播地址
    del<地址> 删除网络设备IPv6的IP地址.
    down 关闭指定的网络设备.
    dstaddr addr 为点到点链路(如 PPP )设定一个远程 IP 地址. 此选项现已废弃; 用 pointopoint 选项替换.
    hw class address 如接口驱动程序支持, 则设定接口的硬件地址.
    [Interface] 指定网络设备的名称.
    io_addr 设置网络设备的I/O地址.
    [IP地址] 指定网络设备的IP地址.
    irq addr 为接口设定所用的中断值. 并不是所有的设备都能动态更改自己的中断值.
    media<网络媒介类型> 设置网络设备的媒介类型.
    mem_start<内存地址> 设置网络设备在主内存所占用的起始地址.
    metric<数目> 指定在计算数据包的转送次数时, 所要加上的数目.
    mtu<字节> 设置网络设备的MTU.
    multicast 为接口设定组播标志. 通常无须用此选项因为接口本身会正确设定此标志.
    netmask<子网掩码> 设置网络设备的子网掩码.
    -pointopoint<地址> 与指定地址的网络设备建立直接连线, 此模式具有保密功能.
    -promisc 关闭或启动指定网络设备的promiscuous模式.
    tunnel<地址> 建立IPv4与IPv6之间的隧道通信地址.
    txqueuelen length 为接口设定传输队列的长度
    up 启动指定的网络设备.
    media type  设定接口所用的物理端口或介质类型. 并不是所有设备都会更改这
            项值, 而且它们支持的类型可能并相同. 典型的 type 是 10base2
            (细缆以太网),  10baseT (双绞线 10Mbps 以太网),  AUI (外部
            收发单元接口)等等. 介质类型为 auto 则用于让设备自动判断介
            质. 同样, 并非所有设备都可以这样工作.


5.2 ifconfig的输出结果介绍

5.3 例子
ifconfig eth0:1 192.168.4.2 // 配置eth0别名设备eth0:1的IP
ifconfig eth0 192.168.4.1 netmask 255.255.255.0 up (^ 配置eth0的IP,同时激活设备 ^)
ifconfig eth0:1 up(down) // 示例3:激活(禁用)设备
ifconfig (eth0) // 示例4:查看所有(指定)网络接口配置
ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx // 配置网卡的硬件地址


6. route
6.1 route的选项介绍
设置和查看路由表都可以用 route 命令, 设置内核路由表的命令格式是:
语 法:
    route  [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
参 数:
    add : 添加一条路由规则
    del : 删除一条路由规则
    dev : 为路由指定的网络接口
    gw : 路由数据包通过的网关
    -host : 目的地址是一个主机
    netmask : 目的地址的网络掩码
    -net : 目的地址是一个网络
    target : 目的网络或主机

6.2 tcpdump的输出结果介绍
[root scr]$ route
 Kernel IP routing table
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 192.168.4.0     *               255.255.255.0   U     0      0        0 eth0
 192.168.50.0    *               255.255.255.0   U     0      0        0 eth0
 10.3.10.0       *               255.255.255.0   U     0      0        0 eth0
 link-local      *               255.255.0.0     U     1002   0        0 eth0
 default         10.3.10.254     0.0.0.0         UG    0      0        0 eth0

    analysis: route 命令的输出项说明
    (输出项)     (说明)
    Destination 目标网段或者主机
    Gateway     网关地址, "*" 表示目标是本主机所属的网络, 不需要路由
    Genmask     网络掩码
    Flags   标记. 一些可能的标记如下:
        U - 路由是活动的
        H - 目标是一个主机
        G - 路由指向网关
        R - 恢复动态路由产生的表项
        D - 由路由的后台程序动态地安装
        M - 由路由的后台程序修改
        ! - 拒绝路由
    Metric  路由距离, 到达指定网络所需的中转数
    Ref     路由项引用次数(linux 内核中没有使用)
    Use     此路由项被路由软件查找的次数
    Iface   该路由表项对应的输出接口

6.3 例子
route add default gw 10.3.10.254 // 添加默认网关
route add -host 192.168.4.1 gw 192.168.4.250 // 添加到主机的路由(UGH)
route add -host 192.168.4.2 dev eth0:1 // 添加到主机的路由(UH)
route add -net 192.168.4.0/24 eth0 // (&1&) 添加到网络的路由(U)
route add -net 192.168.4.0/24 gw 192.168.4.2 eth0 // (&4&) 添加到网络的路由(UG)
route add -net 192.168.4.0 netmask 255.255.255.0 eth0 // (&1&) 添加到网络的路由(U)
route add -net 192.168.4.0 netmask 255.255.255.0 gw 192.168.4.2 eth0 // (&4&) 添加到网络的路由(UG)
route del -host 192.168.4.1 // (&3&) 删除到主机的路由
route del -host 192.168.4.1 dev eth0 // (&3&) 删除到主机的路由
route del -net 0.0.0.0/0 // 删除默认网关
route del -net 192.168.4.0/24 eth0 // (&2&) 删除到网络路由
route del -net 192.168.4.0 netmask 255.255.255.0 eth0 // (&2&) 删除到网络路由
route -n // 查看路由信息, -n 表示不解析名字,列出速度会比route 快
route // 查看路由信息

7. ip
ip是iproute2软件包里面的一个强大的网络配置工具, 它能够替代一些传统的网络管理工
具. 例如: ifconfig,route等.

7.1 ip的选项介绍
语 法:
    ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]
参数:
    OPTIONS 是修改ip行为或改变其输出的选项. 所有的选项都是以-字符开头, 分为长,
        短两种形式. 目前, ip支持如(表1)所示选项.
    OBJECT  是要管理者获取信息的对象. 目前ip认识的对象见(表2)所示.
    COMMAND 设置针对指定对象执行的操作, 它和对象的类型有关. 一般情况下, ip支持
        对象的增加(add),删除(delete)和展示(show或list). 有些对象不支持这些
        操作, 或者有其它的一些命令. 对于所有的对象, 用户可以使用help命令获
        得帮助. 这个命令会列出这个对象支持的命令和参数的语法. 如果没有指定
        对象的操作命令, ip会使用默认的命令. 一般情况下, 默认命令是list, 如
        果对象不能列出, 就会执行help命令.
    ARGUMENTS   是命令的一些参数, 它们倚赖于对象和命令. ip支持两种类型的参数:
        flag和parameter. flag由一个关键词组成; parameter由一个关键词加一个
        数值组成. 为了方便, 每个命令都有一个可以忽略的默认参数. 例如, 参数
        dev是ip link命令的默认参数, 因此ip link ls eth0等于ip link ls dev
        eth0. 我们将在后面的详细介绍每个命令的使用, 命令的默认参数将使用
        default标出.

    (表1: ip支持的选项)
    -0          是-family link的简写.
    -4          是-family inet的简写.
    -6          是-family inet6的简写.
    -f,-family      这个选项后面接协议种类, 包括inet,inet6或link, 强调使用的协
            议种类. 如果没有足够的信息告诉ip使用的协议种类, ip就会使用
            默认值inet或any.  link比较特殊, 它表示不涉及任何网络协议.
    -o,-oneline     对每行记录都使用单行输出, 回行用字符代替. 如果需要使用
            wc,grep等工具处理ip的输出, 则会用到这个选项.
    -r,-resolve     查询域名解析系统, 用获得的主机名代替主机IP地址
    -s,-stats,-statistics   输出更为详尽的信息. 如果这个选项出现两次或多次, 则
            输出的信息将更为详尽.
    -V,-Version     打印ip的版本并退出.

    (表2: ip认识的对象)
    link    网络设备
    address 设备的协议(ip或ipv6)地址
    neighbour   ARP或NDISC缓冲区条目
    route   路由表条目
    rule    路由策略数据库中的规则
    maddress    多播地址
    mroute  多播路由缓冲区条目
    tunnel  IP上的通道

Note: 从Linux-2.2开始, 内核把路由归纳到许多路由表中, 这些表都进行了编号, 编号
数字的范围是1到255. 另外, 为了方便, 还可以在 /etc/iproute2/rt_tables 中为路由
表命名.  默认情况下, 所有的路由都会被插入到表main(编号254)中. 在进行路由查询时
, 内核只使用路由表main.

Note: 策略路由(policy routing)不等于路由策略(rouing policy).在某些情况下, 我们
不只是需要通过数据包的目的地址决定路由, 可能还需要通过其他一些域: 源地址,IP协
议,传输层端口甚至数据包的负载.这就叫做: 策略路由(policy routing).


7.2 例子
ip -4 addr flush label "eth0" // 取消所有以太网卡的IP地址
ip -4 route flush scope global type unicast
ip -6 -s -s route flush cache
[ip address add 0-- 添加一个新的协议地址; 缩写add, a.  note:为了和Linux-2.0的网络别名兼容, 标签必须以设备名开头, 后接着一个冒号.]
ip address add 192.168.4.2/24 brd + dev eth1 label eth1:1 // 等于传统的: ifconfig eth1:1 192.168.4.2
ip address add local 192.168.4.1/28 brd + label eth0:1 dev eth0
[ip address delete 0--删除一个协议地址. 缩写: delete,del,d]
ip address delete 192.168.4.1/24 brd + dev eth0 label eth0:Alias1
[ip address flush--清除协议地址. 缩写: flush,f]
[ip address show 0--显示协议地址. 缩写: show,list,lst,sh,ls,l]
ip address show eth0
[ip link set 0-- 改变设备的属性. 缩写set: s]
ip link set dev eth0 address 00:01:4f:00:15:f1 // 修改网络设备的MAC地址.
ip link set dev eth0 mtu 1500 // 改变网络设备MTU(最大传输单元)的值.
ip link set dev eth0 txqueuelen 100 // 改变设备传输队列的长度.
ip link set dev eth0 up // up/down 起动/关闭设备; 等于传统的 # ifconfig eth0 up(down)
[ip link show 0-- 显示设备属性. 缩写show: list lst sh ls l. note: -s选项出现两次或者更多次, ip会输出更为详细的错误信息统计.]
[ip maddress  0-- 多播地址管理.缩写: show,list,sh,ls,l]
[ip maddress add  0-- 加入多播地址]
[ip maddress delete  0-- 删除多播地址 缩写: add,a; delete,del,d]
[ip maddress show  0-- 列出多播地址]
ip maddr ls dummy
ip monitor file /var/log/rtmon.log r
[ip monitor和rtmon  0-- 状态监视. 命令选项的格式: ip monitor [ file FILE ] [ all | OBJECT-LIST ]]
[ip mroute  0-- 多播路由缓存管理]
[ip mroute show  0-- 列出多播路由缓存条目.缩写: show,list,sh,ls,l]
ip mroute show // 查看
[ip neighbour 0--neighbour/arp表管理命令缩写 neighbour,neighbor,neigh,n. 命令 add,change,replace,delete,fulsh,show(或者list)]
[ip neighbour add 0-- 添加一个新的邻接条目]
ip neighbour add 10.0.0.3 lladdr 0:0:0:0:0:1 dev eth0 nud perm // 增加arp
[ip neighbour change 0--修改一个现有的条目]
ip neighbour chg 10.0.0.3 dev eth0 nud reachable // 把状态改为reachable
[ip neighbour delete 0--删除一个邻接条目]
ip neighbour delete 10.0.0.3 dev eth0 // 删除设备eth0上的一个ARP条目10.0.0.3
[ip neighbour flush 0--清除邻接条目. 缩写: flush,f]
[ip neighbour replace 0--替换一个已有的条目.缩写: add,a; change,chg; replace,repl]
[ip neighbour show 0--显示网络邻居的信息. 缩写: show,list,sh,ls]
ip -o maddr ls dummy // 查看在网络接口上监听的链路层多播地址
ip -o route ls cloned | wc // 计算路由缓存里面的条数. 由于被缓存路由的属性可能大于一行, 以此需要使用-o选项
[ip route  0-- 路由策略数据库管理命令.命令:add,delete,show(或者list)]
[ip route add 0-- 添加新路由]
ip route add 10.0.0/24 via 193.233.7.65 // 设置到网络10.0.0/24的路由经过网关193.233.7.65
ip route add default scope global nexthop dev ppp0 nexthop dev ppp1 // 这个路由要经过网关而不是直连的.
ip route add nat 10.0.0.5 via 9.2.7.3 // 设置NAT路由. 在转发来自10.0.0.5的数据包之前, 先进行网络地址转换, 把这个地址转换为9.2.7.3
[ip route change 0-- 修改路由]
ip route chg 10.0.0/24 dev dummy // 修改到网络10.0.0/24的直接路由, 使其经过设备dummy
[ip route delete 0-- 删除路由 缩写: delete,del,d]
ip route delete default scope global nexthop dev ppp0 nexthop dev ppp1 // 删除上一节命令加入的多路径路由
[ip route flush  0-- 擦除路由表]
ip route flush cache // 清除所有ipv4路由cache
[ip route get  0-- 获得单个路由 .缩写: get,g]
ip route get 193.233.7.82 from 193.233.7.82 iif eth0
ip route get 193.233.7.82 // 搜索到193.233.7.82的路由
[ip route replace 0-- 替换已有的路由. 缩写: add,a; change,chg; replace,repl]
ip route replace default equalize nexthop via 211.139.218.145 dev eth0 weight 1 nexthop via 211.139.218.145 dev eth1 weight 1 // 实现数据包级负载平衡,允许把数据包随机从多个路由发出. weight 可以设置权重.
ip route replace default scope global nexthop dev ppp0 nexthop dev ppp1
[ip route show <0>table TABLEID 列出路由表TABLEID里面的路由.  TABLEID或者是一个真正的路由表ID或者是/etc/iproute2/rt_tables文件定义的字符串, 或者是以下的特殊值: all: 列出所有表的路由; cache: 列出路由缓存的内容.]
[ip route show  0-- 列出路由 缩写: show,list,sh,ls,l]
ip route show 193.233.7.82 tab cache // // 列出cache路由表的内容
ip route show proto gated/bgp | wc // 计算使用gated/bgp协议的路由个数
ip route show table fddi153 // 列出某个路由表的内容
ip route show // 列出默认路由表的内容. 这个命令等于传统的: route
[ip rule add  0-- 插入新的规则]
ip rule add from 192.203.80/24 table inr.ruhep prio 220 // 通过路由表inr.ruhep路由来自源地址为192.203.80/24的数据包
ip rule add from 9.3.7.8 nat 9.0.0.4 table 1 prio 320 // 把源地址为9.3.7.8的数据报的源地址转换为9.0.0.4, 并通过表1进行路由
[ip rule delete  0-- 删除规则.缩写: add,a; delete,del,d]
ip rule del prio 32767 // 删除无用的缺省规则
[ip rule show  0-- 列出路由规则.缩写: show,list,sh,ls,l]
ip rule show // 列出路由规则
ip -s mroute ls 224.66/16 // 查看多播
ip -s neighbour ls 193.233.7.254
ip -s route flush proto gated/bgp
ip -s -s a flush to 10/8
ip -s -s link show eth0 // 等于传统的 ifconfig eth0
ip -s -s neighbour flush 193.233.7.254
ip -s tunnel ls Cisco // 列出现有的通道
[ip tunnel  0-- 通道配置. 缩写 tunnel,tunl]
[ip tunnel add  0-- 添加新的通道]
ip tunnel add Cisco mode sit remote 192.31.7.104 local 192.203.80.1 ttl 32 // 建立一个点对点通道, 最大TTL是32
[ip tunnel change  0-- 修改现有的通道]
[ip tunnel delete  0-- 删除一个通道.缩写: add,a; change,chg; delete,del,d]
[ip tunnel show  0-- 列出现有的通道.缩写: show,list,sh,ls,l]
rtmon file /var/log/rtmon.log


8. telnet
telnet表示开启终端机阶段作业, 并登入远端主机. telnet是一个Linux命令, 同时也是
一个协议(远程登陆协议).

8.1 telnet的选项介绍
格式:
    telnet [-8acdEfFKLrx][-b][-e][-k][-l][-n][-S][-X][主机名称IP地址<通信端口>]
参数:
    -8:    允许使用8位字符资料, 包括输入与输出.
    -a:    尝试自动登入远端系统.
    -b:    使用别名指定远端主机名称.
    -c:    不读取用户专属目录里的.telnetrc文件.
    -d:    启动排错模式.
    -E:    滤除脱离字符.
    -e:    设置脱离字符.
    -f:    此参数的效果和指定"-F"参数相同.
    -F:    使用Kerberos V5认证时, 加上此参数可把本地主机的认证数据上传到远端主机.
    -K:    不自动登入远端主机.
    -k:    使用Kerberos认证时, 加上此参数让远端主机采用指定的领域名, 而非该主机的域名.
    -L:    允许输出8位字符资料.
    -l:    指定要登入远端主机的用户名称.
    -n:    指定文件记录相关信息.
    -r:    使用类似rlogin指令的用户界面.
    -S:    服务类型, 设置telnet连线所需的IP TOS信息.
    -X:    关闭指定的认证形态.
    -x:    假设主机有支持数据加密的功能, 就使用它.

8.2 应用说明
用户使用telnet命令可以进行远程登录, 并在远程计算机之间进行通信. 用户通过网络在
远程计算机上登录, 就像登录到本地机上执行命令一样. 为了通过 telnet登录到远程计
算机上, 必须知道远程机上的合法用户名和口令. 虽然有些系统确实为远程用户提供登录
功能, 但出于对安全的考虑, 要限制来宾的操作权限, 因此, 这种情况下能使用的功能是
很少的.

telnet只为普通终端提供终端仿真, 而不支持X-Window等图形环境. 当允许远程用户登录
时, 系统通常把这些用户放在一个受限制的Shell中, 以防系统被怀有恶意的或不小心的
用户破坏. 用户还可以使用telnet从远程站点登录到自己的计算机上, 检查电子邮件,编
辑文件和运行程序, 就像在本地登录一样.

9. ftp
ftp命令进行远程文件传输. FTP是ARPANet的标准文件传输协议, 该网络就是现今
Internet的前身, 所以ftp既是协议又是一个命令.

9.1 ftp的选项介绍
格式:
    ftp [-dignv][主机名称IP地址]
参数:
    -d:    详细显示指令执行过程, 便于排错分析程序执行的情形.
    -i:    关闭互动模式, 不询问任何问题.
    -g:    关闭本地主机文件名称支持特殊字符的扩充特性.
    -n:    不使用自动登陆.
    -v:    显示指令执行过程.

9.2 应用说明
ftp命令是标准的文件传输协议的用户接口, 是在TCP/IP网络计算机之间传输文件简单有
效的方法, 它允许用户传输ASCⅡ文件和二进制文件. 为了使用 ftp来传输文件, 用户必
须知道远程计算机上的合法用户名和口令. 这个用户名/口令的组合用来确认ftp会话, 并
用来确定用户对要传输的文件进行什么样的访问. 另外, 用户需要知道对其进行ftp会话
的计算机名字的IP地址.

用户可以通过使用ftp客户程序, 连接到另一台计算机上; 可以在目录中上下移动,列出目
录内容; 可以把文件从远程计算机机拷贝到本地机上; 还可以把文件从本地机传输到远程
系统中. ftp内部命令有72个, 下面列出主要几个内部命令:

ls: 列出远程机的当前目录.
cd: 在远程机上改变工作目录.
lcd: 在本地机上改变工作目录.
close: 终止当前的ftp会话.
hash: 每次传输完数据缓冲区中的数据后就显示一个#号.
get(mget): 从远程机传送指定文件到本地机.
put(mput): 从本地机传送指定文件到远程机.
quit: 断开与远程机的连接, 并退出ftp.

9.3 ftp匿名登录的方法
FTP的匿名登录一般有三种:
1) 用户名: anonymous 密码: Email或者为空
2) 用户名: FTP 密码: FTP或者为空
3) 用户名: USER 密码: pass



10. rlogin
rlogin用来进行远程注册.

10.1 tcpdump的选项介绍
格式:
    rlogin [ -8EKLdx ] [ -e char ] [-k realm ] [ - l username ] host
参数:
    -8:     此选项始终允许8位输入数据通道. 该选项允许发送格式化的ANSI字符和其
        它的特殊代码. 如果不用这个选项, 除非远端的不是终止和启动字符, 否则
        就去掉奇偶校验位.
    -E:     停止把任何字符当作转义字符. 当和-8选项一起使用时, 它提供一个完全的
        透明连接.
    -K:     关闭所有的Kerberos确认. 只有与使用Kerberos 确认协议的主机连接时才
        使用这个选项.
    -L:     允许rlogin会话在litout模式中运行. 要了解更多信息, 请查阅tty联机帮助
    -d:     打开与远程主机进行通信的TCP sockets的socket调试. 要了解更多信息,
        请查阅setsockopt的联机帮助.
    -e:     为rlogin会话设置转义字符, 默认的转义字符是"~".
    -k:     请求rlogin获得在指定区域内远程主机的Kerberos许可, 而不是获得由
        krb_realmofhost(3)确定的远程主机区域内的远程主机的Kerberos许可.
    -x:     为所有通过rlogin会话传送的数据打开DES加密. 这会影响响应时间和CPU利
        用率, 但是可以提高安全性.

10.2 使用说明
如果在网络中的不同系统上都有账号, 或者可以访问别人在另一个系统上的账号, 那么要
访问别的系统中的账号, 首先就要注册到系统中, 接着通过网络远程注册到账号所在的系
统中. rlogin可以远程注册到别的系统中, 它的参数应是一个系统名.


11. rcp
rcp代表远程文件拷贝, 用于计算机之间文件拷贝, 使用权限是所有用户.

11.1 rcp的选项介绍
格式:
    rcp [-px] [-k realm] file1 file2 rcp [-px] [-r] [-k realm] file
参数:
    -r:    递归地把源目录中的所有内容拷贝到目的目录中. 要使用这个选项, 目的必
       须是一个目录.
    -p:    试图保留源文件的修改时间和模式, 忽略umask.
    -k:    请求rcp获得在指定区域内的远程主机的Kerberos许可, 而不是获得由
       krb_relmofhost(3)确定的远程主机区域内的远程主机的Kerberos许可.
    -x:    为传送的所有数据打开DES加密.

12. finger
finger用来查询一台主机上的登录账号的信息, 通常会显示用户名,主目录,停滞时间,登
录时间,登录Shell等信息, 使用权限为所有用户.

12.1 tcpdump的选项介绍
格式:
    finger [选项] [使用者] [用户@主机]
参数:
    -s:    显示用户注册名,实际姓名,终端名称,写状态,停滞时间,登录时间等信息.
    -l:    除了用-s选项显示的信息外, 还显示用户主目录,登录Shell,邮件状态等信息
       , 以及用户主目录下的.plan,.project和.forward文件的内容.
    -p:    除了不显示.plan文件和.project文件以外, 与-l选项相同.

12.2 应用实例
[root@localhost root]# finger
Login  Name  Tty    Idle  Login Time  Office  Office Phone
root   root  tty1      2  Dec 15 11
root   root  pts/0     1  Dec 15 11
root   root  *pts/1       Dec 15 11

12.3 应用说明
如果要查询远程机上的用户信息, 需要在用户名后面接"@主机名", 采用[用户名@主机名]
的格式, 不过要查询的网络主机需要运行finger守护进程的支持.


13. mail
mail作用是发送电子邮件, 使用权限是所有用户. 此外, mail还是一个电子邮件程序.

13.1 mail的选项介绍
格式:
    mail  [-s subject] [-c address] [-b address]
    mail -f [mailbox]mail [-u user]
参数:
    -b address:     表示输出信息的匿名收信人地址清单.
    -c address:     表示输出信息的抄送()收信人地址清单.
    -f [mailbox]:   从收件箱者指定邮箱读取邮件.
    -s subject:     指定输出信息的主体行.
    [-u user]:      端口指定优化的收件箱读取邮件.

14. nslookup
nslookup命令的功能是查询一台机器的IP地址和其对应的域名. 使用权限所有用户. 它通
常需要一台域名服务器来提供域名服务. 如果用户已经设置好域名服务器, 就可以用这个
命令查看不同主机的IP地址对应的域名.

14.1 nslookup的选项介绍
格式:
    nslookup [IP地址/域名]

14.2 应用实例
// (1)在本地计算机上使用nslookup命令
[~]$ nslookup
Default Server: name.cao.com.cn
Address: 192.168.1.9
>

在符号">"后面输入要查询的IP地址域名, 并回车即可. 如果要退出该命令, 输入"exit",
并回车即可.

// (2)使用nslookup命令测试named
[~]$: nslookup

note:
进入交换式nslookup环境. 如果named正常启动, 则nslookup会显示当前DNS服务器的地址
和域名, 否则表示named没能正常启动.

14.3 一些基本的DNS诊断.
1)  检查正向DNS解析, 在 nslookup提示符下输入带域名的主机名, 如hp712.my.com,
    nslookup应能显示该主机名对应的IP地址. 如果只输入 hp712, nslookup会根据
    /etc/resolv.conf 的定义, 自动添加my.com域名, 并回答对应的IP地址.
2)  检查反向DNS解析, 在nslookup提示符下输入某个IP地址, 如192.22.33.20,
    nslookup应能回答该IP地址所对应的主机名.
3)  检查MX邮件地址记录在nslookup提示符下输入:
    set q=mx
    然后输入某个域名, 输入my.com和mail.my.com, nslookup应能够回答对应的邮件服
    务器地址, 即support.my.com和support2.my.com.


15. whois
whois 命令列出给出的域名的域名所有者的信息.

15.1 tcpdump的选项介绍
格式:
    whois [hp] 查询内容
参数:
    -h    主机, 在它的数据库中存有识别信息.
    -p    连接到指定端口.

15.2 实例
[~]# whois hscripts.com
| [Querying whois.internic.net]                   |
| [Redirected to whois.PublicDomainRegistry.com]  |
| [Querying whois.PublicDomainRegistry.com]       |
| [whois.PublicDomainRegistry.com]                |
| Registration Service Provided By: HIOX INDIA    |
| Contact: +91.4226547769                         |

| Domain Name: HSCRIPTS.COM                       |

| Registrant:                                     |
|     HIOX INDIA                                  |
|     Rajesh Kumar        ([email protected]) |
|     32, North Street, Krishnapuram, Singanallur |
|     Coimbatore                                  |
|     tamil nadu,641005                           |
|     IN                                          |
|     Tel. +91.04225547769                        |

| Creation Date: 06-Oct-2004                      |
| Expiration Date: 06-Oct-2008                    |

| Domain servers in listed order:                 |
|     ns1.hscripts.com                            |
|     ns2.hscripts.com                            |


| Administrative Contact:                         |
|     HIOX INDIA                                  |
|     ... ...                                     |

16. dig
在unix和linux下, 建议大家使用 dig 命令来代替 nslookup.  dig 命令的功能比
nslookup 强大很多, 不像 nslookkup 还得 set 来 set 去的, 怪麻烦的. 下面是 dig
的一些比较常用的命令:

dig @bind_dns_server CHAOS TXT version.bind // 查看 bind 的版本号
dig +norec @F.ROOT-SERVERS.NET HOSTNAME.BIND CHAOS TXT // 查看你使用的是哪个 F root dns server
dig @server sina.com.cn.  // dig 最基本的用法
dig @server zx.xmgd.com. AXFR // 用 dig 查看 zone 数据传输
dig @server zx.xmgd.com. IXFR=N // 用 dig 查看 zone 数据的增量传输
dig -x 210.52.83.228 @server // 用 dig 查看反向解析
dig xmgd.com. +nssearch // 查找一个域的授权 dns 服务器
dig xmgd.com +trace // 从根服务器开始追踪一个域名的解析过程



17. 端口扫描程序nmap使用手册
// 扫描网段, 并试着查出其操作系统类型(-O)
[root scr]$ nmap -sS -O 10.3.10.254/24

http://linux.chinaunix.net/doc/safe/2005-01-30/1004.shtml
作者: 包子 2005-01-30 13:46:52 来自: Linux先生

其实还是建议看英文的man, 对以后学习其他东西很有帮助的: )


摘要
    nmap是一个网络探测和安全扫描程序, 系统管理者和个人可以使用这个软件扫描大型的网络, 获取那台主机正在运行以及提供什么服务等信息. nmap支持很多扫描技术, 例如: UDP,TCP connect(),TCP SYN(半开扫描),ftp代理(bounce攻击),反向标志,ICMP,FIN,ACK扫描,圣诞树(Xmas Tree),SYN扫描和null扫描. 从扫描类型一节可以得到细节. nmap还提供了一些高级的特征, 例如: 通过TCP/IP协议栈特征探测操作系统类型, 秘密扫描, 动态延时和重传计算, 并行扫描, 通过并行ping扫描探测关闭的主机, 诱饵扫描, 避开端口过滤检测, 直接RPC扫描(无须端口影射), 碎片扫描, 以及灵活的目标和端口设定.

--------------------------------------------------------------------------------
1.名称

nmap-网络探测和安全扫描工具

2.语法

nmap [Scan Type(s)] [Options]

3.描述

    nmap是一个网络探测和安全扫描程序, 系统管理者和个人可以使用这个软件扫描大型的网络, 获取那台主机正在运行以及提供什么服务等信息. nmap支持很多扫描技术, 例如: UDP,TCP connect(),TCP SYN(半开扫描),ftp代理(bounce攻击),反向标志,ICMP,FIN,ACK扫描,圣诞树(Xmas Tree),SYN扫描和null扫描. 从扫描类型一节可以得到细节. nmap还提供了一些高级的特征, 例如: 通过TCP/IP协议栈特征探测操作系统类型, 秘密扫描, 动态延时和重传计算, 并行扫描, 通过并行ping扫描探测关闭的主机, 诱饵扫描, 避开端口过滤检测, 直接RPC扫描(无须端口影射), 碎片扫描, 以及灵活的目标和端口设定.

    为了提高nmap在non-root状态下的性能, 软件的设计者付出了很大的努力. 很不幸, 一些内核界面(例如raw socket)需要在root状态下使用. 所以应该尽可能在root使用nmap.

    nmap运行通常会得到被扫描主机端口的列表. nmap总会给出well known端口的服务名(如果可能),端口号,状态和协议等信息. 每个端口的状态有: open,filtered,unfiltered. open状态意味着目标主机能够在这个端口使用accept()系统调用接受连接. filtered状态表示: 防火墙,包过滤和其它的网络安全软件掩盖了这个端口, 禁止 nmap探测其是否打开. unfiltered表示: 这个端口关闭, 并且没有防火墙/包过滤软件来隔离nmap的探测企图. 通常情况下, 端口的状态基本都是unfiltered状态, 只有在大多数被扫描的端口处于filtered状态下, 才会显示处于unfiltered状态的端口.

    根据使用的功能选项, nmap也可以报告远程主机的下列特征: 使用的操作系统,TCP序列,运行绑定到每个端口上的应用程序的用户名,DNS名,主机地址是否是欺骗地址,以及其它一些东西.

4.功能选项

    功能选项可以组合使用. 一些功能选项只能够在某种扫描模式下使用. nmap会自动识别无效或者不支持的功能选项组合, 并向用户发出警告信息.

    如果你是有经验的用户, 可以略过结尾的示例一节. 可以使用nmap -h快速列出功能选项的列表.

4.1 扫描类型

    -sT
    TCP connect()扫描: 这是最基本的TCP扫描方式. connect()是一种系统调用, 由操作系统提供, 用来打开一个连接. 如果目标端口有程序监听,  connect()就会成功返回, 否则这个端口是不可达的. 这项技术最大的优点是, 你勿需root权限. 任何UNIX用户都可以自由使用这个系统调用. 这种扫描很容易被检测到, 在目标主机的日志中会记录大批的连接请求以及错误信息.
    -sS
    TCP同步扫描(TCP SYN): 因为不必全部打开一个TCP连接, 所以这项技术通常称为半开扫描(half-open). 你可以发出一个TCP同步包(SYN), 然后等待回应. 如果对方返回SYN|ACK(响应)包就表示目标端口正在监听; 如果返回RST数据包, 就表示目标端口没有监听程序; 如果收到一个SYN|ACK包, 源主机就会马上发出一个RST(复位)数据包断开和目标主机的连接, 这实际上有我们的操作系统内核自动完成的. 这项技术最大的好处是, 很少有系统能够把这记入系统日志. 不过, 你需要root权限来定制SYN数据包.
    -sF -sF -sN
    秘密FIN数据包扫描,圣诞树(Xmas Tree),空(Null)扫描模式: 即使SYN扫描都无法确定的情况下使用. 一些防火墙和包过滤软件能够对发送到被限制端口的SYN数据包进行监视, 而且有些程序比如synlogger和courtney能够检测那些扫描. 这些高级的扫描方式可以逃过这些干扰. 这些扫描方式的理论依据是: 关闭的端口需要对你的探测包回应RST包, 而打开的端口必需忽略有问题的包(参考RFC 793第64页). FIN扫描使用暴露的FIN数据包来探测, 而圣诞树扫描打开数据包的FIN,URG和PUSH标志. 不幸的是, 微软决定完全忽略这个标准, 另起炉灶. 所以这种扫描方式对Windows95/NT无效. 不过, 从另外的角度讲, 可以使用这种方式来分别两种不同的平台. 如果使用这种扫描方式可以发现打开的端口, 你就可以确定目标注意运行的不是Windows系统. 如果使用-sF,-sX或者-sN扫描显示所有的端口都是关闭的, 而使用SYN扫描显示有打开的端口, 你可以确定目标主机可能运行的是Windwos系统. 现在这种方式没有什么太大的用处, 因为nmap有内嵌的操作系统检测功能. 还有其它几个系统使用和windows同样的处理方式, 包括Cisco,BSDI,HP/UX,MYS,IRIX. 在应该抛弃数据包时, 以上这些系统都会从打开的端口发出复位数据包.
    -sP
    ping扫描: 有时你只是想知道此时网络上哪些主机正在运行. 通过向你指定的网络内的每个IP地址发送ICMP echo请求数据包, nmap就可以完成这项任务. 如果主机正在运行就会作出响应. 不幸的是, 一些站点例如: microsoft.com阻塞ICMP echo请求数据包. 然而, 在默认的情况下nmap也能够向80端口发送TCP ack包, 如果你收到一个RST包, 就表示主机正在运行. nmap使用的第三种技术是: 发送一个SYN包, 然后等待一个RST或者SYN/ACK包. 对于非root用户, nmap使用connect()方法.
    在默认的情况下(root用户), nmap并行使用ICMP和ACK技术.
    注意, nmap在任何情况下都会进行ping扫描, 只有目标主机处于运行状态, 才会进行后续的扫描. 如果你只是想知道目标主机是否运行, 而不想进行其它扫描, 才会用到这个选项.
    -sU
    UDP扫描: 如果你想知道在某台主机上提供哪些UDP(用户数据报协议,RFC768)服务, 可以使用这种扫描方法. nmap首先向目标主机的每个端口发出一个0字节的UDP包, 如果我们收到端口不可达的ICMP消息, 端口就是关闭的, 否则我们就假设它是打开的.
    有些人可能会想UDP扫描是没有什么意思的. 但是, 我经常会想到最近出现的solaris rpcbind缺陷. rpcbind隐藏在一个未公开的UDP端口上, 这个端口号大于32770. 所以即使端口111(portmap的众所周知端口号) 被防火墙阻塞有关系. 但是你能发现大于30000的哪个端口上有程序正在监听吗?使用UDP扫描就能!cDc Back Orifice的后门程序就隐藏在Windows主机的一个可配置的UDP端口中. 不考虑一些通常的安全缺陷, 一些服务例如:snmp,tftp,NFS 使用UDP协议. 不幸的是, UDP扫描有时非常缓慢, 因为大多数主机限制ICMP错误信息的比例(在RFC1812中的建议). 例如, 在Linux内核中 (在net/ipv4/icmp.h文件中)限制每4秒钟只能出现80条目标不可达的ICMP消息, 如果超过这个比例, 就会给1/4秒钟的处罚.  solaris的限制更加严格, 每秒钟只允许出现大约2条ICMP不可达消息, 这样, 使扫描更加缓慢. nmap会检测这个限制的比例, 减缓发送速度, 而不是发送大量的将被目标主机丢弃的无用数据包.
    不过Micro$oft忽略了RFC1812的这个建议, 不对这个比例做任何的限制. 所以我们可以能够快速扫描运行Win95/NT的主机上的所有65K个端口.
    -sA
    ACK扫描: 这项高级的扫描方法通常用来穿过防火墙的规则集. 通常情况下, 这有助于确定一个防火墙是功能比较完善的或者是一个简单的包过滤程序, 只是阻塞进入的SYN包.
    这种扫描是向特定的端口发送ACK包(使用随机的应答/序列号). 如果返回一个RST包, 这个端口就标记为unfiltered状态. 如果什么都没有返回, 或者返回一个不可达ICMP消息, 这个端口就归入filtered类. 注意, nmap通常不输出unfiltered的端口, 所以在输出中通常不显示所有被探测的端口. 显然, 这种扫描方式不能找出处于打开状态的端口.
    -sW
    对滑动窗口的扫描: 这项高级扫描技术非常类似于ACK 扫描, 除了它有时可以检测到处于打开状态的端口, 因为滑动窗口的大小是不规则的, 有些操作系统可以报告其大小. 这些系统至少包括: 某些版本的AIX, Amiga,BeOS,BSDI,Cray,Tru64 UNIX,DG/UX,OpenVMS,Digital UNIX,OpenBSD,OpenStep,QNX,Rhapsody,SunOS 4.x,Ultrix,VAX,VXWORKS. 从nmap-hackers邮件3列表的文档中可以得到完整的列表.
    -sR
     RPC扫描. 这种方法和nmap的其它不同的端口扫描方法结合使用. 选择所有处于打开状态的端口向它们发出SunRPC程序的NULL命令, 以确定它们是否是RPC端口, 如果是, 就确定是哪种软件及其版本号. 因此你能够获得防火墙的一些信息. 诱饵扫描现在还不能和RPC扫描结合使用.
    -b
    FTP反弹攻击(bounce attack):FTP协议(RFC 959)有一个很有意思的特征, 它支持代理FTP连接. 也就是说, 我能够从evil.com连接到FTP服务器target.com, 并且可以要求这台 FTP服务器为自己发送Internet上任何地方的文件!1985年, RFC959完成时, 这个特征就能很好地工作了. 然而, 在今天的Internet 中, 我们不能让人们劫持FTP服务器, 让它向Internet上的任意节点发送数据. 如同Hobbit在1995年写的文章中所说的, 这个协议"能够用来做投递虚拟的不可达邮件和新闻, 进入各种站点的服务器,填满硬盘, 跳过防火墙, 以及其它的骚扰活动, 而且很难进行追踪". 我们可以使用这个特征, 在一台代理FTP服务器扫描TCP端口. 因此, 你需要连接到防火墙后面的一台FTP服务器, 接着进行端口扫描. 如果在这台FTP服务器中有可读写的目录, 你还可以向目标端口任意发送数据(不过nmap不能为你做这些).
    传递给-b功能选项的参数是你要作为代理的FTP服务器. 语法格式为:
    -b username:password@server:port.
    除了server以外, 其余都是可选的. 如果你想知道什么服务器有这种缺陷, 可以参考我在Phrack 51发表的文章. 还可以在nmap的站点得到这篇文章的最新版本.

4.2 通用选项

    这些内容不是必需的, 但是很有用.

    -P0
    在扫描之前, 不必ping主机. 有些网络的防火墙不允许ICMP echo请求穿过, 使用这个选项可以对这些网络进行扫描. microsoft.com就是一个例子, 因此在扫描这个站点时, 你应该一直使用-P0或者-PT 80选项.
    -PT
    扫描之前, 使用TCP ping确定哪些主机正在运行. nmap不是通过发送ICMP echo请求包然后等待响应来实现这种功能, 而是向目标网络(或者单一主机)发出TCP ACK包然后等待回应. 如果主机正在运行就会返回RST包. 只有在目标网络/主机阻塞了ping包, 而仍旧允许你对其进行扫描时, 这个选项才有效. 对于非 root用户, 我们使用connect()系统调用来实现这项功能. 使用-PT <端口号>来设定目标端口. 默认的端口号是80, 因为这个端口通常不会被过滤.
    -PS
    对于root用户, 这个选项让nmap使用SYN包而不是ACK包来对目标主机进行扫描. 如果主机正在运行就返回一个RST包(或者一个SYN/ACK包).
    -PI
    设置这个选项, 让nmap使用真正的ping(ICMP echo请求)来扫描目标主机是否正在运行. 使用这个选项让nmap发现正在运行的主机的同时, nmap也会对你的直接子网广播地址进行观察. 直接子网广播地址一些外部可达的IP地址, 把外部的包转换为一个内向的IP广播包, 向一个计算机子网发送. 这些IP广播包应该删除, 因为会造成拒绝服务攻击(例如 smurf).
    -PB
    这是默认的ping扫描选项. 它使用ACK(-PT)和ICMP(-PI)两种扫描类型并行扫描. 如果防火墙能够过滤其中一种包, 使用这种方法, 你就能够穿过防火墙.
    -O
    这个选项激活对TCP/IP指纹特征(fingerprinting)的扫描, 获得远程主机的标志. 换句话说, nmap使用一些技术检测目标主机操作系统网络协议栈的特征. nmap使用这些信息建立远程主机的指纹特征, 把它和已知的操作系统指纹特征数据库做比较, 就可以知道目标主机操作系统的类型.
    -I
    这个选项打开nmap的反向标志扫描功能. Dave Goldsmith 1996年向bugtap发出的邮件注意到这个协议, ident协议(rfc 1413)允许使用TCP连接给出任何进程拥有者的用户名, 即使这个进程并没有初始化连接. 例如, 你可以连接到HTTP端口, 接着使用identd确定这个服务器是否由root用户运行. 这种扫描只能在同目标端口建立完全的TCP连接时(例如: -sT扫描选项)才能成功. 使用-I选项是, 远程主机的 identd精灵进程就会查询在每个打开的端口上监听的进程的拥有者. 显然, 如果远程主机没有运行identd程序, 这种扫描方法无效.
    -f
    这个选项使nmap使用碎片IP数据包发送SYN,FIN,XMAS,NULL. 使用碎片数据包增加包过滤,入侵检测系统的难度, 使其无法知道你的企图. 不过, 要慎重使用这个选项!有些程序在处理这些碎片包时会有麻烦, 我最喜欢的嗅探器在接受到碎片包的头36个字节时, 就会发生 segmentation faulted. 因此, 在nmap中使用了24个字节的碎片数据包. 虽然包过滤器和防火墙不能防这种方法, 但是有很多网络出于性能上的考虑, 禁止数据包的分片.
    注意这个选项不能在所有的平台上使用. 它在Linux,FreeBSD,OpenBSD以及其它一些UNIX系统能够很好工作.
    -v
    冗余模式. 强烈推荐使用这个选项, 它会给出扫描过程中的详细信息. 使用这个选项, 你可以得到事半功倍的效果. 使用-d选项可以得到更加详细的信息.
    -h
    快速参考选项.
    -oN
    把扫描结果重定向到一个可读的文件logfilename中.
    -oM
    把扫描结果重定向到logfilename文件中, 这个文件使用主机可以解析的语法. 你可以使用-oM -来代替logfilename, 这样输出就被重定向到标准输出stdout. 在这种情况下, 正常的输出将被覆盖, 错误信息荏苒可以输出到标准错误 stderr. 要注意, 如果同时使用了-v选项, 在屏幕上会打印出其它的信息.
    -oS      thIs l0gz th3 r3suLtS of YouR ScanZ iN a s|     THe fiL3 U sPecfy 4s an arGuMEnT! U kAn gIv3 the 4rgument -
    (wItHOUt qUOteZ) to sh00t output iNT0 stDouT!@!! 莫名其妙, 下面是我猜着翻译的, 相形字?
    把扫描结果重定向到一个文件logfilename中, 这个文件使用一种"黑客方言"的语法形式(作者开的玩笑?). 同样, 使用-oS -就会把结果重定向到标准输出上.
    -resume
    某个网络扫描可能由于control-C或者网络损失等原因被中断, 使用这个选项可以使扫描接着以前的扫描进行. logfilename是被取消扫描的日志文件, 它必须是可读形式或者机器可以解析的形式. 而且接着进行的扫描不能增加新的选项, 只能使用与被中断的扫描相同的选项. nmap会接着日志文件中的最后一次成功扫描进行新的扫描.
    -iL
    从inputfilename文件中读取扫描的目标. 在这个文件中要有一个主机或者网络的列表, 由空格键,制表键或者回车键作为分割符. 如果使用-iL -, nmap就会从标准输入stdin读取主机名字. 你可以从指定目标一节得到更加详细的信息.
    -iR
    让nmap自己随机挑选主机进行扫描.
    -p <端口范围>
    这个选项让你选择要进行扫描的端口号的范围. 例如, -p 23表示: 只扫描目标主机的23号端口. -p 20-30,139,60000-表示: 扫描20到30号端口, 139号端口以及所有大于60000的端口. 在默认情况下, nmap扫描从1到1024号以及nmap-services文件(如果使用RPM软件包, 一般在/usr/share/nmap/目录中)中定义的端口列表.
    -F
    快速扫描模式, 只扫描在nmap-services文件中列出的端口. 显然比扫描所有65535个端口要快.
    -D
    使用诱饵扫描方法对目标网络/主机进行扫描. 如果nmap使用这种方法对目标网络进行扫描, 那么从目标主机/网络的角度来看, 扫描就象从其它主机 (decoy1,等)发出的. 从而, 即使目标主机的IDS(入侵检测系统)对端口扫描发出报警, 它们也不可能知道哪个是真正发起扫描的地址, 哪个是无辜的. 这种扫描方法可以有效地对付例如路由跟踪,response-dropping等积极的防御机制, 能够很好地隐藏你的IP地址.
    每个诱饵主机名使用逗号分割开, 你也可以使用ME选项, 它代表你自己的主机, 和诱饵主机名混杂在一起. 如果你把ME放在第六或者更靠后的位置, 一些端口扫描检测软件几乎根本不会显示你的IP地址. 如果你不使用ME选项, nmap会把你的IP地址随机夹杂在诱饵主机之中.
    注意:你用来作为诱饵的主机应该正在运行或者你只是偶尔向目标发送SYN数据包. 很显然, 如果在网络上只有一台主机运行, 目标将很轻松就会确定是哪台主机进行的扫描. 或许, 你还要直接使用诱饵的IP地址而不是其域名, 这样诱饵网络的域名服务器的日志上就不会留下关于你的记录.
    还要注意: 一些愚蠢的端口扫描检测软件会拒绝路由试图进行端口扫描的主机. 因而, 你需要让目标主机和一些诱饵断开连接. 如果诱饵是目标主机的网关或者就是其自己时, 会给目标主机造成很大问题. 所以你需要慎重使用这个选项.
    诱饵扫描既可以在起始的ping扫描也可以在真正的扫描状态下使用. 它也可以和-O选项组合使用.
    使用太多的诱饵扫描能够减缓你的扫描速度甚至可能造成扫描结果不正确. 同时, 有些ISP会把你的欺骗包过滤掉. 虽然现在大多数的ISP不会对此进行限制.
    -S <IP_Address>
    在一些情况下, nmap可能无法确定你的源地址(nmap会告诉你). 在这种情况下, 可以使用这个选项给出你的IP地址.
    在欺骗扫描时, 也使用这个选项. 使用这个选项可以让目标认为是其它的主机对自己进行扫描.
    -e
    告诉nmap使用哪个接口发送和接受数据包. nmap能够自动对此接口进行检测, 如果无效就会告诉你.
    -g
    设置扫描的源端口. 一些天真的防火墙和包过滤器的规则集允许源端口为DNS(53)或者FTP-DATA(20)的包通过和实现连接. 显然, 如果攻击者把源端口修改为20或者53, 就可以摧毁防火墙的防护. 在使用UDP扫描时, 先使用53号端口; 使用TCP扫描时, 先使用20号端口. 注意只有在能够使用这个端口进行扫描时, nmap才会使用这个端口. 例如, 如果你无法进行TCP扫描, nmap会自动改变源端口, 即使你使用了-g选项.
    对于一些扫描, 使用这个选项会造成性能上的微小损失, 因为我有时会保存关于特定源端口的一些有用的信息.
    -r
    告诉nmap不要打乱被扫描端口的顺序.
    --randomize_hosts
    使nmap在扫描之前, 打乱每组扫描中的主机顺序, nmap每组可以扫描最多2048台主机. 这样, 可以使扫描更不容易被网络监视器发现, 尤其和--scan_delay 选项组合使用, 更能有效避免被发现.
    -M
    设置进行TCP connect()扫描时, 最多使用多少个套接字进行并行的扫描. 使用这个选项可以降低扫描速度, 避免远程目标宕机.

4.3 适时选项

    通常, nmap在运行时, 能够很好地根据网络特点进行调整. 扫描时, nmap会尽量减少被目标检测到的机会, 同时尽可能加快扫描速度. 然而, nmap默认的适时策略有时候不太适合你的目标. 使用下面这些选项, 可以控制nmap的扫描timing:

-T
    设置nmap的适时策略. Paranoid:为了避开IDS的检测使扫描速度极慢, nmap串行所有的扫描, 每隔至少5分钟发送一个包;  Sneaky: 也差不多, 只是数据包的发送间隔是15秒; Polite: 不增加太大的网络负载, 避免宕掉目标主机, 串行每个探测, 并且使每个探测有0.4 秒种的间隔; Normal:nmap默认的选项, 在不是网络过载或者主机/端口丢失的情况下尽可能快速地扫描; Aggressive:设置5分钟的超时限制, 使对每台主机的扫描时间不超过5分钟, 并且使对每次探测回应的等待时间不超过1.5秒钟; b>Insane:只适合快速的网络或者你不在意丢失某些信息, 每台主机的超时限制是75秒, 对每次探测只等待0.3秒钟. 你也可是使用数字来代替这些模式, 例如: -T 0等于-T Paranoid, -T 5等于-T Insane.
    这些适时模式不能下面的适时选项组合使用.
--host_timeout
    设置扫描一台主机的时间, 以毫秒为单位. 默认的情况下, 没有超时限制.
--max_rtt_timeout
    设置对每次探测的等待时间, 以毫秒为单位. 如果超过这个时间限制就重传或者超时. 默认值是大约9000毫秒.
--min_rtt_timeout
    当目标主机的响应很快时, nmap就缩短每次探测的超时时间. 这样会提高扫描的速度, 但是可能丢失某些响应时间比较长的包. 使用这个选项, 可以让nmap对每次探测至少等待你指定的时间, 以毫秒为单位.
--initial_rtt_timeout
    设置初始探测的超时值. 一般这个选项只在使用-P0选项扫描有防火墙保护的主机才有用. 默认值是6000毫秒.
--max_parallelism
    设置最大的并行扫描数量. --max_parallelism 1表示同时只扫描一个端口. 这个选项对其它的并行扫描也有效, 例如ping sweep, RPC scan.
--scan_delay
    设置在两次探测之间, nmap必须等待的时间. 这个选项主要用于降低网络的负载.

4.4 目标设定

    在nmap的所有参数中, 只有目标参数是必须给出的. 其最简单的形式是在命令行直接输入一个主机名或者一个IP地址. 如果你希望扫描某个IP地址的一个子网, 你可以在主机名或者IP地址的后面加上/掩码. 掩码在0(扫描整个网络)到 32(只扫描这个主机). 使用/24扫描C类地址, /16扫描B类地址.

    除此之外, nmap还有更加强大的表示方式让你更加灵活地指定IP地址. 例如, 如果要扫描这个B类网络128.210.*.*, 你可以使用下面三种方式来指定这些地址:128.210.*.*,128.21-.0-255.0-255或者128.210.0.0/16这三种形式是等价的.

17.5 例子

    本节将由浅入深地举例说明如何使用nmap.

nmap -v target.example.com
扫描主机target.example.com的所有TCP端口. -v打开冗余模式.

nmap -sS -O target.example.com/24
发起对target.example.com所在网络上的所有255个IP地址的秘密SYN扫描. 同时还探测每台主机操作系统的指纹特征. 需要root权限.

nmap -sX -p 22,53,110,143,4564 128.210.*.1-127
对B类IP地址128.210中255个可能的8位子网的前半部分发起圣诞树扫描. 确定这些系统是否打开了sshd,DNS,pop3d,imapd和4564端口. 注意圣诞树扫描对Micro$oft的系统无效, 因为其协议栈的TCP层有缺陷.

nmap -v --randomize_hosts -p 80 *.*.2.3-5
只扫描指定的IP范围, 有时用于对这个Internet进行取样分析. nmap将寻找Internet上所有后两个字节是.2.3,.2.4,.2.5的 IP地址上的WEB服务器. 如果你想发现更多有意思的主机, 你可以使用127-222, 因为在这个范围内有意思的主机密度更大.

host -l company.com | cut -d -f 4 | ./nmap -v -iL -
列出company.com网络的所有主机, 让nmap进行扫描. 注意: 这项命令在GNU/Linux下使用. 如果在其它平台, 你可能要使用 其它的命令/选项.




18. iptables

Linux中的防火墙是由netfilter/iptables网络构架实现的包过滤防火墙, 可以实现大部分硬件防火墙的功能, 所以可以在企业的应用方案中可以作为硬件防火墙的替代品.

如果Linux的内核是在2.4以上的版本, 都可以使用iptables来实现防火墙的功能. 由于Linux的防火墙是在Linux的内核中实现的, 而在内核中使用了netfilter构架实现防火墙的功能, iptables其实就是管理netfilter的工具而已, 所以我们一般使用iptables来实现对防火墙的管理. 默认安装linux后, 防火墙是开启状态.

1.检查iptables的状态
使用命令 service iptables status

2.关闭防火墙
使用命令 service iptables stop

3.开启防火墙
使用命令 service iptables start

4.设置开机启动防火墙
使用命令 ntsysv
[root@pcmxexweb ~]# ntsysv
将会出现图形界面, 在其中选中iptables. 确认.

5.简单配置防火墙规则
[root@pcmxexweb ~]# setup

选择 防火墙配置--》定制--》在"其他端口"中输入要开放的端口 如: 1521

6.显示防火墙状态:
sudo iptables -L

如果显示:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

说明已经是关了, 如果有别的, 自己可以手动关闭.

18.3 other
彻底关闭iptables
[Linux服务器技术]
post by mE / 2009-11-30 11:28 Monday

1) 重启后生效
开启: chkconfig iptables on
关闭: chkconfig iptables off

2) 即时生效,重启后失效
开启: service iptables start
关闭: service iptables stop


18.3.1 new

==================================================================================

#删除原来 iptables 里面已经有的规则
iptables -F
iptables -X

#抛弃所有不符合三种链规则的数据包
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#设置: 本地进程 lo 的 INPUT 和 OUTPUT 链接 ;  eth1的 INPUT链
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth1 -m state --state NEW,INVALID -j LOG
iptables -A OUTPUT -o lo -j ACCEPT

#对其他主要允许的端口的 OUTPUT设置:
# DNS
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 53 -j ACCEPT
iptables -A OUTPUT -o eth1 -p UDP --sport 1024:65535 --dport 53 -j ACCEPT

#HTTP
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 80 -j ACCEPT

#HTTPS
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 443 -j ACCEPT

#Email 接受 和发送
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 110 -j ACCEPT
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 25 -j ACCEPT

# FTP 数据和控制
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 20 -j ACCEPT
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 21 -j ACCEPT

#DHCP
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 68 -j ACCEPT
iptables -A OUTPUT -o eth1 -p UDP --sport 1024:65535 --dport 68 -j ACCEPT

#POP3S Email安全接收
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 995 -j ACCEPT

#时间同步服务器 NTP
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 123 -j ACCEPT

#拒绝 eth1 其他剩下的
iptables -A OUTPUT -o eth1 --match state --state NEW,INVALID -j LOG


最后是有关于iptables存储的命令:
代码:
iptables-save > /etc/iptables.up.rule # 存在你想存的地方

代码:
iptables-restore < /etc/iptables.up.rules #调用


因为iptables 在每次机器重新启动以后, 需要再次输入或者调用, 为了方便操作, 使用
代码:
sudo gedit /etc/network/interfaces

在代码:
auto ath0
iface ath0 inet dhcp
后面加上代码:
pre-up iptables-restore < /etc/iptables.up.rules #启动自动调用已存储的iptables

代码:
post-down iptables-save > /etc/iptables.up.rule #关机时, 把当前iptables 储存.
------------------------------------------------------------------------------------------------------------------------------------
简单的iptables脚本转发

#!/bin/sh
PATH=$PATH:/usr/sbin:/sbin
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F INPUT
iptables -F FORWARD
iptables -F POSTROUTING -t nat
iptables -P FORWARD DROP
insmod ip_nat_ftp
insmod ip_conntrack_ftp
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
#iptables -A FORWARD -s 172.16.1.0/16 -j ACCEPT
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
##########web################
#iptables -t nat -A PREROUTING -d 222.240.220.18 -p tcp --dport 80 -j DNAT --to 172.16.1.8
#iptables -t nat -A POSTROUTING -d 172.16.1.8 -p tcp --dport 80 -j SNAT --to 172.16.1.1
#iptables -A FORWARD -o eth0 -d 172.16.1.8 -p tcp --dport 80 -j ACCEPT
#iptables -A FORWARD -i eth0 -s 172.16.1.8 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT
#########mysql###############
#iptables -t nat -A PREROUTING -d 222.240.220.18 -p tcp --dport 3306 -j DNAT --to 172.16.1.8
#iptables -t nat -A POSTROUTING -d 172.16.1.8 -p tcp --dport 3306 -j SNAT --to 172.16.1.1
#iptables -A FORWARD -o eth0 -d 172.16.1.8 -p tcp --dport 3306 -j ACCEPT
#iptables -A FORWARD -i eth0 -s 172.16.1.8 -p tcp --sport 3306 -m --state ESTABLISHED -j ACCEPT
#########ftp#################
#iptables -t nat -A PREROUTING -d 222.240.220.18 -p tcp --dport 21 -j DNAT --to 172.16.1.8
#iptables -A FORWARD -o eth0 -d 172.16.1.8 -p tcp --dport 21 -j ACCEPT
#iptables -A FORWARD -i eth0 -s 172.16.1.8 -p tcp --sport 21 -m --state ESTABLISHED -j ACCEPT
#########ftp-data############
#iptables -A FORWARD -i eth0 -s 172.16.1.8 -p tcp --sport 20 -m --state ESTABLISHED,RELATED -j ACCEPT
#iptables -A FORWARD -o eth0 -d 172.16.1.8 -p tcp --dport 20 -m --state ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o eth0 -j SNAT --to 220.168.64.98
----------------------------------------------------------------------------------
参考:
http://www.pinkdragon.net/DocumentsLibrary/contents/zh_CN/Linux_man/ifconfig.8.html




100. sysctl: 开启 ip forwarding
1)  在Linux中, 缺省是禁止ip forwarding的, 可以使用简单的命令启动它:
[]#vim /etc/sysctl.conf:
net.ipv4.ip_forward = 1
// 修改后运行
[]#sysctl -p
// 使得内核改变立即生效;

你可能感兴趣的:(linux,网络,tcp,防火墙,FTP服务器,output)