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)
sjfbjssjfbjs
上一篇 2016-10-30 21:02
下一篇 2016-10-30 21:03

相关推荐

  • M22 使用非对称密钥实现ssh自动登陆

    一 实验目的 一般在用户使用ssh客户端登陆ssh服务器时需要使用用户名和密码,本实验使用非对称加密的方式实现了无密码登陆ssh服务器。 二 实验流程  、 1 在客户端生成非对称密钥对 2 将非对称密钥中的公钥发送给ssh服务器端相应的帐号 3 当客户端通过ssh协议与服务器端发起连接时,客户端将私钥加密过的签名发送给服务器端,服务器端使用客户端…

    2017-04-13
  • zabbix 自动注册(registration)实例

    原理: Zabbix_agnetd ==> Zabbix_server 【agnet自动发数据到server端】 实现目的:zabbix 根据计算机名称识别如(XLH-PROD-XXX)条件,自动添加相关服务器(组group+相关监控模板)  部署步骤 1.创建新的模板,主机组 1.1 新增或模板【组态】【模板】手选一个模板 如果已…

    Linux干货 2016-09-15
  • Linux终端类型

    希望可以通过本文让网友们对linux的终端类型有一个清晰的认识!

    Linux干货 2016-10-14
  • 马哥教育网络班20期-第五周课程作业

    Table of Contents 1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; 2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行; 3、打出netstat -tan命令执行结果中以‘LISTEN’,后或跟空白字符结尾的行; 4、添加用户bash, tes…

    Linux干货 2016-07-12
  • 初识varnish

      实验拓扑 varnish主机    地址192.168.150.137 后端web主机     web1静态服务192.168.150.138     web2动态服务192.168.150.140 varnish的安装及开启 varnish主机: ~]# yum info varni…

    Linux干货 2017-01-05
  • linux的各种小命令和目录

    linux的各种小命令   pwd 显示当前工作的目录   w who whoami 显示当前用户及已建立的ssh链接   useradd 新建一个普通用户   passwd 修改用户的密码   # 代表当前工作的是root 超级用户   $ 代表当前工作的普通用户 &…

    Linux干货 2017-03-27