iptables实验3 关于内网外网的地址转换及端口转换

地址属于内核,而不属于网卡!!!!

 

 

网络防火墙的实现(主要是forward链)

172.16.100.68(A)172.16.100.67B

192.168.12.10B)和192.168.12.77C)(VNET2

B作为C的网关

 

配置B主机的网卡一个为192.168.1.72,另一个为172.16.25.72

配置C主机的网卡一个

 

[root@B ~]# sysctl -w net.ipv4.ip_forward=1 打开转发

[root@B ~]# tcpdump -i eno16777736 -nn icmp

此时可以转发,但是A主机的网关不是192.168.1.72.故它的回应报文此时回不去。

  

 blob.png

 

————————————————————————————————————————————————-

源地址(端口)转换和目标地址(端口)转换都不考虑回应报文;而仅考虑第一次接到(DNAT)或发出(SNAT)的报文

 

 

端口映射

 

 blob.png

 

 

NetFilter

NAT NetWork Address Translation

 

SNAT源地址转换,一般发生在POSTROUTING(路由决策才可以决定是否更改地址,PREROUTINGFORWARDPOSTROUTING都有路由决策)和OUTPUT(本机多块网卡的地址转换)

使用场景:本地网络中的主机通过某一特定地址访问外部网络时使用;

 DNAT目标地址转换,一般发生在PREROUTING,(在路由决策之前,否则会转入本机)

让本地网络中的某些主机的某些服务开放给外部网络中的用户访问时;

PNAT:端口 转换,比如web服务的服务端口为80,可将真正的web服务器主机的web服务监听端口设置为8080,而后当客户端访问时是80端口,在经过网关时转换为8080来访问真正的web服务。

 

NAT表的target

SNAT

 –to-source [ipaddr[-ipaddr]][:port[-port]]

random

DNAT

–to-destination [ipaddr[-ipaddr]][:port[-port]]

random

MASQUERADE

–to-ports port[-port]

–random

 

SNAT示例:

~]# iptables -t nat -A POSTROUTING -s 192.168.12.0/24 -j SNAT –to-source 172.16.100.67        

 

MASQUERADE示例:

源地址转换:当外网源地址为动态获取的地址时,MASQUERADE可自行判断要转换为的外网地址

 

~]# iptables -t nat -A POSTROUTING -s 192.168.12.0/24 -j MASQUERADE

 

DNAT示例:

~]# iptables -t nat -A PREROUTING -d 172.16.100.67 -p tcp –dport 80 -j DNAT –to-destination 192.168.12.77

 

~]# iptables -t nat -A PREROUTING -d 172.16.100.67 -p tcp –dport 80 -j DNAT –to-destination 192.168.12.77:8080

~]# iptables -t nat -A PREROUTING -d 172.16.100.67 -p tcp –dport 22012 -j DNAT –to-destination 192.168.12.78:22

 

 

REDIRECT:

本机的端口重定向

web: 8080

80 –> 8080

 

 

补充:利用iptablesrecent模块来抵御DOS攻击: 22,建立一个列表,保存有所有访问过指定的服务的客户端IP

 

 

ssh: 远程连接,

 

iptables -I INPUT -p tcp –dport 22 -m connlimit –connlimit-above 3 -j DROP

 

 

iptables -I INPUT  -p tcp –dport 22 -m state –state NEW -m recent –set –name SSH

iptables -I INPUT  -p tcp –dport 22 -m state –state NEW -m recent –update –seconds 300 –hitcount 3 –name SSH -j LOG –log-prefix "SSH Attach: "

iptables -I INPUT  -p tcp –dport 22 -m state –state NEW -m recent –update –seconds 300 –hitcount 3 –name SSH -j DROP

 

1.利用connlimit模块将单IP的并发设置为3;会误杀使用NAT上网的用户,可以根据实际情况增大该值;

 

2.利用recentstate模块限制单IP300s内只能与本机建立2个新连接。被限制五分钟后即可恢复访问。

 

下面对最后两句做一个说明:

 

1.第二句是记录访问tcp 22端口的新连接,记录名称为SSH

–set 记录数据包的来源IP,如果IP已经存在将更新已经存在的条目

 

2.第三句是指SSH记录中的IP300s内发起超过3次连接则拒绝此IP的连接。

–update 是指每次建立连接都更新列表;

–seconds必须与–rcheck或者–update同时使用

–hitcount必须与–rcheck或者–update同时使用

 

3.iptables的记录:/proc/net/xt_recent/SSH

 

————————————————————————————————————————————————

CentOS 6

 

http://ftp.redhat.com/redhat/linux/enterprise/6Server/en/os/SRPMS/

 

layer7:第三方扩展;

 

iptables实现七层访问过滤:

 

模块:layer7

识别应用层协议

 

iptables/netfilter

iptables -m state,

netfilter state

 

对内核中的netfilter,打补丁layer7,重新编译内核

iptables打补丁,补上layer7模块,重新iptables

 

 

diff/patch:文本操作工具

 

 

diffUnix系统的一个很重要的工具程序。它用来比较两个文本文件的差异,是代码版本管理的核心工具之一。其用法非常简单:

  # diff <变动前的文件> <变动后的文件>

 

由于历史原因,diff有三种格式:

  * 正常格式(normal diff

  * 上下文格式(context diff

  * 合并格式(unified diff

 

1、正常格式的diff

例如,对file1(变动前的文件)和file2(变动后的文件)进行比较可使用如下命令:

           # diff file1 file2

显示结果中,第一行是一个提示,用来说明变动位置。它分成三个部分:前面的数字,表示file1的第n行有变化;中间的"c"表示变动的模式是内容改变(change),其他模式还有"增加"a,代表addition)和"删除"d,代表deletion);

 

2、上下文格式的diff

上个世纪80年代初,加州大学伯克利分校推出BSD版本的Unix时,觉得diff的显示结果太简单,最好加入上下文,便于了解发生的变动。因此,推出了上下文格式的diff。它的使用方法是加入-c选项(即context)。

           # diff -c f1 f2

结果分成四个部分。第一部分的两行,显示两个文件的基本情况:文件名和时间信息,"***"表示变动前的文件,"—"表示变动后的文件。第二部分是15个星号,将文件的基本情况与变动内容分割开。第三部分显示变动前的文件,即file1

另外,文件内容的每一行最前面,还有一个标记位。如果为空,表示该行无变化;如果是感叹号(!),表示该行有改动;如果是减号(),表示该行被删除;如果是加号(+),表示该行为新增。

第四部分显示变动后的文件,即file2

 

3、合并格式的diff

如果两个文件相似度很高,那么上下文格式的diff,将显示大量重复的内容,很浪费空间。1990年,GNU diff率先推出了"合并格式"diff,将f1f2的上下文合并在一起显示。

它的使用方法是加入u参数(代表unified)。

  # diff -u f1 f2

其结果的第一部分,也是文件的基本信息。"—"表示变动前的文件,"+++"表示变动后的文件。第二部分,变动的位置用两个@作为起首和结束。第三部分是变动的具体内容。

除了有变动的那些行以外,也是上下文各显示3行。它将两个文件的上下文,合并显示在一起,所以叫做"合并格式"。每一行最前面的标志位,空表示无变动,减号表示第一个文件删除的行,加号表示第二个文件新增的行。

 

diff

-u

 

patch

 

尽管并没有指定patchdiff的关系,但通常patch都使用diff的结果来完成打补丁的工作,这和patch本身支持多种diff输出文件格式有很大关系。patch通过读入patch命令文件(可以从标准输入),对目标文件进行修改。通常先用diff命令比较新老版本,patch命令文件则采用diff的输出文件,从而保持原版本与新版本一致。

 

patch的标准格式为

patch [options] [originalfile] [patchfile]

 

如果patchfile为空则从标准输入读取patchfile内容;如果originalfile也为空,则从patchfile(肯定来自标准输入)中读取需要打补丁的文件名。因此,如果需要修改的是目录,一般都必须在patchfile中记录目录下的各个文件名。绝大多数情况下,patch都用以下这种简单的方式使用:

 

 

patch命令可以忽略文件中的冗余信息,从中取出diff的格式以及所需要patch的文件名,文件名按照diff参数中的"源文件""目标文件"以及冗余信息中的"Index"行中所指定的文件的顺序来决定。

 

-p参数决定了是否使用读出的源文件名的前缀目录信息,不提供-p参数,则忽略所有目录信息,-p0(或者-p 0)表示使用全部的路径信息,-p1将忽略第一个"/"以前的目录,依此类推。如/usr/src/linux-2.4.15/Makefile这样的文件名,在提供-p3参数时将使用linux-2.4.15/Makefile作为所要patch的文件。

 

patch

-p

-R

 

mockbuild

 

总结:操作步骤

 

1、获取并编译内核

 

# useradd mockbuild

# rpm -ivh kernel-2.6.32-431.5.1.x86_64.el6.src.rpm

# cd rpmbuild/SOURCES

# tar linux-2.6.32-*.tar.gz -C /usr/src

# cd /usr/src

# ln -sv

 

2、给内核打补丁

# tar xf netfilter-layer7-v2.23.tar.bz2

# cd /usr/src/linux

# patch -p1 < /root/netfilter-layer7-v2.23/kernel-2.6.32-layer7-2.23.patch

# cp /boot/config-*  .config

# make menuconfig

 

按如下步骤启用layer7模块                

Networking support Networking Options Network packet filtering framework Core Netfilter Configuration

<M>  “layer7” match support

 

3、编译并安装内核

# make

# make modules_install

# make install

 

4、重启系统,启用新内核

 

5、编译iptables

 

# tar xf iptables-1.4.20.tar.gz

# cp /root/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/* /root/iptables-1.4.20/extensions/

# cp /etc/rc.d/init.d/iptales /root

# cp /etc/sysconfig/iptables-config /root

# rpm -e iptables iptables-ipv6 –nodeps

# ./configure  –prefix=/usr  –with-ksource=/usr/src/linux

# make && make install

 

# cp /root/iptables /etc/rc.d/init.d

# cp /root/iptables-config /etc/sysconfig

 

6、为layer7模块提供其所识别的协议的特征码

 

# tar zxvf l7-protocols-2009-05-28.tar.gz

# cd l7-protocols-2009-05-28

# make install                

 

7、如何使用layer7模块

 

ACCT的功能已经可以在内核参数中按需启用或禁用。此参数需要装载nf_conntrack模块后方能生效。

net.netfilter.nf_conntrack_acct = 1

 

 

 

l7-filter uses the standard iptables extension syntax

# iptables [specify table & chain] -m layer7 –l7proto [protocol name] -j [action]

 

 

# iptables -A FORWARD -m layer7 –l7proto qq -j REJECT

 

 

 

编译内核:

make menuconfig

make -j #

make modules_install

make install

 

清理内核源码树:

 

提示:xt_layer7.ko依赖于nf_conntrack.ko模块

原创文章,作者:sjfbjs,如若转载,请注明出处:http://www.178linux.com/54321

(0)
上一篇 2016-10-30 21:02
下一篇 2016-10-30 21:03

相关推荐

  • 磁盘和文件系统创建

    磁盘结构:主要是由盘体、控制电路、接口部件等组成。盘体里面封装了多个盘片的腔体;控制电路包含硬盘BIOS、主控芯片和硬件缓存等单元;接口部件包含电源、数据接口主从跳线等。读取硬盘数据时,主轴电机带动盘片旋转,副轴电机带动磁头臂将磁头放到相应的数据存放的柱面和磁道上,再由磁头读出相应扇区中的数据。(图1-1) 磁道(track):每个盘面被划分成了多个同心圆环…

    Linux干货 2016-02-14
  • GNU awk的输出格式化和操作符

    printf命令 格式化输出:printf “FORMAT”, item1, item2, … (1) 必须指定FORMAT (2) 不会自动换行,需要显式给出换行控制符,\n (3) FORMAT中需要分别为后面每个item指定格式符 格式符:与item一一对应 %c: 显示字符的ASCII码 %d, %i: 显示十进制整数 %e, %E:显示…

    2018-01-01
  • RPM软件包管理

    Linux应用程序的组成 安装完一个软件包以后,可能会向系统中复制大量的数据文件,并进行相关设置。在Linux系统中,典型的应用程序通常由以下几部分组成。 普通的可执行程序文件:一般保存在“/usr/bin”目录中,普通用户即可执行。 服务器程序、管理程序文件:一般保存在”/usr/sbin“目录中,只有管理员能执行。 配置文件:一般保存在”/etc“目录中…

    Linux干货 2016-08-21
  • Awk

    awk各种详细使用方法

    Linux干货 2018-01-02
  • 网络管理,程序管理

    lsmod |grep bond0 ifconfig bond0 down 关闭bonding服务 rmmod bonding  删除 bonding 服务 lsmod |grep eth1000 查看  lsmod指令,会列出所有已载入系统的模块 rmmod  删除内核中的一模块  查找网卡驱动e1000 rmmod…

    Linux干货 2016-09-11
  • 小巧精悍——常见文本处理工具用法及技巧总结

    小巧精悍——常见文本处理工具用法及技巧总结 Linux最重要的哲学思想就是:一切皆文件。可见文件及文件操作在Linux当中是多么的重要。在Linux系统中我们也会经常用到各种文本文件处理的操作,熟练使用这些小巧精悍的文本处理工具,在关键时刻往往展现非凡的神奇功效。常见文本处理小工具:cat、hexdump、nl、less、head、tail、cut、tr、r…

    Linux干货 2016-11-05