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

透明防火墙

透明防火墙--Linux企业应用-Linux服务器应用信息,下面是详情阅读。
一般而言,防火墙的两个网络接口应分属两个不同的网络,根据系统管理员定义的访问规则在两个接口之间转发数据包,或者拒绝、丢弃数据包。实际上,防火墙不单单是访问控制的功能,而且还充当了路由器的角色。当然,这并非有什么不妥当的地方,但是当你企图把你配置好的linux防火墙放入运行网络,来保护现有系统安全的时候,你不得不重新考虑和更改你的网络架构。另外一个可能的麻烦是,当防火墙发生意外时,如果没有防火墙的硬件备份的话,那么你将面临巨大的心理压力,因为防火墙的故障,整个网络瘫痪了。假如你把防火墙配置成透明模式(可称为伪网桥),就无需更改网络架构,即使是防火墙不能工作了,要做的仅仅是拔出网线,把网线直接插在路由器的内部接口就可以让网络正常工作,然后你就有时间慢慢恢复发生故障的防火墙。
好了,既然透明防火墙有那么多方便,我们赶快动手来配置吧!准备一台pc机,两块网卡(建议用3com网卡),网线若干,redhat linux 9安装盘一套。打开机箱,把两块网卡插入计算机的pci插槽,用网线把计算机分别与网关和交换机相连(如前页图“正常状态”那样);盖上计算机的盖子,插上电源,开机。在光驱里放上Linux 9安装光盘,由光盘引导计算机,从而安装Linux 系统。选择定制安装,不要保守,多花一点时间体验一下图形界面的安装乐趣,取消防火墙(no firewall),在安装快结束时选择以文本方式登录系统,完成安装。
透明防火墙功能配置:
1、设置网络地址。修改文件 /etc/sysconfig/network-scripts/ifcfg-eth0 和 /etc/sysconfig/network-scripts/ifcfg-eth1,使其具有相同的ip地址,相同的子网掩码。
用vi 来编辑如下,保存文件,运行命令 service network restart 使修改生效。
DEVICE=eth0
BOOTPROTO=none
BROADCAST=192.168.1.255
IPADDR=192.168.1.254
NETMASK=255.255.255.0
NETWORK=192.168.1.0
OnBOOT=yes
USERCTL=no
PEERDNS=no
TYPE=Ethernet DEVICE=eth1
BOOTPROTO=none
BROADCAST=192.168.1.255
IPADDR=192.168.1.254
NETMASK=255.255.255.0
NETWORK=192.168.1.0
OnBOOT=yes
USERCTL=no
PEERDNS=no
TYPE=Ethernet
这里需要注意两个地方,第一个是要区分清楚那一个网卡是eth0,那一个是 eth1.这个问题十分关键,如果搞混了就会导致防火墙不能连通网络。至于怎样区分eth0和 eth1,我将在文章的末尾作简单的描述。在这里假定与路由器相连的网卡是eth0.
2、设置默认路由。在文件 /etc/sysconfig/network-scripts/ifcfg-eth0 中加入一行 gateway=192.168.1.1 保存后运行命令 service network restart ,修改生效。找一个开放ICMP协议的公网IP,用命令ping 202.108.36.196 (www.163.com 的主机)检测跟外网的连通状况,如果正常,表明Linux防火墙主机跟外网配置正确。再用命令ping 192.168.1.18 检测防火墙主机与内网主机的连通状况,如果正常则进行下一步操作。
3、启用网络转发和proxy_arp 。这是透明防火墙的核心部分,我把它们写进文件/etc/rc.d/rc.local。用vi /etc/rc.d/rc.local 插入如下内容。在做这一步的时候,我曾
#Ip forward
/sbin/sysctl -w net.ipv4.conf.all.forwarding=1
#Enable proxy-arp
/sbin/sysctl -w net.ipv4.conf.eth0.proxy_arp=1
/sbin/sysctl -w net.ipv4.conf.eth1.proxy_arp=1
经花费较多的时间,因为我做参考的那本书里的这一步没有参数 “?w” ,后来单独运行 sysctl net.ipv4.conf.eth0.proxy_arp=1 才发现red hat Linux 9 没有参数“-w”不能运行。
4、 指定路由。由于两块网卡(eth0,eth1)使用同样的ip ,如果不专门指定转发路径,一定会导致路由混乱,从而使防火墙以内的计算机没法访问 Internet 。还是用命令 vi 修改文件 /etc/rc.d/rc.local ,插入如下几行。保存文件,重新启动计算机/
#Define route
/sbin/ip route del 192.168.1.0/24 dev eth0
/sbin/ip route add 192.168.1.1 dev eth0
/sbin/ip route add 192.168.1.0/24 dev eth1
Linux防火墙,如果不出意外,就可以从192.168.1.18 这台主机访问Internet,当然内网的任何机器都是可以访问Internet 的。在这里对定义的路由(Define route)作些说明:/sbin/ip route del 192.168.1.0/24 dev eth0 表明所有到子网192.168.1.0/24的数据包都不从网卡eth0转发而从 eth1转发,即命令 /sbin/ip route add 192.168.1.0/24 dev eth1;/sbin/ip route add 192.168.1.1 dev eth0 表明所有到192.168.1.1的数据包都由eth0转发,这其实可以理解为两个网卡数据转发的分工—到192.168.1.1 的数据包由eth0负责,其余的由eth1负责。到这一步,恭喜你!已经成功了一大半,如果安装Linux的时候,选择的防火墙规则为中等级别,那么这个防火墙已经配置成功了。相信大家跟我一样,且肯就此罢休。
定制防火墙策略
都是2.4.20的内核版本,当然要用netfilter/iptables。由于安装Linux系统的时候,选择了“无防火墙”这个选项,那么在/etc/sysconfig 下将没有iptables这个文件存在。还是让我们随心所欲的来定制防火墙访问策略吧。
在目录 /etc/rc.d 下创建脚本文件 myfirewall.sh,用命令 touch /etc/rc.d/myfirewall.sh并给文件执行权限 chmod 711 myfirewall。然后用 vi 编辑这个文件。我写的这个
vi /etc/rc.d/myfirewall.sh
#!/bin/bash
#Define string
IPT=/sbin/iptables
#Refresh rules
$IPT -F FORWARD
$IPT -F INPUT
$IPT -F OUTPUT
#Default policy
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
#Enable loopback
$IPT -A INPUT -i lo -p all -j ACCEPT
#Enable icmp
$IPT -A INPUT -p icmp ?j ACCEPT
#Interface forward
$IPT -A FORWARD -s 192.168.1.0/24 -j ACCEPT
$IPT -A FORWARD -d 192.168.1.0/24 -j ACCEPT
#Enable ssh
$IPT -A INPUT -p tcp --dport 22 -j ACCEPT
#Add other access rule //可根据实际情况添加或减少规则
$IPT -A INPUT -p tcp --dport 20 -j ACCEPT
$IPT -A INPUT -p tcp --dport 21 -j ACCEPT
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT
$IPT -A INPUT -p tcp --dport 53 -j ACCEPT
$$IPT -A INPUT -p udp --dport 53 -j ACCEPT
$IPT -A INPUT -p tcp --dport 23 -j ACCEPT
$IPT -A INPUT -p tcp --dport 110 -j ACCEPT
$IPT -A INPUT -p tcp --dport 25 -j ACCEPT
$IPT -A INPUT -p tcp --dport 443 -j ACCEPT
规则只开放了较少的允许访问的策略(可以ping ,收发邮件,浏览网页,ssh,https,telnet,ftp,其它的访问则全部丢弃)。$IPT ?A OUTPUT ACCEPT 没有设置成DROP的原因是由于大部分网络服务所使用的协议是tcp协议,众所周知,tcp协议是面向连接的,如果设置 $IPT ?A OUTPUT DROP, 那么任何协议为tcp的连接就要写两条了。况且防火墙对外的访问总是允许的,因此这样做是为了简化规则。
修改完成后保存,然后在当前目录运行命令 ./myfirewall.sh,在上述脚本没有书写错误的情况下,规则生效,但它仅仅在内存里,用命令 service iptables save 将自动生成文件 /etc/sysconfig/iptables,前面设定的访问策略就被保存到硬盘,系统重启时,系统将自动地从文件 /etc/sysconfig/iptables 获得定制的访问策略。
到这里,一个透明的linux 防火墙就架设好了。更改计算机的BIOS设置,使它可以在没有键盘的情况下启动系统。启用ftp,以便可以在需要时可以向防火墙主机拷贝文件。把键盘和显示器拿掉,剩下的操作只是摁一下电源开关。

可能有时候我们需要更改防火墙的某些规则,或者做些别的管理,既然我们是系统管理员,再插上键盘和接上显示器坐在防火墙面前可能会被人耻笑,因此这些管理工作当然通过网络来进行。Ssh和webmin是我的偏好,ssh的协议端口是22,webmin的默认协议端口是10000。其中ssh是 linux系统的默认服务 ,只要安装客户端就可以(windows下的程序securecrt 是个不错的选择,据说ssh连接速度没有vnc 快)对防火墙进行所有的管理(和直接操作防火墙主机一样);webmin是基于web的图形界面管理方式,非常的方便和直观,尽管它不能象ssh那样对系统进行完全的管理,但是对于我们的工作需求还是可以满足,建议在防火墙系统安装webmin服务器程序。Ssh与webmin两者结合使用,可以帮助我们较快较深入地掌握Linux。
Ssh客户端安装较为简单,而webmin不需要安装客户端。这里介绍webmin 服务器的安装:把webmin-1.110. tar.gz 下载到另外一台windows的硬盘里,然后用ftp把它复制到防火墙主机的ftp目录(如果你是linux高手,并不需要如此,只须以ssh方式登录防火墙,用get/wget指令取得该文件),解开文件webmin-1.110.tar.gz tar ?zxvf webmin-1.110.gz.tzr cd webmin-1.110 安装webmin ./setup.sh ,一路回车,创建一个webmin管理账户,安装完毕;在任何一台运行浏览器的地址栏输入防火墙的ip加上端口号10000就可以管理防火墙(http://192.168.1.254:10000)。
以这种方式管理linux 网络的防火墙十分直观,并且选项十分详尽,就算不懂iptable语法的人也能容易的配置防火墙的访问规则。这里有一个技巧,假如你更改了某条访问规则导致网络不能向外访问,不要慌,到防火墙跟前重启一下系统即可。万一更改规则发生不测并且规则已经写入硬盘,那么请你直接删除文件 /etc/sysconfig/iptables,然后再运行脚本 sh /etc/rc.d/myfirewall 再次重写文件/etc/sysconfig/iptables service iptables save 。有的系统管理员倾向于直接编辑/etc/sysconfig/iptables 文件,但是这需要更多的耐心和勇气。如果你是新手,建议你跟我一样,先写脚本,再生成iptables。
特别关注:
最好把除路由器而外的整个网络放在防火墙的保护之中。如果象下图那样有同一
网段的主机放在防火墙的前面,将导致严重的网络故障。实践表明,这台windows主机的ip地址丢失了(网络属性的ip值还在,但用命令 ipconfig /all 则是 0.0.0.0),重启windows后提示ip地址冲突,更换同一网段内的任何一个未用的ip地址还是提示冲突。搞的我的两台邮件服务器和两台web服务器停火,我还以为是中了邪门的病毒,直到后来我把tcp/ip协议卸载再安装才解决问题。经分析,是防火墙的路由导致这样的故障。强烈建议把所有的主机放在防火墙的保护之下,以减少网络的复杂程度。另外,我们应该养成这样一种习惯—在系统正常的情况下,如果更改了配置,请一定要用笔记录所作的更改,以便在改出问题时我们能够快速准确的恢复,这种习惯更可运用到所有的IT管理工作,它是我的不传之密。
感谢齐一楠为解决问题提供的无私的帮助!
附:区分eth0与eth1的小技巧。把防火墙的一块网卡跟交换机相连,另外一块不做任何连接,即另外一块网卡的网络连接是断开的;使用命令 ifconfig eth0 down 关闭网络接口eth0;用网络中的另一台计算机 ping 192.168.1.254 ,如果ping 通了则表明连接交换机的网络接口为eth1,另一块为eth0,还可以把网线交换一下另一网络接口,确认判断的正确性
推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了iOS开发中检测和解决内存泄漏的方法,包括静态分析、使用instruments检查内存泄漏以及代码测试等。同时还介绍了最能挣钱的行业,包括互联网行业、娱乐行业、教育行业、智能行业和老年服务行业,并提供了选行业的技巧。 ... [详细]
  • Linux一键安装web环境全攻略
    摘自阿里云服务器官网,此处一键安装包下载:点此下载安装须知1、此安装包可在阿里云所有Linux系统上部署安装,此安装包包含的软件及版本为& ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 原理:dismiss再弹出,把dialog设为全局对象。if(dialog!null&&dialog.isShowing()&&!(Activity.)isFinishing()) ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 本文详细介绍了在Centos7上部署安装zabbix5.0的步骤和注意事项,包括准备工作、获取所需的yum源、关闭防火墙和SELINUX等。提供了一步一步的操作指南,帮助读者顺利完成安装过程。 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
  • Django + Ansible 主机管理(有源码)
    本文给大家介绍如何利用DjangoAnsible进行Web项目管理。Django介绍一个可以使Web开发工作愉快并且高效的Web开发框架,能够以最小的代价构建和维护高 ... [详细]
  • DockerDataCenter系列(四)-离线安装UCP和DTR,Go语言社区,Golang程序员人脉社 ... [详细]
  • 我一直都有记录信息的习惯,不知是从什么时候开始,大约是在工作后不久。如今还真有点庆幸从那时开始记了点东西,当然是电子版的,写 ... [详细]
  • SQL Server 2008 到底需要使用哪些端口?
    SQLServer2008到底需要使用哪些端口?-下面就来介绍下SQLServer2008中使用的端口有哪些:  首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果 ... [详细]
author-avatar
郑雅琳RaeiHh
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有