`
阅读更多

iptables使用实例

首先让我们看一下服务器/客户机的交互原理。服务器提供某特定功能的服务总是由特定的后台程序提供的。在TCP/IP网络中,常常把这个特定的服 务绑定到特定的TCP或UDP端口。之后,该后台程序就不断地监听(listen)该端口,一旦接收到符合条件的客户端请求,该服务进行TCP握手后就同 客户端建立一个连接,响应客户请求。与此同时,再产生一个该绑定的拷贝,继续监听客户端的请求。

举一个具体的例子:假设网络中有一台服务器A(IP地址为1.1.1.1)提供WWW服务,另有客户机B(2.2.2.2)、 C(3.3.3.3)。首先,服务器A运行提供WWW服务的后台程序(比如Apache)并且把该服务绑定到端口80,也就是说,在端口80进行监听。当 B发起一个连接请求时,B将打开一个大于1024的连接端口(1024内为已定义端口),假设为1037。A在接收到请求后,用80端口与B建立连接以响 应B的请求,同时产生一个80端口绑定的拷贝,继续监听客户端的请求。假如A又接收到C的连接请求(设连接请求端口为1071),则A在与C建立连接的同 时又产生一个80端口绑定的拷贝继续监听客户端的请求。如下所示,因为系统是以源地址、源端口、目的地址、目的端口来标识一个连接的,所以在这里每个连接 都是唯一的。

服务器 客户端
连接1:a.b.c.1:80 <=>; a.b.c.4:1037
连接2:a.b.c.1:80 <=>; a.b.c.7:1071

每一种特定的服务都有自己特定的端口,一般说来小于1024的端口多为保留端口,或者说是已定义端口,低端口分配给众所周知的服务(如WWW、 FTP等等),从512到1024的端口通常保留给特殊的UNIX TCP/IP应用程序,具体情况请参考/etc/services文件或 RFC1700。

假设网络环境如下:某一单位,租用DDN专线上网,网络拓扑如下:

+--------------+
| 内部网段 | eth1+--------+eth0 DDN
| +------------|firewall|<===============>;Internet
| 198.168.80.0 | +--------+
+--------------+
eth0: 198.199.37.254
eth1: 198.168.80.254

以上的IP地址都是Internet上真实的IP,故没有用到IP欺骗。并且,我们假设在内部网中存在以下服务器:
www服务器:www.yourdomain.com 198.168.80.11
ftp服务器:ftp.yourdomain.com 198.168.80.12
email服务器:mail.yourdomain.com 198.168.80.13

下面我们将用iptables一步一步地来建立我们的包过滤防火墙,需要说明的是,在这个例子中,我们主要是对内部的各种服务器提供保护。

1. 在/etc/rc.d/目录下用touch命令建立firewall文件,执行chmod u+x firewll以更改文件属性 ,编辑 /etc/rc.d/rc.local文件,在末尾加上 /etc/rc.d/firewall 以确保开机时能自动执行该脚本。

2. 刷新所有的链的规则
#!/bin/sh

echo "Starting iptables rules..."

#Refresh all chains

/sbin/iptables -F

3. 我们将首先禁止转发任何包,然后再一步步设置允许通过的包。
所以首先设置防火墙FORWARD链的策略为DROP:

/sbin/iptables -P FORWARD DROP

4.设置关于服务器的包过虑规则:

在这里需要注意的是,服务器/客户机交互是有来有往的,也就是说是双向的,所以我们不仅仅要设置数据包出去的规则,还要设置数据包返回的规则,我们先建立针对来自Internet数据包的过虑规则。

WWW服务:服务端口为80,采用tcp或udp协议。规则为:eth0=>;允许目的为内部网WWW服务器的包。

###########################Define HTTP packets####################################

#Allow www request packets from Internet clients to www servers
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.11 --dport www -i eth0 -j ACCEPT

FTP服务:FTP服务有点特别,因为需要两个端口,因为FTP有命令通道和数据通道。其中命令端口为21,数据端口为20,并且有主动和消极两 种服务模式,其消极模式连接过程为:FTP客户端首先向FTP服务器发起连接请求,三步握手后建立命令通道,然后由FTP服务器请求建立数据通道,成功后 开始传输数据,现在大多数FTP客户端均支持消极模式,因为这种模式可以提高安全性。FTP服务采用tcp协议。规则为:eth0=>;仅允许目的 为内部网ftp服务器的包。

############################Define FTP packets#####################################

#Allow ftp request packets from Internet clients to Intranet ftp server
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.12 --dport ftp -i eth0 -j ACCEPT


EMAIL服务:包含两个协议,一是smtp,一是pop3。出于安全性考虑,通常只提供对内的pop3服务,所以在这里我们只考虑针对smtp的安全性问题。smtp端口为21,采用tcp协议。eth0=>;仅允许目的为email服务器的smtp请求。

###########################Define smtp packets####################################
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.13 --dport smtp -i eth0 -j ACCEPT

5. 设置针对Intranet客户的过虑规则:

在本例中我们的防火墙位于网关的位置,所以我们主要是防止来自Internet的攻击,不能防止来自Intranet的攻击。假如我们的服务器都 是基于linux的,也可以在每一部服务器上设置相关的过虑规则来防止来自Intranet的攻击。对于Internet对Intranet客户的返回 包,我们定义如下规则。

#############Define packets from Internet server to Intranet#######################
/sbin/iptables -A FORWARD -p tcp -s 0/0 --sport ftp-data -d 198.168.80.0/24 -i eth0 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.0/24 ! -syn -i eth0 -j ACCEPT
/sbin/iptables -A FORWARD -p udp -d 198.168.80.0/24 -i eth0 -j ACCEPT

说明:第一条允许Intranet客户采用消极模式访问Internet的FTP服务器;第二条接收来自Internet的非连接请求tcp包;最后一条接收所有udp包,主要是针对oicq等使用udp的服务。

6. 接受来自整个Intranet的数据包过虑,我们定义如下规则:

#############Define packets from Internet server to Intranet server###############
/sbin/iptables -A FORWARD -s 198.168.80.0/24 -i eth1 -j ACCEPT

7. 处理ip碎片

我们接受所有的ip碎片,但采用limit匹配扩展对其单位时间可以通过的ip碎片数量进行限制,以防止ip碎片攻击。

#################################Define fregment rule##################################
/sbin/iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT

说明:对不管来自哪里的ip碎片都进行限制,允许每秒通过100个ip碎片,该限制触发的条件是100个ip碎片。

8. 设置icmp包过滤

icmp包通常用于网络测试等,故允许所有的icmp包通过。但是黑客常常采用icmp进行攻击,如ping of death等,所以我们采用limit匹配扩展加以限制:

#################################Define icmp rule##################################
/sbin/iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT

说明:对不管来自哪里的icmp包都进行限制,允许每秒通过一个包,该限制触发的条件是10个包。


通过以上个步骤,我们建立了一个相对完整的防火墙。只对外开放了有限的几个端口,同时提供了客户对Internet的无缝访问,并且对ip碎片攻 击和icmp的ping of death提供了有效的防护手段。以下是完整的脚本文件内容,希望通过这个实例能是对iptables的用法有所了解:

#!/bin/sh

echo "Starting iptables rules..."

#Refresh all chains

/sbin/iptables -F

###########################Define HTTP packets####################################

#Allow www request packets from Internet clients to www servers
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.11 --dport www -i eth0 -j ACCEPT

############################Define FTP packets#####################################

#Allow ftp request packets from Internet clients to Intranet ftp server
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.12 --dport ftp -i eth0 -j ACCEPT

###########################Define smtp packets####################################
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.13 --dport smtp -i eth0 -j ACCEPT

#############Define packets from Internet server to Intranet#######################
/sbin/iptables -A FORWARD -p tcp -s 0/0 --sport ftp-data -d 198.168.80.0/24 -i eth0 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.0/24 ! -syn -i eth0 -j ACCEPT
/sbin/iptables -A FORWARD -p udp -d 198.168.80.0/24 -i eth0 -j ACCEPT

#############Define packets from Intranet to Internet###############
/sbin/iptables -A FORWARD -s 198.168.80.0/24 -i eth1 -j ACCEPT

#################################Define fregment rule##################################
/sbin/iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT

#################################Define icmp rule##################################
/sbin/iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT

分享到:
评论

相关推荐

    iptable_使用实例

    多个实用的linux iptable实例应用。让你快速掌握好linux iptable的部署使用。

    iptable白金讲义

    1. 概述 2. 框架图 3. 语法 4. 实例分析 5. 网管策略 6. FAQ 7. 实战

    使用iptable和Firewalld工具来管理Linux防火墙连接规则

    当数据包进入或离开受保护的网络空间时,将根据防火墙规则测试数据包的内容(特别是有关其来源、目标和计划使用的协议的信息),以确定是否应该允许数据包通过。下面是一个简单的例子: 防火墙可以根据协议或基于目标...

    Ubuntu中保存iptables防火墙规则的例子.docx

    Ubuntu中保存iptables防火墙规则的例子.docx

    hashtable存储IP

    在这个`IPStorage`类中,我们创建了一个`Hashtable`实例`ipTable`,提供了`addIP`方法来添加IP并更新计数,以及`getIPCount`方法来获取IP的出现次数。这样的设计使得对大量IP数据的操作变得高效。 在压缩包文件`...

    iptables-restore命令 还原iptables表的配置

    参考实例 还原iptables配置: [root@linuxcool ~]# iptables-restore &lt; iptables.bak 指定在还原iptables表时候,还原当前的数据包计数器和字节计数器的值: [root@linuxcool ~]# iptables-restore -c &lt; ip

    iptables实例

    第一次上传,发个iptables实例。内容很简单,希望对大家有所帮助;

    python读文件保存到字典,修改字典并写入新文件的实例

    在`GetTcode()`函数中,我们打开一个名为`text_en.txt`的文件,并使用`with`语句确保文件在使用后会被正确关闭。接着,我们遍历文件的每一行,忽略空行,将每行按照制表符分隔成多个元素。第一部分(转换为小写)...

    linux下防火墙iptables

    linux下防火墙iptables 一、基本知识 二、iptable的安装与配置 禁止端口的实例 强制访问指定的站点 发布内部网络服务器 通过NAT上网 iptables实例

    iptalbe配置

    iptable详细配置 iptables官方网站:http://netfilter.org/ •数据包经过防火墙的路径 •禁止端口 •强制访问某站点 •发布内部网络服务器 •智能DNS •端口映射 •通过NAT上网 •IP规则的保存与恢复 •iptables...

    iptables基本命令规则简介

    iptable 配置实例: * iptables -L 列出 iptables 规则 * iptables -F 清除 iptables 内置规则 * iptables -X 清除 iptables 自定义规则 * 设定默认规则在 iptables 规则中没有匹配到规则则使用默认规则进行处理 * ...

    C#操作IP地址数据库源码

    源码中可能会有使用SqlConnection(针对SQL Server)、SQLiteConnection(针对SQLite)等类的实例化和关闭,以及SqlCommand对象来执行SQL命令。 在显示查询结果时,WinForm的DataGrid控件是常见的选择。源码会涉及...

    Linux防火墙

    主要内容包括:防火墙的基础知识,linux防火墙管理程序iptable,构建防火墙的方法,防火墙的优化,数据包的转发,网络监控和攻击检测,内核强化等。本书独立于linux某个发行版本,涉及常驻于linux内核的netfilter...

    109个shell脚本合计

    首先,设置好邮件配置,然后执行iptable命令和日志记录。这对于实时监控系统安全状况非常有用。 3. MySQL数据库备份: 这里有两个脚本,分别实现了单循环和多循环备份。单循环脚本备份所有数据库,而多循环脚本则...

    python保存数据到本地文件的方法

    以下是一个例子: ```python ipTable = ['158.59.194.213', '18.9.14.13', '58.59.14.21'] fileObject = open('sampleList.txt', 'w') for ip in ipTable: fileObject.write(ip) fileObject.write('\n') ...

    纯真IP,根据IP地址找出所属的地区

    在这个例子中,`IPTable`是假设的表名,`IPStart` 和 `IPEnd` 是IP地址段的起始和结束值,`Region` 和 `Operator` 分别代表地区和运营商字段。请注意,实际的表结构和字段可能根据数据库的具体设计有所不同。 为了...

    2 小时玩转 iptables 企业版 v1.5.0.ppt

    iptable的核心在于其规则集,通过定义一系列规则来决定网络数据包的命运。 在iptables的框架图中,有五个基本的链:PREROUTING、INPUT、FORWARD、OUTPUT和POSTROUTING。这些链分别在数据包的不同阶段发挥作用: 1....

    纯真ip数据库 ip ip数据库sql2005版 ip

    使用这个IP数据库时,你需要将.MDF文件附加到你的SQL Server实例上。这可以通过SQL Server Management Studio (SSMS) 完成,操作包括:打开SSMS,连接到服务器,右键点击"数据库",选择"附加",然后浏览并添加.MDF...

    cloudeploy:Cloudeploy基于bugatti理念的极简云部署系统

    使用Cloudeploy可以快速创建主流云实例,安装等各种简化发布工作。 特性 支持多平台创建实例 阿里云 Ucloud 极简接口,仅有3个RESTful API 内嵌数据库 可配置化 小巧方便,仅8M大小的jar文件 安装 Oracle官方下载...

Global site tag (gtag.js) - Google Analytics