一、概要
防火墙分类 (一)、包过滤防火墙。 数据包过滤(packet Filtering)技术是在网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,称为访问控制表(access control lable,ACL)。通过检查数据流中每个数据包的源地址和目的地址,所用的端口号和协议状态等因素,或他们的组合来确定是 否允许该数据包通过包过滤防火墙的优点是它对用户来说是透明的,处理速度快且易于维护。缺点是:非法访问一旦突破防火墙,即可对主机上的软件和配置漏洞进行攻击;数据包的源 地址、目的地址和IP的端口号都在数据包的头部,可以很轻易地伪造。“IP地址欺骗”是黑客针对该类型防火墙比较常用的攻击手段。 (二)、代理服务型防火墙 代理服务(proxy service)也称链路级网关或TCP通道。它是针对数据包过滤和应用网关技术存在的缺点而引入的防火墙技术,其特点是将所有跨跃防火墙的网络通信链路 分为两段。当代理服务器接收到用户对某个站点的访问请求后就会检查请求是否符合控制规则。如果规则允许用户访问该站点,代理服务器就会替用户去那个站点取 回所需的信息,再转发给用户,内外网用户的访问都是通过代理服务器上的“链接”来实现的,从而起到隔离防火墙内外计算机系统的作用。
此外,代理服务也对过往的数据包进行分析和注册登记,并形成报告,同时当发现有被攻击迹象时会向网络管理员发出警告,并保留攻击记录,为证据收集和网络维护提供帮助。
二、防火墙的工作原理
(一)、包过滤防火墙的工作原理 包过滤是在IP层实现的,因此,它可以只用路由器来完成。包过滤根据包的源IP地址、目的IP地址、源端口、目的端口及包传递方向等报头信息来判断是否允 许包通过,过滤用户定义的内容,如IP地址。其工作原理是系统在网络层检查数据包,与应用层无关。包过滤器的应用非常广泛,因为CPU用来处理包过滤的时 间可以忽略不计。而且这种防护措施对用户透明,合法用户在进出网络时,根本感觉不到它的存在,使用起来很方便。这样系统就具有很好的传输性能,易扩展。 但是这种防火墙不太安全,因为系统对应用层信息无感知--也就是说,它们不理解通信的内容,不能在用户级别上进行过滤,即不能识别不同的用户和防止地址的 盗用。如果攻击者把自己主机的IP地址设成一个合法主机的IP地址,就可以很轻易地通过包过滤器,这样更容易被黑客攻破。基于这种工作机制,包过滤防火墙 有以下缺陷: 1、通信信息:包过滤防火墙只能访问部分数据包的头信息。 2、通信和应用状态信息:包过滤防火墙是无状态的,所以它不可能保存来自于通信和应用的状态信息。 3、信息处理:包过滤防火墙处理信息的能力是有限的。
(二)、代理服务型防火墙工作原理 代理服务型防火墙在应用层上实现防火墙功能。它能提供部分与传输有关的状态,能外圈提供与应用相关的状态和部分传输的信息,它还能处理和管理信息。
三、使用iptables实现包过滤防火墙
(一)、iptables概述及原理 从内核2.4之后使用全新的内核包过虑管理工具--iptables,这个工具使用户更易于理解其工作原理,更容易被使用,也具有更强大的功能。 iptables只是一个管理内核包过滤的工具,可以加入、插入或删除核心包过滤表格(链)中的规则。实际上真正执行这些过滤规则的是netfilter(linux核心中一个通用架构)及其相关模块(如iptables模块和nat模块)。 netfilter是linux核心中一个通用架构,它提供一系列的“表”(tables),每个表由若干“链”(chains)组成,而每条链中可以由一条或数条规则(rule)组成。可以这样理解,netfilter是表的容器,表是链的容器,链是规则的容器。 系统缺省的表为“filter”,该表中包含了INPUT、FORWARD和OUTPUT 3个链。每一条链中可以有一条或数条规则,每一条规则都是这样定义的:“如果数据包头符合这样的条件,就这样处理这个数据包”。当一个数据包到达一个链 时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件,如果满足,系统将根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条 规则;最后,如果数据包不符合该链中任何一条规则,系统就会根据该链预先定义的策略(policy)来处理该数据包。
(二)、iptables传输数据包的过程 当数据包进入系统时,系统首先根据路由表决定将数据包发给哪一条链,则可能有以下3种情况: 1、数据包的目的地址是本机,则系统将数据包送往INPUT链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没有通过规则检查,系统将丢弃该包。 2、数据包的上的地址不是本机,也就是说这个包将被转发,则系统将数据包送往FORWARD链,如果通过规则检查,该包被发给相应的本地进程处理;如果没有通过规则检查,系统将丢弃该包。 3、数据包是由本地系统进程产生的,则系统将其送往OUTPUT链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没有通过规则检查,系统将丢弃该包。 用户可以给各链定义规则,当数据包到达其中的每一条链,iptables就会根据链中定义的规则来处理这个包。iptables将数据包的头信息与它所传 递到的链中的每条规则进行比较,看它是否和每条规则完全匹配。如果数据包与某条规则匹配,iptables就对该数据包执行由该规则指定的操作。例如某条 链中的规则决定要丢弃(DROP)数据包,数据包就会在该链处丢弃;如果链中规则接受(ACCEPT)数据包,数据包就可以继续前进;但是,如果数据包与 这条规则不匹配,那么它将与链中的下一条规则进行比较。如果该数据包不符合该链中的任何一条规则,那么iptables将根据该链预先定义的默认策略来决 定如何处理该数据包,理想的默认策略应该告诉iptables丢弃(DROP)该数据包。
(三)、iptables的优点 netfilter/iptables的最大优点是它可以配置有状态的防火墙,这是ipfwadm和ipchains等以前的工具都无法提供的一种重要功 能。有状态的防火墙能够指定并记住为发送或接收信息包所建立的连接的状态。防火墙可以从信息包的连接跟踪状态获得该信息。在决定新的信息包过滤时,防火墙 所使用的这些状态信息可以增加其效率和速度。这里有4种有效状态,名称分别为ESTABLISHED、INVALID、NEW和RELATED。 状态ESTABLISHED指出该信息包属于已经建立的连接,该连接一直用于发送和接收信息包并且完全有效。INVALID状态指出该信息包与任何已知的 流或连接都不相关联,它可能包含错误的数据或头。状态NEW表示该信息包已经或将启动新的连接,或者它与尚未用于发送和接收信息包的连接相关联。最 后,RELATED表示该信息包正在启动新连接,以及它与已建立的连接想关联。 netflter/iptables的另一个重要优点是,它使用户可以完全控制防火墙配置和信息包过滤。可以定制自己的规则来满足特定需求,从而只允许想要的网络流量进入系统。
(四)、iptables的基础知识
1、规则(rule) 规则(rule)就是网络管理员预定的条件,规则一般定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表 中,这些规则分别指定了源地址、目的地址、传输协议(TCP、UDP、ICMP)和服务类型(如HTTP、FTP、SMTP)。当数据包与规则匹配 时,iptables就根据规则所定义的方法来处理这些数据包,如放行(ACCEPT)、拒绝(REJECT)、或丢弃(DROP)等。配置防火墙的主要 规则就是添加、修改和删除这些规则。 2、链(chains) 链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。当一个数据包到达一个链 时,iptables就会从链中的第一条规则开始检查,看该数据包是否满足规则所定义的条件,如果满足,系统就会根据该条规则所定义的方法处理该数据包, 否则iptables将继续检查下一条规则。如果该数据包不符合链中任何一何况规则,iptables就会根据该链预先定义的默认策略来处理该数据包。 3、表(tables) 表(tables)提供特定的功能,iptables内置3个表,即filter表、nat表和mangle表,分别用于实现包过滤,网络地址转换和包重构的功能。 (1)filter表。filter表主要用于过滤数据包,该表根据系统管理员预定义的一组规则过滤符合条件的数据包。对防火墙而言,主要利用filter表中指定一系列规则来实现对数据包进行过滤操作。 filter表是iptables默认的表,如果没有指定使用哪个表,iptables就默认使用filter表来执行所有的命令。filter表包含了 INPUT链(处理进入的数据包)、FORWARD链(处理转发的数据包)和OUTPUT链(处理本地生成的数据包)。在filter表中只允许对数据包 进行接受或丢弃的操作,而无法对数据包进行更改。 (2)nat表。nat青主要用于网络地址转换NAT,该表可以实现一对一、一对多和多对多的NAT工作,iptables就是使用该表实现共享上网功能 的。nat表包含了PREROUTING链(修改即将到来的数据包)、OUTPUT链(修改在路由之前本地生成的数据包)和POSTROUTING链(修 改即将出去的数据包)。 (3)mangle表。mangle表主要用于对指定的包进行修改,因为某些特殊应用可能去改写数据包的一些传输特性,例如理性数据包的TTL和TOS等,不过在实际应用中该表的使用率不高。
(五)、关闭系统防火墙
由于系统的防火墙功能也是使用iptables实现的,如果用户在系统的iptables之上设置规则,很容易发生冲突,所以在进行iptables学习之前,建议关闭系统的防火墙功能。
(六)、iptables命令格式
iptables的命令格式较为复杂,一般格式如下: #iptables [-t 表] -命令 匹配 操作 注:iptables对所有选项和参数都区分大小写! 1、表选项 表选项用于指定命令应用于哪个iptables内置表。iptables内置表包括filter表、nat表和mangle表。 2、命令选项 命令选项用于指定iptables的执行方式,包括插入规则、删除规则和添加规则等: -P 或--policy 定义默认策略 -L 或--list 查看iptables规则列表 -A 或--append 在规则列表的最后增加一条规则 -I 或--insert 在指定的位置插入一条规则 -D 或--delete 在规则列表中删除一条规则 -R 或--replace 替换规则列表中的某条规则 -F 或--flush 删除表中的所有规则 -Z 或--zero 将表中所有链的计数和流量计数器都清零 3、匹配选项 匹配选项指定数据包与规则匹配所应具有的特征,包括源地址、目的地址、传输协议(如TCP、UDP、ICMP)和端口号(如80、21、110)等: -i 或--in-interface 指定数据包是从哪个网络接口进入 -o 或--out-interface 指定数据包是从哪个网络接口输出 -p 或--porto 指定数据包匹配的协议,如TCP、UDP -s 或--source 指定数据包匹配的源地址 --sport 指定数据包匹配的源端口号,可以使用“起始端口号:结束端口号”的格式指定一个范围的端口 -d 或--destination 指定数据包匹配的目标地址 --dport 指定数据包匹配的目标端口号,可以使用“起始端口号:结束端口号”的格式指定一个范围的端口 4、动作选项 动作选项指定当数据包与规则匹配时,应该做什么操作,如接受或丢弃等。 ACCEPT 接受数据包 DROP 丢弃数据包 REDIRECT 将数据包重新转向本机或另一台主机的某个端口,通常用此功能实现透明代理或对外开放内网的某些服务 SNAT 源地址转换,即改变数据包的源地址 DNAT 目标地址转换,即改变数据包的目的地址 MASQUERADE IP伪装,即常说的NAT技术。MASQUERADE只能用于ADSL等拨号上网的IP伪装,也就是主机的IP地址是由ISP动态分配的;如果主机的IP地址是静态固定的,就要使用SNAT LOG 日志功能,将符合规则的数据包的相关信息记录在日志中,以便管理员进行分析和排错
(七)、iptables命令的使用
1、查看iptables规则 初始的iptables没有规则,但是如果在安装时选择自动安装防火墙,系统中会有默认的规则存在,可以先查看默认的防火墙规则: #iptables [-t 表名] [-t 表名]:定义查看哪个表的规则列表,表名可以使用filter、nat和mangle,如果没有定论表名,默认使用fliter表 :列出指定表和指定链的规则 :定义查看指定表中哪个链的规则,如果不指明哪个链,将查看某个表中所有链的规则 #iptables -L -n (查看filter表所有链的规则) 注:在最后添加-n参数,可以不进行IP与HOSTNAME的转换,显示的速度会快很多。 #iptables -t nat -L OUTPUT (查看nat表OUTPUT链的规则) 2、定义默认策略 当数据包不符合链中任何一条规则时,iptables将根据该链默认策略来处理数据包,默认策略的定义方法如下 #iptables [-t 表名] [-t 表名]:定义查看哪个表的规则,表名可以使用filter、nat和mangle,如果没有宝,默认使用filter表 :定义默认策略 :定义查看指定表中哪个链的规则,如果不指明,将查看某个表中所有链的规则 :处理数据包的动作,可以使用ACCEPT(接受)和DROP(丢弃) #iptables -P INPUT ACCEPT (将filter表INPUT链的默认策略定义为接受) #iptables -t nat -P OUTPUT DROP (将nat表OUTPUT链的默认策略定义为丢弃) 创建一个最简单的规则范例。对于没有经验和时间的用户而言,设置一个简单而又实用的规则是必要的,最基本的原则是“先拒绝所有数据包,然后再允许需要的数 据包”,也就是说通常为filter表的链定义。一般都将INPUT定义为DROP,这样就可以阻止任何数据包进入,其他项目定义为ACCEPT,这样对 外发送的数据就可以出去。 #iptables -P INPUT DROP #iptables -P FORWARD ACCEPT #iptables -P OUTPUT ACCEPT 3、增加、插入、删除和替换规则 #iptables [-t 表名] 链名 [规则编号] [-i | o 网卡] [-p 协议类型] [-s 源IP | 源子网] [--sport 源端口号] [-d 目标IP | 目标子网] [--dport 目标端口号] [-t 表名]:定义查看哪个表的规则,表名可以使用filter、nat和mangle,如果没有定义,默认使用filter表 -A:新增一条规则,该规则将增加到规则列表的最后一行,该参数不能使用规则编号 -I:插入一条规则,原来该位置上的规则就会身后顺序移动,如果没有指定规则编号,则在第一条规则前插入 -D:删除一条规则,可以输入完整规则,或直接指定规则编号 -R:替换某条规则,规则被替换并不会改变顺序,必须要指定替换的规则编号 :指定查看指定表中某条链的规则,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT、POSTROUTIN [规则编号]:规则编号是在插入、删除和替换规则时用,编号是按照规则列表的顺序排列,第一条规则编号为1 [-i | o 网卡名称]:i是指数据包从哪块网卡输入,o是批数据包从哪块网卡输出 [-p 协议类型]:可以指定规则应用的协议,包含TCP、UDP、ICMP等 [-s 源IP | 源子网]:数据包的源IP或子网 [--sport 源端口号]:数据包的源端口号 [-d 目标IP | 目标子网]:数据包的目标IP或子网 [--dport 目标端口号]:数据包的目标端口号 :处理数据包的动作 #iptables -A INPUT -i lo -j ACCEPT (追加一条规则,接受所有来自lo接口的数据包) #iptables -A INPUT -s 192.168.0.44 -j ACCEPT (追加一条规则,接受所有来自192.168.0.44的数据包) #iptables -A INPUT -s 192.168.0.44 -j DROP (追加一条规则,丢弃所有来自192.168.0.44的数据包) 注:iptables的按照顺序读取规则的,如果两条规则冲突,以排在前面的规则为准。 #iptables -I INPUT 3 -s 192.168.1.0/24 -j DROP (在INPUT链中的第3条规则前插入一条规则,丢弃所有来自192.168.1.0/24的数据包) 注:-I参数如果没有指定插入的位置,将插入到所有规则的最前面 #iptables -D INPUT 2 (删除filter表中INPUT链中的第2条规则) #iptables -R INPUT 2 -s 192.168.10.0/24 -p tcp --dport 80 -j DROP (替换filter表INPUT链中第2条规则为,禁止192.168.10.0/24访问TCP的80端口) 4、清除规则和计数器 在新建规则时,往往需要清除原有的或旧的规则,以免影响新规则。如果规则较多,逐条删除比较麻烦,可以使用清除规则参数快速删除所有规则。 #iptables [-t 表名] [-t 表名]:指定策略将应用于哪个表,可以使用filter、nat和mangle,如果没有指定,默认为filter表 -F:删除指定表中所有规则 -Z:将指定表中数据包计数器和流量计数器归零 #iptables -Z (将filter表中数据包计数器和流量计数器请零) #iptables -F (删除filter表中的所有规则) 5、记录与恢复防火墙规则 可以使用记录与恢复防火墙规则命令,将现有防火墙机制复制下来,在需要恢复时直接恢复即可。 #iptables-save > 文件名 (记录当前防火墙规则) #iptables-restore > 文件名 (将防火墙规则恢复到当前主机环境)
linux下IPTABLES配置详解
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 24000 -j ACCEPT -A RH-Firewall-1-INPUT -s 121.10.120.24 -p tcp -m tcp --dport 18612 -j ACCEPT
如果你的IPTABLES基础知识还不了解,建议先去看看.
开始配置
我们来配置一个filter表的防火墙.
(1)查看本机关于IPTABLES的设置情况
[root@tp ~]# iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination
Chain FORWARD (policy ACCEPT) target prot opt source destination
Chain OUTPUT (policy ACCEPT) target prot opt source destination
Chain RH-Firewall-1-INPUT (0 references) target prot opt source destination ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255 ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0 ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited 可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口.
如果你在安装linux时没有选择启动防火墙,是这样的
[root@tp ~]# iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination
Chain FORWARD (policy ACCEPT) target prot opt source destination
Chain OUTPUT (policy ACCEPT) target prot opt source destination
什么规则都没有.
(2)清除原有规则.
不管你在安装linux时是否启动了防火墙,如果你想配置属于自己的防火墙,那就清除现在filter的所有规则.
[root@tp ~]# iptables -F 清除预设表filter中的所有规则链的规则 [root@tp ~]# iptables -X 清除预设表filter中使用者自定链中的规则
我们在来看一下
[root@tp ~]# iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination
Chain FORWARD (policy ACCEPT) target prot opt source destination
Chain OUTPUT (policy ACCEPT) target prot opt source destination
什么都没有了吧,和我们在安装linux时没有启动防火墙是一样的.(提前说一句,这些配置就像用命令配置IP一样,重起就会失去作用),怎么保存.
[root@tp ~]# /etc/rc.d/init.d/iptables save
这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.
[root@tp ~]# service iptables restart
现在IPTABLES配置表里什么配置都没有了,那我们开始我们的配置吧
(3)设定预设规则
[root@tp ~]# iptables -P INPUT DROP
[root@tp ~]# iptables -P OUTPUT ACCEPT
[root@tp ~]# iptables -P FORWARD DROP 上面的意思是,当超出了IPTABLES里filter表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包
而对于OUTPUT链,也就是流出的包我们不用做太多限制,而是采取ACCEPT,也就是说,不在着个规则里的包怎么办呢,那就是通过.
可以看出INPUT,FORWARD两个链采用的是允许什么包通过,而OUTPUT链采用的是不允许什么包通过.
这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规则就会增加.但如果你只想要有限的几个规则是,如只做WEB服务器.还是推荐三个链都是DROP.
注:如果你是远程SSH登陆的话,当你输入第一个命令回车的时候就应该掉了.因为你没有设置任何规则.
怎么办,去本机操作呗!
(4)添加规则.
首先添加INPUT链,INPUT链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链
为了能采用远程SSH登陆,我们要开启22端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT (注:这个规则,如果你把OUTPUT 设置成DROP的就要写上这一部,好多人都是望了写这一部规则导致,始终无法SSH.在远程一下,是不是好了.
其他的端口也一样,如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链:
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT ,其他同理.)
如果做了WEB服务器,开启80端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT 如果做了邮件服务器,开启25,110端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT [root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT 如果做了FTP服务器,开启21端口
[root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
如果做了DNS服务器,开启53端口
[root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
如果你还做了其他的服务器,需要开启哪个端口,照写就行了.
上面主要写的都是INPUT链,凡是不在上面的规则里的,都DROP
允许icmp包通过,也就是允许ping,
[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话)
[root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT (INPUT设置成DROP的话)
允许loopback!(不然会导致DNS无法正常关闭等问题)
IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP) IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)
下面写OUTPUT链,OUTPUT链默认规则是ACCEPT,所以我们就写需要DROP(放弃)的链.
减少不安全的端口连接
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP
[root@tp ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP
有些些特洛伊木马会扫描端口31337到31340(即黑客语言中的 elite 端口)上的服务。既然合法服务都不使用这些非标准端口来通信,阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的机会
还有其他端口也一样,像:31335、27444、27665、20034 NetBus、9704、137-139(smb),2049(NFS)端口也应被禁止,我在这写的也不全,有兴趣的朋友应该去查一下相关资料.
当然出入更安全的考虑你也可以包OUTPUT链设置成DROP,那你添加的规则就多一些,就像上边添加
允许SSH登陆一样.照着写就行了.
下面写一下更加细致的规则,就是限制到某台机器
如:我们只允许192.168.0.3的机器进行SSH连接
[root@tp ~]# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
如果要允许,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP.
24表示子网掩码数.但要记得把 /etc/sysconfig/iptables 里的这一行删了.
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 因为它表示所有地址都可以登陆.
或采用命令方式:
[root@tp ~]# iptables -D INPUT -p tcp --dport 22 -j ACCEPT
然后保存,我再说一边,反是采用命令的方式,只在当时生效,如果想要重起后也起作用,那就要保存.写入到/etc/sysconfig/iptables文件里.
[root@tp ~]# /etc/rc.d/init.d/iptables save
这样写 !192.168.0.3 表示除了192.168.0.3的ip地址
其他的规则连接也一样这么设置.
在下面就是FORWARD链,FORWARD链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链,对正在转发链的监控.
开启转发功能,(在做NAT时,FORWARD默认规则是DROP时,必须做)
[root@tp ~]# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@tp ~]# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT
丢弃坏的TCP包
[root@tp ~]#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
处理IP碎片数量,防止攻击,允许每秒100个
[root@tp ~]#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包.
[root@tp ~]#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
我在前面只所以允许ICMP包通过,就是因为我在这里有限制.
二,配置一个NAT表放火墙
1,查看本机关于NAT的设置情况
[root@tp rc.d]# iptables -t nat -L Chain PREROUTING (policy ACCEPT) target prot opt source destination
Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT all -- 192.168.0.0/24 anywhere to:211.101.46.235
Chain OUTPUT (policy ACCEPT) target prot opt source destination
我的NAT已经配置好了的(只是提供最简单的代理上网功能,还没有添加防火墙规则).关于怎么配置NAT,参考我的另一篇文章
当然你如果还没有配置NAT的话,你也不用清除规则,因为NAT在默认情况下是什么都没有的
如果你想清除,命令是
[root@tp ~]# iptables -F -t nat
[root@tp ~]# iptables -X -t nat
[root@tp ~]# iptables -Z -t nat
2,添加规则
添加基本的NAT地址转换,(关于如何配置NAT可以看我的另一篇文章),
添加规则,我们只添加DROP链.因为默认链全是ACCEPT.
防止外网用内网IP欺骗
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP [root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP [root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP 如果我们想,比如阻止MSN,QQ,BT等的话,需要找到它们所用的端口或者IP,(个人认为没有太大必要)
例:
禁止与211.101.46.253的所有连接
[root@tp ~]# iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP
禁用FTP(21)端口
[root@tp ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP
这样写范围太大了,我们可以更精确的定义.
[root@tp ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -d 211.101.46.253 -j DROP
这样只禁用211.101.46.253地址的FTP连接,其他连接还可以.如web(80端口)连接.
按照我写的,你只要找到QQ,MSN等其他软件的IP地址,和端口,以及基于什么协议,只要照着写就行了.
最后:
drop非法连接 [root@tp ~]# iptables -A INPUT -m state --state INVALID -j DROP [root@tp ~]# iptables -A OUTPUT -m state --state INVALID -j DROP [root@tp ~]# iptables-A FORWARD -m state --state INVALID -j DROP 允许所有已经建立的和相关的连接 [root@tp ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT [root@tp ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@tp ~]# /etc/rc.d/init.d/iptables save
这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.
[root@tp ~]# service iptables restart
别忘了保存,不行就写一部保存一次.你可以一边保存,一边做实验,看看是否达到你的要求,
上面的所有规则我都试过,没有问题.
写这篇文章,用了我将近1个月的时间.查找资料,自己做实验,希望对大家有所帮助.如有不全及不完善的地方还请提出.
因为本篇文章以配置为主.关于IPTABLES的基础知识及指令命令说明等我会尽快传上,当然你可以去网上搜索一下,还是很多的.
Linux防火墙iptables学习笔记
一、概要 1、防火墙分类 ①包过滤防火墙(pack filtering)在网络层对数据包进行选择过滤,采用访问控制列表(Access control table-ACL)检查数据流的源地址,目的地址,源和目的端口,IP等信息。 ②代理服务器型防火墙 2、iptables基础 ①规则(rules):网络管理员预定义的条件 ②链(chains): 是数据包传播的路径 ③表(tables):内置3个表filter表,nat表,mangle表分别用于实现包过滤网络地址转换和包重构的功能 ④filter表是系统默认的,INPUT表(进入的包),FORWORD(转发的包),OUTPUT(处理本地生成的包),filter表只能对包进行授受和丢弃的操作。 ⑤nat表(网络地址转换),PREROUTING(修改即将到来的数据包),OUTPUT(修改在路由之前本地生成的数据包),POSTROUTING(修改即将出去的数据包) ⑥mangle表,PREROUTING,OUTPUT,FORWORD,POSTROUTING,INPUT 3、其它 iptables是按照顺序读取规则 防火墙规则的配置建议 Ⅰ 规则力求简单 Ⅱ 规则的顺序很重要 Ⅲ 尽量优化规则 Ⅳ 做好笔记 二、配置 1、iptables命令格式 iptables [-t 表] -命令 匹配 操作 (大小写敏感) 动作选项 ACCEPT 接收数据包 DROP 丢弃数据包 REDIRECT 将数据包重新转向到本机或另一台主机的某一个端口,通常功能实现透明代理或对外开放内网的某些服务 SNAT 源地址转换 DNAT 目的地址转换 MASQUERADE IP伪装 LOG 日志功能 2、定义规则 ①先拒绝所有的数据包,然后再允许需要的数据包 iptalbes -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT ②查看nat表所有链的规则列表 iptables -t nat -L ③增加,插入,删除和替换规则 iptables [-t 表名] <-A|I|D|R> 链名 [规则编号] [-i|o 网卡名称] [-p 协议类型] [-s 源ip|源子网] [--sport 源端口号] [-d 目的IP|目标子网] [--dport 目标端口号] [-j 动作] 参数:-A 增加 -I 插入 -D 删除 -R 替换 三、例子 ①iptables -t filter -A INPUT -s 192.168.1.5 -i eth0 -j DROP 禁止IP为192.168.1.5的主机从eth0访问本机②iptables -t filter -I INPUT 2 -s 192.168.5.0/24 -p tcp --dport 80 -j DROP 禁止子网192.168.5.0访问web服务③iptables -t filter -I INPUT 2 -s 192.168.7.9 -p tcp --dport ftp -j DROP 禁止IP为192.168.7.9访问FTP服务 ④iptables -t filter -L INPUT 查看filter表中INPUT链的规则 ⑤iptables -t nat -F 删除nat表中的所有规则 ⑥iptables -I FORWARD -d wwww.playboy.com -j DROP 禁止访问www.playboy.com网站 ⑦iptables -I FORWARD -s 192.168.5.23 -j DROP 禁止192.168.5.23上网
参考博客:
https://www.cnblogs.com/alimac/p/5848372.html
https://www.cnblogs.com/longhao/p/3993011.html