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
下一篇 2016-10-30

相关推荐

  • LINUX–命令的格式、类型、别名的概述及运用

    命令格式       COMMAND [OPTIONS…] [ARGUMENTS..]      [OPTIONS..] 选项:用于启用或关闭命令的某个或某些功能                &n…

    2017-05-21
  • Centos系统启动概括流程

    §·Centos系统启动概括流程 系统启动流程: PC (OS Llinux) POST(开机)–>BIOS–>MBR(bootloader .446字节)—>kernel–>/sbin/init(/etc/inittab)(用户空间的管理进程)   备注: POST :加电自…

    Linux干货 2016-09-08
  • 文本处理工具及正则表达式

    一、*各种文本处理工具 1.1抽取文本的工具 1.1.1 cat、less查看文本内容    more、less和cat 【选项】 【文件】 cat  –n ,-d列行 ,-A:显示所有看不见的符号(控制符),     -E:显示结尾$ ;…

    Linux干货 2016-11-23
  • Linux的文件系统的基础目录、帮助、部分命令介绍

    Linux的文件系统的基础目录、帮助、部分命令介绍 目录 linux基础目录 Linux获取帮助 相关控制命令,翻屏等 部分命令介绍 linux的基础目录 Bin: 共所有用户使用的基本命令,就是二进制程序 Sbin:系统的二进制程序。供管理员使用的 Boot:基本的加载器,引导加载器所依赖的各种静态文件 Dev:设备文件和特殊文件 其中设备分为两种类型,字…

    Linux干货 2016-10-29
  • Linux Service and Security(Part 1)

    一、知识整理 1、不安全的传统协议: telnet、FTP、POP3等:不安全的密码; http、smtp、NFS等:不安全信息; Ldap、NIS、rsh等:不安全验证。 设计基本原则: 使用成熟的安全系统; 以小人之心度输入数据; 外部系统是不安全的; 最小授权; 减少外部接口; 缺省使用安全模式; 在入口处检查; 安全不是似是而非; 从管理上保护好系统…

    Linux干货 2016-10-09
  • LVM组件详解&创建实验流程

       前言:根据前面的学习我们知道,一个磁盘一旦分完区并且格式化后,其空间大小是没有办法进行调整了。因此推出了LVM(Logical Volume Manager)逻辑卷管理机制,LVM重点在于可以弹性的调整文件系统的容量!并非在于性能和数据保全方面,需要文件的读写性能或者数据的可靠性,需要用到RAID。而LVM可以整合多个物理…

    Linux干货 2016-08-30