热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于iptables的网桥防火墙的搭建

基于iptables的网桥防火墙的搭建目标:在不改变网络拓补结构的前提下,实现一个防火墙,对经过该防火墙的数据进行过滤。在此,我们主要是想对所有与服务器进行通信的数据进行过滤。结构图如下:服务器和左

基于iptables的网桥防火墙的搭建

目标: 在不改变网络拓补结构的前提下,实现一个防火墙,对经过该防火墙的数据进行过滤。在此,我们主要是想对所有与服务器进行通信的数据进行过滤。结构图如下:


服务器和左边的Internet可以处于同一个局域网,比如网段都为: 192.168.1.0。另外可以增加一个网卡作为管理,这个管理的口可以不必接入Internet中,这样可以达到无法对网桥进行攻击的目的。由上图可以看出我们使用了三块网卡,其实只用两块网卡也可以实现,只是需要给网桥设置一个IP,然后通过这个IP登录。

         实现这个系统的环境:

         系统: ubuntu9.04   内核版本:2.6.28

         防火墙: iptables,版本:1.4.16.3   (用1.4.13的时候出过问题)

         编译器:4.3.3

 

原理简介:在linux 2.6的内核中已经自带有netfilter可以对网络数据包进行过滤,只是如果要设置过滤规则,那必须安装用户端管理软件,这就是ebtables和iptables,其中ebtables工作于数据链路层,而iptables既可以工作于数据链路层也能工作于网络层,如果同时使用了ebtables和iptables那ebtables的过滤总是在iptables的过滤之前执行。

具体原理可以参考:http://bbs.kylin-linux.com/htm_data/55/1012/716.html(差不多是官方文档来源于http://www.linuxsecurity.com/)

Linux内核bridge浅析:http://www.360doc.com/content/11/0211/12/5708196_92110977.shtml

iptables 原理及应用详解: http://xuev.blogbus.com/logs/37627772.html

linux透明防火墙(网桥模式): http://blog.chinaunix.net/uid-13377701-id-2896026.html

 

首先搭建网桥,在我们的设备中有三块网卡,其中eth0用于管理,eth1和eth2添加到网桥中。命令如下:

 ifconfig eth2  down  # 先把这eth2口关闭, 这两个命令可以不用,但最好是执行下。
 ifconfig eth1  down

 ifconfig eth2 0.0.0.0 up     #启动eth2, 并把IP设为0.0.0.0(数据链路层不需要IP)

 ifconfig eth1 0.0.0.0 up

 brctl addbr br0            #添加网桥

 brctl addif br0 eth2        #把eth2添加到网桥中

 brctl addif br0 eth1

 ifconfig br0 0.0.0.0 up   #这里没有给网桥设置IP,如果是两块网卡,那可以设个IP

 

OK,接下来就是配置文件了,这个还是比较重要的,要不下次开机,网桥会不好使的。配置文件/etc/network/interfaces内容如下:

auto lo

iface lo inet loopback

 

auto eth0

iface eth0 inet dhcp

 

auto eth1

iface eth1 inet manual

 #      address 0.0.0.0

 #      network 0.0.0.0

 #      netmask 255.255.255.0

 #      broadcast 255.255.255.255

 #      gateway 0.0.0.0

 

auto eth2

iface eth2 inet manual

 #      address 0.0.0.0

 #      network 0.0.0.0

 #      netmask 255.255.255.0

 #      broadcast 255.255.255.255

 #      gateway 0.0.0.0


auto br0

iface br0 inet dhcp

 #      address 10.65.160.104

 #      network 10.65.128.0

 #      netmask 255.255.128.0

 #      broadcast 10.65.255.255

 #      gateway 10.65.156.27

#下面这一行必须要!即是把eth1和eth2添加到网桥中

       bridge_ports eth1 eth2  

 #     bridge_fd 9

 #      bridge_hello 2

 #      bridge_maxage 12

 #      bridge_stp off

 修改完之后通过执行: /etc/init.d/networking  restart 重启网络服务,各网卡的配置信息可以通过ifconfig命令查看。

经过上面这些,开机后如果正常的话,网桥是好使了的,另外eth1和eth2没有IP信息,其它的三个口(eth0, br0, lo)都有IP地址的。

上面的配置文件,如果不好使,那可以把dhcp换为manual或者把manual换为dhcp试试,注释掉的部分是可选项,可以参考:

http://manpages.ubuntu.com/manpages/precise/en/man5/interfaces.5.html

http://manpages.ubuntu.com/manpages/lucid/man5/bridge-utils-interfaces.5.html


上面这些实现了网桥,但该网桥还不能转发数据,因为在默认情况下,linux系统是不能转发数据的,我们可以通过修改配置文件/etc/sysctl.conf来实现转发,修改地方如下:

# Uncomment the next line to enable packetforwarding for IPv4

net.ipv4.ip_forward=1  #去掉这一行最前面的注释(#号)

# Uncomment the next line to enable packetforwarding for IPv6

net.ipv6.conf.all.forwarding=1  #去掉这一行最前面的注释(#号)

修改完之后执行:/etc/init.d/procps  restart  重启服务

这个可以参考:http://www.ducea.com/2006/08/01/how-to-enable-ip-forwarding-in-linux/

 

OK,网桥基本上没有问题了,接下来就是安装iptables和编写过滤规则了。过程如下:

命令:apt-get installiptables

如果这样安装的iptables版本不对或者使用时有问题,那可以google搜索iptables或者直接去http://www.netfilter.org/projects/下载源码,然后自己编译安装。

         安装命令如下:

         tar  xvf iptables-1.4.16.3.tar.gz

         cd   iptables-1.4.16.3

         ./configure 

         make  && make install

默认的安装路径为/usr/local  如果不懂可以通过./configure  --help查看,安装过程如果权限有问题,那请切换到root用户下执行或用sudo如 sudo make install

OK,iptables安装好了,之后切换到root就可以执行iptables命令了。ebtables安不安装就随便了,一般可以不用安装的。

 

         接下来就是编写过滤规则了:

iptables -A INPUT -s www.baidu.com -p tcp --sport 80 -j DROP
iptables -A INPUT -s 119.75.217.109 -p tcp --sport 80 -j DROP

iptables -A INPUT -m string  --algo bm --hex-string "www.baidu.com|2e 62 61 69 64 75 2e|" -j DROP

iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j NFLOG

iptables -A OUTPUT  -j NFLOG  --nflog-prefix "北京欢迎您"

详细iptables过虑规则可以参考:

http://www.cnblogs.com/JemBai/archive/2009/03/19/1416364.html

http://linux.die.net/man/8/iptables

编写的过滤规则我们肯定想保存到一个文件中,开机的时候自动加载过滤规则,要不过滤只是保存在内存中,下次开机后就没有了。

保存命令: iptables-save –c  > /etc/iptables-ruleset   #文件名可以自己定

自动加载: 在/etc/rc.local文件中(exit 0之前)加入如下一行:

                      iptables-restore  < /etc/iptables-ruleset

这里需要注意的就是保存的文件,和加载的必须是同一个文件,所以如果不能自动加载,那一定先检查下,这两个文件是否一致!!另外可能就是由于iptables这个命令的路径造成的,那就用绝对路径,如: /usr/local/sbin/iptables-restore  < /etc/iptables-ruleset , iptables命令的具体路径可以通过whereis iptables命令来查看!

 

到此,网桥防火墙的搭建搞定,后面要做的就是想把拦截的日志记录到mysql或者日志文件中,如果是记录到mysql中,那还可以弄一个web端来进行访问。


附iptables过滤流程图(下载地址:http://download.csdn.net/detail/dlutxie/4949368)如下:



推荐阅读
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的步骤和方法
    本文介绍了在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的详细步骤和方法。首先需要下载最新的Java SE Development Kit 9发行版,然后按照给出的Shell命令行方式进行安装。详细的步骤和方法请参考正文内容。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
author-avatar
措小爱2TU1984
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有