十进制数与二进制数的转换

一、二进制数转换成十进制数

由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为”按权相加”法。
例1105 把二进制数110.11转换成十进制数。
网络基础

二、十进制数转换为二进制数

十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。
1. 十进制整数转换为二进制整数
十进制整数转换为二进制整数采用”除2取余,逆序排列”法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
例1107 把 (173)10 转换为二进制数。
解:
网络基础
2.十进制小数转换为二进制小数
十进制小数转换成二进制小数采用”乘2取整,顺序排列”法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。
然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
【例1108】把(0.8125)转换为二进制小数。
解:
网络基础
例1109 (173.8125)10=( )2
解: 由[例1107]得(173)10=(10101101)2
由[例1108]得(0.8125)10=(0.1101)2
把整数部分和小数部分合并得: (173.8125)10=(10101101.1101)2
原文:http://zyk.thss.tsinghua.edu.cn/29/elecTec/resource/knowledge/zsd11/z1103.htm

TCP三次握手及四次挥手详细图解

相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助.

而且对于有网络协议工程师之类笔试,几乎是必考的内容.企业对这个问题热情之高,出乎我的意料:-)。有时上午面试前强调这个问题,并重复讲一次,下午几乎每一个人都被问到这个问题。

因此在这里详细解释一下这两个过程。

TCP三次握手

所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。

三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。
网络基础
第一次握手:
客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。
网络基础
第二次握手:
服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1。
网络基础

第三次握手.
客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1
网络基础
SYN攻击
在三次握手过程中,服务器发送SYN-ACK之后,收到客户端的ACK之前的TCP连接称为半连接(half-open connect).此时服务器处于Syn_RECV状态.当收到ACK后,服务器转入ESTABLISHED状态.
Syn攻击就是 攻击客户端 在短时间内伪造大量不存在的IP地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直 至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。
Syn攻击是一个典型的DDOS攻击。检测SYN攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击.在Linux下可以如下命令检测是否被Syn攻击
netstat -n -p TCP | grep SYN_RECV
一般较新的TCP/IP协议栈都对这一过程进行修正来防范Syn攻击,修改tcp协议实现。主要方法有SynAttackProtect保护机制、SYN cookies技术、增加最大半连接和缩短超时时间等.
但是不能完全防范syn攻击。
TCP 四次挥手
TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。

网络基础

参见wireshark抓包,实测的抓包结果并没有严格按挥手时序。我估计是时间间隔太短造成。
网络基础
来源:http://blog.chinaunix.net/space.php?uid=20587912&do=blog&id=405055

数据通讯封装解封装详细流程

网络基础

一、pc1与pc2的通信过程

pc1 telnet pc2

1 从pc1的应用层向pc2发出一个telnet请求

2 该请求下到pc1的传输层,传输层在上层数据前面加上tcp报头,报头中包括目标端口为23,以及一个大于1024,小于65535的随机端口作为源端口。

3 传输层数据下到网络层,pc1在网络层封装,源ip地址为pc1的地址,目标ip地址为pc2的地址。

4 pc1将pc2的ip地址和子网掩码与自己做比对,可以发现pc2与自己处于相同的子网。所以数据传输不必经过网关设备。

5 数据包下到pc1的数据链路层进行封装,源mac地址为pc1的mac地址,目标mac地址查询自己的arp表。

6 如果pc1 arp表里没有pc2对应的mac地址,pc1发出一个arp广播查找pc2的mac地址,arp报文直接封装在2层之上,发送者(sender)的mac地址为pc1的mac地址,sender ip为pc1的ip地址。指向(target)mac为全0,target ip为pc2的ip。二层数据帧的目标指向二层广播地址(12个F)。
网络基础

7 交换机sw1收到pc1的arp报文后,若mac地址表不存在pc1的mac地址,就会将pc1的mac地址和pc1所连端口号记录到mac地址表,pc1的mac地址对应的端口号为1。然后将其做除发送端口外的泛洪处理。若存在的pc1-mac与端口的对应关系,则复位其老化计时器。并按mac地址表所记录的接口发送出该报文

8 局域网所有其他pc,包括网关设备都能接收到pc1的arp广播,并拆封二层帧头,target ip地址,target ip地址是否为自己。因为target ip是pc2的ip地址,此时pc2会将pc1与其mac的对应关系写入自己的ARP缓存表,这样减少了pc2发送arp广播请求pc1的mac的广播报文,提高了网络效率。之后pc2会以单播的方式给pc1回应消息,消息内包括pc2的mac地址作为sender mac地址,pc1的mac地址作为target地址。pc2的ip地址作为sender ip地址,pc1的ip地址作为target ip地址。(具体ARP Reply报文如下)

网络基础

9 交换机sw1收到pc2的回复帧后,读取二层的目标mac地址,并在自己的mac地址表里查询,mac地址表里有pc1的mac地址和端口的对应关系,所以sw1直接将报文从该端口发送出去,同时读出这个二层帧的源mac地址,记录pc2的mac地址和端口2的对应关系到mac地址表中。

10 pc1收到pc2的arp回复后将pc2的ip地址和mac地址对应关系写到自己的arp表中,并将pc2的mac地址作为目标mac地址写到待发送的帧内。

11 pc1把帧转换成bit流,从物理接口发出。

12 sw1收到这段bit流,读前6个字节的目标MAC地址,然后查看自己的mac地址表,表中有这个目标mac地址和端口的对应关系,并且和源mac地址不在同一个端口上。于是sw1把这个二层帧从对应的端口转发出去,其他端口不会转发该帧。

13 pc2接收到这个二层数据帧,查看帧的目标mac地址,和自己相等,说明该帧是发送给自己的,于是将二层帧头解开。

14 pc2查看三层包头,只要目标ip地址和自己匹配,即解开第三层封装。

15 pc2查看传输层报头,目标端口为23,pc2向上层应用查看自己是否开启了端口为23的上层服务。若开启则把传输层报头解封装后将数据送往上层。

二、pc1与pc4的通信

pc1 telnet pc4

1 从pc1的应用层向pc4发出一个telnet请求

2 该请求下到pc1的传输层,传输层在上层数据前面加上tcp报头,报头中包括目标端口为23,以及一个大于1024,小于65535的随机端口作为源端口。

3 传输层数据下到网络层,pc1在网络层封装,源ip地址为pc1地址,目标ip地址为pc4地址。

4 pc1将pc4的ip地址和子网掩码与自己做比对,可以发现pc4和自己不处于相同的子网。对于不处于相同子网的通信,是要通过网关处理的。本例中pc1的网关为r1的E0接口。

5 数据包下到pc1的数据链路层进行封装,源mac地址为pc1的mac地址,目标mac也就是网关mac地址,通过查询自己的arp表获取。

6 如果pc1 arp表里没有网关对应的mac地址,pc1发出一个arp广播查找网关的mac地址,arp报文直接封装在2层之上,发送者(sender)的mac地址为pc1的mac地址,sender ip为pc1的ip地址。指向(target)mac为全0,target ip为网关的ip。二层数据帧的目标指向二层广播地址(12个F)。

7 交换机sw1收到pc1的arp报文后,若mac地址表不存在pc1的mac地址,就会将pc1的mac地址和pc1所连端口号记录到mac地址表,之后将其做除发送端口外的泛洪处理。若存在该条目,则复位其aging timer老化计时器,之后按mac地址表所记录的接口发送出该报文。

8 局域网所有其他pc,包括网关设备都能接收到pc1的arp广播,并拆封二层帧头,查看target ip地址,target ip地址是否为自己。因为target ip是网关的ip地址,此时网关设备会将pc1与其mac的对应关系写入自己的ARP缓存表,这样减少了网关设备发送arp广播请求pc1的mac的广播报文,提高了网络效率。之后网关会以单播的方式给pc1回应消息,消息内包括网关的mac地址作为sender mac地址,pc1的mac地址作为target地址。网关的ip地址作为sender ip地址,pc1的ip地址作为target ip地址。

9 交换机sw1收到网关的回复帧后,读取二层的目标mac地址,并在自己的mac地址表里查询,mac地址表里有pc1的mac地址和端口的对应关系,所以sw1直接将报文从该端口发送出去,不再泛洪到其他端口。同时读出这个二层帧的源mac地址,记录路由器e0口的mac地址和端口4的对应关系到mac地址表中。

10 pc1收到网关的arp回复后将网关的ip地址和mac地址对应关系写到自己的arp表中,并将网关的mac地址作为目标mac地址写到待发送的帧内。

11 pc1把帧转换成bit流,从物理接口发出。

12 sw1收到这段bit流,读前6个字节的目标MAC地址,然后查看自己的mac地址表,表中有这个mac地址和端口的对应关系,并且和源mac地址不在同一个端口上。于是sw1把这个二层帧从对应的端口转发出去。

13 网关路由器接收到这个二层数据帧,查看帧的目标mac地址,和自己相等,说明该帧是发送给自己的,于是将二层帧头解开。

14 路由器R1查看三层包头,目标ip地址自己的e0口不匹配,也不等同于自己其他接口的ip地址,说明这不是一个给自己的包,而是一个去往其他网段的包,所以网关不再往上解封装。

15 路由器R1在自己的路由表里查询和数据包的目标ip地址匹配的路由,找出一条去往pc4所在网段的路由,该路由以自己的E1口为出口,下一跳路由器是r2。

16 路由器r1对数据包的三层数据不做任何改动,并封装上二层帧头,源mac地址是r1的e1口的mac地址,目标地址是r2的e1口的mac地址。(此处省略路由器r1获得r2的e1口mac地址的arp流程。)

17 路由器r1将这个二层帧转换成bit流从e1口发送出去。

18 路由器r2的e1口接收到这段bit流,并整合成帧,查看帧的目标mac地址,和自己的mac地址相等,说明这个帧是发送给自己的,于是路由器r2将该二层帧的帧头解掉。

19 路由器r2读取数据包的第三层信息。目标ip地址自己的e1口不匹配,也不等同于自己其他接口的ip地址,说明这不是一个给自己的包。于是不再往上解封装。

20 路由器R2在自己的路由表里查询和报文的目标ip地址匹配的路由,找出一条直连路由和数据包的目标网络匹配,于是认定该数据包是发往自己一个直连网段。

21 路由器R2对数据包的三层数据不做任何改动,并封装上二层帧头,源mac地址是r2的e0口的mac地址,目标地址是pc4的mac地址。

22 路由器查找自己的arp表,找寻和pc4对应的mac地址。如果arp表中没有和pc4对应的条目,就从e0口向该网段发起一个arp广播。arp报文直接封装在2层之上,sender mac地址为路由器e0口的mac地址,sender ip为路由器e0口的ip地址。Target mac为全0,target ip为pc4的ip。二层数据帧的目标指向二层广播地址(12个F)。

23 交换机sw2收到r2 e0口的arp报文后,若mac地址表不存在pc4的mac地址,就会将r2 e0口的mac地址和r2 e0所连端口号记录到mac地址表,之后将其做除发送端口外的泛洪处理。若存在该条目,则复位其aging timer老化计时器,之后按mac地址表所记录的接口发送出该报文。

24局域网所有其他pc,都能接收到路由器(网关)的arp广播,并拆封二层帧头,查看target ip地址,target ip地址是否为自己。因为target ip是pc4的ip地址,此时pc4会将网关e0口与其mac的对应关系写入自己的ARP缓存表,这样减少了设备发送arp广播请求网关e0口的mac的广播报文,提高了网络效率。之后pc4会以单播的方式给网关e0口回应消息,消息内包括pc4的mac地址作为sender mac地址,网关e0口的mac地址作为target地址。Pc4的ip地址作为sender ip地址,网关的ip地址作为target ip地址。

25 交换机sw2收到pc4的回复帧后,读取二层的目标mac地址,并在自己的mac地址表里查询,mac地址表里有该mac地址和端口的对应关系,所以sw2直接将报文从该端口发送出去,同时读出这个二层帧的源mac地址,记录pc4的mac地址和端口1的对应关系到mac地址表中(若原来不存在的话)。

26 路由器的e0口收到pc4的arp回复后将pc4的ip地址和mac地址对应关系写到自己的arp表中,并将pc4的mac地址作为目标mac地址写到待发送的帧内。

27 路由器e0口把帧转换成bit流,在物理从物理接口发出。

28 sw2收到这段bit流,读前6个字节的目标MAC地址,然后查看自己的mac地址表,表中有这个mac地址和端口的对应关系,并且和源mac地址不在同一个端口上。于是sw2把这个二层帧从对应的端口转发出去。

29 pc4接收到这个二层数据帧,查看帧的目标mac地址,和自己相等,说明该帧是发送给自己的,于是将二层帧头解开。

30 pc4查看三层包头,目标ip地址和mask和自己也是相等,于是解开第三层封装。

31 pc4查看传输层报头,目标端口为23,pc4向上层应用查看自己是否开启了端口为23的上层服务。若开启则把传输层报头解封装后将数据送往上层。

来源:http://www.12090603.com

使用nagios nrpe监控远程Linux主机

监控linux本地主机时,我们可以直接更改配置文件进行监控,如果需要监控的主机与nagios不在同一机器上,即监控远程linux主机时,我们需要借助NRPE插件实现。
nrpe工作原理图:
监控

远程主机的操作

下载Nagios Plugins和NRPE

  1. cd /tmp
  2. wget http://iweb.dl.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.13/nrpe-2.13.tar.gz
  3. wget http://iweb.dl.sourceforge.net/project/nagiosplug/nagiosplug/1.4.16/nagios-plugins-1.4.16.tar.gz

创建nagios帐号

  1. useradd nagios
  2. passwd nagios

安装nagios-plugin

  1. cd /tmp
  2. tar xvfz nagios-plugins-1.4.16.tar.gz
  3. cd nagios-plugins-1.4.16
  4. export LDFLAGS=-ldl
  5.  
  6. ./configure –with-nagios-user=nagios –with-nagios-group=nagios –enable-redhat-pthread-workaround
  7. make
  8. make install
  9.  
  10. chown nagios.nagios /usr/local/nagios
  11. chown -R nagios.nagios /usr/local/nagios/libexec/

安装NRPE

  1. cd /tmp
  2. tar xvfz nrpe-2.13.tar.gz
  3. cd nrpe-2.13
  4.  
  5. ./configure
  6. make all
  7. make install-plugin
  8. make install-daemon
  9. make install-daemon-config
  10. yum install xinetd
  11. make install-xinetd

配置NRPE以守护进程运行

1、更改/etc/xinetd.d/nrpe文件,设置允许nagios服务器连接,如nagios服务器的ip为192.168.1.2:

  1. only_from       = 127.0.0.1 192.168.1.2

2、在/etc/services结尾增加:

  1. nrpe 5666/tcp # NRPE

3、启动xinetd

  1. service xinetd restart

4、验证nrpe是否监听

  1. netstat -at | grep nrpe

5、测试nrpe是否正常运行

  1. /usr/local/nagios/libexec/check_nrpe -H localhost
  2. NRPE v2.13

6、更改 /usr/local/nagios/etc/nrpe.cfg
nrpe.cfg文件里包含需要监控远程主机的命令,如:

  1. command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
  2. command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20

nagios服务器的操作

首先安装nagios,参考:http://devops.webres.wang/2012/02/centos-install-nagios/

下载安装NRPE

  1. cd /tmp
  2. wget http://iweb.dl.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.13/nrpe-2.13.tar.gz
  3. tar xvfz nrpe-2.13.tar.gz
  4. cd nrpe-2.13
  5. ./configure
  6. make all
  7. make install-plugin

测试是否正常:

  1. /usr/local/nagios/libexec/check_nrpe -H 192.168.1.3
  2. NRPE v2.13

为监控远程主机定义host和service

1、定义check_nrpe命令
在文件/usr/local/nagios/etc/objects/commands.cfg后面增加:

  1. # ‘check_nrpe’ command definition
  2. define command{
  3. command_name check_nrpe
  4. command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -t 30 -c $ARG1$
  5. }

2、创建/usr/local/nagios/etc/objects/remotehost.cfg
host定义示例:

  1. define host{
  2. use linux-server
  3. host_name remotehost
  4. address 192.168.1.3
  5. }

Service定义示例:

  1. define service{
  2. use generic-service
  3. service_description Root Partition
  4. check_command check_nrpe!check_disk
  5. }

之后重载nagios配置文件使其生效

  1. service nagios reload

参考:http://www.thegeekstuff.com/2008/06/how-to-monitor-remote-linux-host-using-nagios-30/

Linux启动过程详解

Linux启动过程简述

1、加载bios硬件信息,并获取第一个启动设备的代号
2、读取第一个启动设备的mbr到物理内存,物理内存的内容就是Boot Loader了。
3、运行Boot Loader(如grub,lilo等),初始化硬件设备,建立内存空间映射图。
4、根据Boot Loader设定的内核映像路径,系统读取内存映像,解压内核,尝试驱动所有硬件设备。
5、运行第一个程序/sbin/init。
6、执行第一个/etc/rc.d/rc.sysinit脚本程序
7、依据/etc/modules.conf装载内核模块。
8、执行不同运行级别的脚本程序
9、执行/etc/rc.d/rc.local脚本程序
10、执行/bin/login,进入等待用户登录状态。

Linux启动过程详解

启动第一步--加载BIOS

当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。

启动第二步--读取MBR

众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信息、分区表信息。

系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0x7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。

启动第三步--Boot Loader

Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。

Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Loader。

我们以Grub为例来讲解吧,毕竟用lilo和spfdisk的人并不多。

系统读取内存中的grub配置信息(一般为menu.lst或grub.lst),并依照此配置信息来启动不同的操作系统。

启动第四步--加载内核

根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。

系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。

启动第五步--用户层init依据inittab文件来设定运行等级

内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。

其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:

0:关机

1:单用户模式

2:无网络支持的多用户模式

3:有网络支持的多用户模式

4:保留,未使用

5:有网络支持有X-Window支持的多用户模式

6:重新引导系统,即重启

关于/etc/inittab文件的学问,其实还有很多,在后序文章中设计到的,卖个关子,敬请期待,呵呵

启动第六步--init进程执行rc.sysinit

在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。如果你有兴趣,可以到/etc/rc.d中查看一下rc.sysinit文件,里面的脚本够你看几天的:P

启动第七步--启动内核模块

具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。

启动第八步--执行不同运行级别的脚本程序

根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。

启动第九步--执行/etc/rc.d/rc.local

你如果打开了此文件,里面有一句话,读过之后,你就会对此命令的作用一目了然:

# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don’t
# want to do the full Sys V style init stuff.

rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。

启动第十步--执行/bin/login程序,进入登录状态

此时,系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。:)
转自:http://roclinux.cn/?p=1301

iptables练习题

反色空白处见答案:
1.1)设定INPUT为ACCEPT
1.2)设定OUTPUT为ACCEPT
1.3)设定FORWARD为ACCEPT
答案:

  1. iptables -P INPUT ACCEPT
  2. iptables -P OUTPUT ACCEPT
  3. iptables -P FORWARD ACCEPT


2)定制源地址访问策略
2.1)接收来自192.168.0.3的IP访问
2.2)拒绝来自192.168.0.0/24网段的访问

  1. iptables -A INPUT -i eth0 -s 192.168.0.3 -j ACCEPT
  2. iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j DROP


3)目标地址192.168.0.3的访问给予记录,并查看/var/log/message

  1. iptables -A INPUT -s 192.168.0.3 -j LOG


4)定制端口访问策略
4.1)拒绝任何地址访问本机的111端口
4.2)拒绝192.168.0.0/24网段的1024-65534的源端口访问SSH

  1. iptables -A INPUT -i eth0 -p tcp –dport 111 -j DROP
  2. iptables -A INPUT -i eth0 -p tcp -s 192.168.0.0/24 –sport 1024:65534 –dport ssh -j DROP


5)定制CLIENT端的防火墙访问状态
5.1)清除所有已经存在的规则;
5.2)设定预设策略,除了INPUT设为DROP,其他为ACCEPT;
5.3)开放本机的lo可以自由访问;
5.4)设定有相关的封包状态可以进入本机;

  1. iptables -F
  2. iptables -X
  3. iptables -Z
  4. iptables -P INPUT DROP
  5. iptables -P OUTPUT ACCEPT
  6. iptables -P FORWARD ACCEPT
  7. iptables -A INPUT -i lo -j ACCEPT
  8. iptables -A INPUT -m state RELATED,ESTABLISHED -j ACCEPT
  9. iptables -A INPUT -m state INVALID -j DROP


6)定制防火墙的MAC地址访问策略
6.1)清除所有已存的规则
6.2)将INPUT设为DROP
6.3)将目标计算机的MAC设为ACCEPT

  1. iptables -F
  2. iptables -X
  3. iptables -Z
  4. iptables -P INPUT DROP
  5. iptables -A INPUT -i eth0 -m MAC –mac-source 00-C0-9F-79-E1-8A -j ACCEPT


7)设定ICMP包,状态为8的被DROP掉

  1. iptables -A INPUT -i eth0 -p icmp –icmp-type 8 -j DROP


8)定制防火墙的NAT访问策略
8.1)清除所有策略
8.2)重置ip_forward为1
8.3)通过MASQUERADE设定来源于192.168.6.0网段的IP通过192.168.6.217转发出去
8.4)通过iptables观察转发的数据包

  1. iptables -F
  2. iptables -X
  3. iptables -Z
  4. echo 1 > /proc/sys/net/ipv4/ip_forward
  5. iptables -t nat -A POSTROUTING -s 192.168.6.0/24 -o eth1 -j MASQUERADE


9)定制防火墙的NAT访问策略
9.1)清除所有NAT策略
9.2)重置ip_forward为1
9.3)通过SNAT设定来源于192.168.6.0网段通过eth1转发出去
9.4)用iptables观察转发的数据包

  1. iptables -F -t nat
  2. iptables -X -t nat
  3. iptables -Z -t nat
  4. echo 1 > /proc/sys/net/ipv4/ip_forward
  5. iptables -t nat -A POSTROUTING -o eth1 -j SNAT –to-source 192.168.6.217
  6. iptables -L -nv


10)端口转发访问策略
10.1)清除所有NAT策略
10.2)重置ip_forward为1
10.3)通过DNAT设定为所有访问192.168.6.217的22端口,都访问到192.168.6.191的22端口
10.4)设定所有到192.168.6.191的22端口的数据包都通过FORWARD转发
10.5)设定回应数据包,即通过NAT的POSTROUTING设定,使通讯正常

  1. iptables -F -t nat
  2. iptables -X -t nat
  3. iptables -Z -t nat
  4. echo 1 >/proc/sys/net/ipv4/ip_forward
  5. iptables -t nat -A PREROUTING -d 192.168.6.217 -p tcp –dport 22 -j DNAT –to-destination 192.168.6.191:22
  6. iptables -A FORWARD -p tcp -d 192.168.6.191 –dport 22 -j ACCEPT
  7. iptables -t nat -I POSTROUTING -p tcp –dport 22 -j MASQUERADE