Linux iptables 防火墙
内容摘要
1、防火墙(Firewall)
1.1防火墙定义

所谓防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障.是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与Intranet之间建立起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵入,防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成,防火墙就是一个位于计算机和它所连接的网络之间的软件或硬件。该计算机流入流出的所有网络通信和数据包均要经过此防火墙。
在网络中,所谓“防火墙”,是指一种将内部网和公众访问网(如Internet)分开的方法,它实际上是一种隔离技术。防火墙是在两个网络通讯时执行的一种访问控制尺度,它能允许你“同意”的人和数据进入你的网络,同时将你“不同意”的人和数据拒之门外,最大限度地阻止网络中的黑客来访问你的网络。换句话说,如果不通过防火墙,公司内部的人就无法访问Internet,Internet上的人也无法和公司内部的人进行通信。
1.2防火墙分类
1)网络防火墙
网络层防火墙可视为一种 IP 封包过滤器,运作在底层的TCP/IP协议堆栈上。我们可以以枚举的方式,只允许符合特定规则的封包通过,其余的一概禁止穿越防火墙(病毒除外,防火墙不能防止病毒侵入)。这些规则通常可以经由管理员定义或修改,不过某些防火墙设备可能只能套用内置的规则。
我们也能以另一种较宽松的角度来制定防火墙规则,只要封包不符合任何一项“否定规则”就予以放行。操作系统及网络设备大多已内置防火墙功能
2)应用防火墙
应用层防火墙是在 TCP/IP 堆栈的“应用层”上运作,您使用浏览器时所产生的数据流或是使用 FTP 时的数据流都是属于这一层。应用层防火墙可以拦截进出某应用程序的所有封包,并且封锁其他的封包(通常是直接将封包丢弃)。理论上,这一类的防火墙可以完全阻绝外部的数据流进到受保护的机器里。
防火墙借由监测所有的封包并找出不符规则的内容,可以防范电脑蠕虫或是木马程序的快速蔓延。不过就实现而言,这个方法既烦且杂(软件有千千百百种啊),所以大部分的防火墙都不会考虑以这种方法设计。
XML 防火墙是一种新型态的应用层防火墙。
根据侧重不同,可分为:包过滤型防火墙、应用层网关型防火墙、服务器型防火墙。
3)数据库防火墙
数据库防火墙是一款基于数据库协议分析与控制技术的数据库安全防护系统。基于主动防御机制,实现数据库的访问行为控制、危险操作阻断、可疑行为审计。
数据库防火墙通过SQL协议分析,根据预定义的禁止和许可策略让合法的SQL操作通过,阻断非法违规操作,形成数据库的外围防御圈,实现SQL危险操作的主动预防、实时审计。
数据库防火墙面对来自于外部的入侵行为,提供SQL注入禁止和数据库虚拟补丁包功能。
2、netfilter/iptables
在Linux系统中,提供了一个叫做netfilter的框架,用于对数据管理。
Netfilter官方网站:http://www.netfilter.org。
1)Netfilter的设计架构
在NetFilter的处理中,提供了一系列的钩子函数。

图中1、2、3、4、5就是钩子函数的位置。分为3条路径:
1、2:代表了到本机的封包。
5、4:代表了由本机发出的封包。
1、3、4:代表了需要转发的封包。
2)iptables
Iptables就是在netfilter框架基础上,实现相关钩子函数,从而提供了防火墙(packet filter)、网络地址转换(NAT)、封包修改(package mangle)等功能:

图中涉及的功能有:Filter、Connection Track、NAT、Mangle,其实还有两个:raw、Security。
Connection Track其实是NAT的一部分。
从上图,也能看出有3条数据流向,分别对应了:目的为本机的报文、由本机发出的报文、转发的报文。
Iptables实现了netfilter的钩子函数从而提供这些功能。在钩子的实现过程中,利用了一系列的规则链(rule chain),封包就是要在相应的规则链上进行检查,检查通过后才会到达最终目的地。
功能与规则链对照表
|
功能(表) |
链 |
|
Filter |
INPUT、FORWARD、OUTPUT |
|
Nat |
PREROUTING、OUTPUT、POSTROUTING |
|
Mangle |
PREROUTING、INPUT、OUTPUT、POSTROUTING |
|
raw |
PREROUTING、OUTPUT |
|
Security |
INPUT、FORWARD、OUTPUT |
从该表也可以看出,规则链也正好与所处的钩子函数的位置是一一对应的。
如果系统中使用了多个功能,也就是配置了多个规则链是如何结合工作的呢?

上图就是封包在这些规则链的处理流程。
3、iptables命令详解
在终端使用man iptables就可以看到这个命令的说明。也可以在线查看:http://ipset.netfilter.org/iptables.man.html 。
3.1命令的语法
|
iptables [-t table] {-A|-C|-D} chain rule-specification iptables [-t table] -I chain [rulenum] rule-specification iptables [-t table] -R chain rulenum rule-specification iptables [-t table] -D chain rulenum iptables [-t table] -S [chain [rulenum]] iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...] iptables [-t table] -N chain iptables [-t table] -X [chain] iptables [-t table] -P chain target iptables [-t table] -E old-chain-name new-chain-name rule-specification = [matches...] [target] match = -m matchname [per-match-options] target = -j targetname [per-target-options] |
其中最常用的规则是:
|
iptables –t command match_parameters –j target |
下面使用一个例子来说明参数:
例子:允许以SSH方式连接到本机:
|
Iptables –t filter -A INPUT –p tcp –m tcp -–dport 22 –j ACCEPT |
1)table 参数
-t :表名。Iptables提供了多种功能。table参数其实就是功能的名称。
上面例子中,使用了防火墙功能(filter),所以参数-t的值就是filter。table的可选值参见:功能与规则链对照表。
该参数默认值就是filter,所以配置防火墙时,可以不设置表名。
2)command 参数
command参数是对规则链进行操作,例如添加一条规则。Iptables提供了下面这些command。
-A,--append chain rule-specification追加一个规则。
-C,--check chain rule-specification检查你输入的规则在规则链中是否已存在。
-D,--delete(chain rule-specification | chain rulenum)删除指定规则链中的指定的规则。
-I, --insert chain [rulenum] rule-specification在指定规则链中插入规则。
-L,--list [chain]列出所有指定规则链中所有的规则。
-R,--replace chain rulenum rule-specification替换规则。
-S,--list-rules [chain]打出指定链中的所有规则。
-N,--new-chain chain自定义一条规则链。
-X,--delete-chain [chain]删除指定的用户自定义的规则链。
-P,--policy chain target 设置指定链的target参数的默认值。
-E,--rename-chain old-chain new-chain 对规则链重命名。
-F,清除规则。
-h 查看帮助。
4) match paramtes
[!] –p,--protocol protocol协议
用于判断一个packet是否采用了指定的协议。
参数值可以是:tcp、udp、udplit、icmp、esp、sh、sctp,或者是all(所有协议),或者是数字。数字0等价于all。
如果参数值前面有!,则是做相反的判断。即判断packet没有采用指定的协议。
[!] –s,--source address[/mask][,….]
用于匹配封包的来源,即判断一个封包的是否来自于指定的地址。
该参数值可以是网络名,主机名,IP地址(可以带有子网掩码)。如果参数值前面有!,则是做相反的判断。
[!] –d, --destination address[/mask][,…]
用于匹配封包的目的地址,即判断一个封包的是否要到达指定的地址。
参数值与-s类似。
-m,--match expression扩展匹配
-j,--jump target 这个参数的作用是在封包匹配上述规则的情况下,接下来要执行的规则。而接下来要执行的规则,则是由target参数指定的。
[!] –i,--in-interface name 指定接收时采用的网络接口
当一个packet进入了INPUT、FORWARD、PREROUTING链时,判断这个packet是否是指定的这个网络接口(interface)接收的。
如果参数值前面有!,则是做相反的判断。
如果参数值以+结尾,则是指所有的开始于指定的接口的那些网络接口都会被匹配到。
[!]-o ,--out-interface name 指定发送时采用的网络接口。
这与--in-interface是一样的。
-g,--goto chain
packet继续被指定的chain处理。
4)target 规则名称
防火墙规则中不单单会对packet进行匹配限定,也会对target进行限定。如果packet 与指定的规则不匹配,就会执行下一条规则。如果匹配,执行target所代表的下一条规则。
也就是说target是接下来要执行的规则的名称。此外,也提供了几个特定的值。
ACCEPT:接收该包,让该包通过。
DROP:在底层丢掉这个包。就是将该包废弃了。
QUEUE:传递该包到用户空间。
RETURN:停止在改chain上传输,继续执行前一条chain上的下一个规则。
5) match extension 匹配的扩展
在匹配参数中,只能针对协议、源地址、目标地址、网络接口等进行匹配。对于需要更细致的匹配(例如对目标端口的匹配),则无能为力。匹配参数中,有一个-m,这个可以提供更细致的匹配。
例如,要使接受SSH发的packet,则需要使用tcp的扩展,可以指定Packet的目标地址:
使用-m tcp –dport 就可以了。
|
Iptables –t filter -A INPUT –p tcp –m tcp –dport 22 –j ACCEPT |
如果想要一次指定多个端口,可以使用multiport的扩展:
|
Iptables –t filter -A INPUT –p tcp –m tcp -–dport 22,21,8080,1900 –j ACCEPT |
具体有哪些扩展匹配,可以参考:
http://ipset.netfilter.org/iptables-extensions.man.html
3.2、示例
网上有很多示例,可以参考:
http://www.cnblogs.com/argb/p/3535179.html
4、防火墙管理
service iptables {start|restart|stop|condrestart|status|panic|save}
start:启动
stop:停止
restart:重启
status:查看状态
save:保存到配置文件中
在配置防火墙时,通常会:
、servic iptables start 、使用iptables命令来配置规则 、service iptables save,将配置保存到配置文件中
如果是远程进行防火墙配置时, 记得要将22(SSH)端口配置进去,不然自个不能登录操作了。
Linux iptables 防火墙的更多相关文章
- linux iptables 防火墙简介
iptables防火墙简介 Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的安全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非 ...
- 15.linux iptables防火墙规则vsftp服务
一.服务所开启的端口号. dhcp 67 samba 139 445 http 80 https 443 mysql 3306 ...
- Linux iptables防火墙
查找安装包yum list | grep iptables 安装iptables yum install iptables-services 重启防火墙使配置文件生效 systemctl restar ...
- CentOS Linux iptables 防火墙
快速安装,配置,启动,检查 - 关闭 5002 - 5011 端口开放所有其它 yum install iptables iptables -F iptables -X iptables -Z ipt ...
- Linux iptables 防火墙详解
0x00 iptables介绍 linux的包过滤功能,即linux防火墙,它由netfilter 和 iptables 两个组件组成. netfilter 组件也称为内核空间,是内核的一部分,由一些 ...
- Linux iptables 防火墙设置
1.查看防火墙iptables -L -niptablesb -L -n --line-number 显示规则行号看到 INPUT ACCEPT, FORWARD ACCEPT , OUTPUT A ...
- LINUX IPTABLES 防火墙配置
0.iptables(ACL)的匹配原则: 与cisco等一致,从上到下依次匹配. 1.iptables的基本用法:. (1)命令格式 iptables [–ttable] command [mat ...
- Linux iptables 防火墙常用规则
iptables 安装 yum install iptables iptables 规则清除 iptables -F iptables -X iptables -Z 开放指定的端口允许本地回环接口(即 ...
- linux 的iptables防火墙
.a文件就是*.o文件的集合, 是object文件的归档文件, 所以, 用nm -A ???.a看到的 symbolic符合名称都是 相应的, 包含的 .o文件.... linux 2.4内核中 ...
随机推荐
- iOS 如何设置导航的滑动返回手势, 和系统饿一样
iOS 7 滑动返回那些事儿 2014/05/17 Wei .entry-meta .entry-header 在智能机越来越普及,屏幕越做越大的当下,滑动返回手势已经成为了一个应用的标配功能,甚至可 ...
- JavaScrict中的断言调试
今天在看忍者秘籍的时候,看到一个断言方法.查阅了一下资料,原来javascript中的console也包含这个方法.具体用法如下: <script type="text/javascr ...
- struts2学习笔记--使用servletAPI实现ajax的一个小Demo
这个例子是点击网页上的一个button,然后调用action,使用response项前台打印"哎呦 不错哦",当然是以异步形式实现. jsp页面: <head> < ...
- struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo
理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...
- [Java IO]06_JSON操作
6.1 JSON 知识背景 6.1.1 JSON 简介 JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本信息的语法.类似 ...
- linux源码分析(三)-start_kernel
前置:这里使用的linux版本是4.8,x86体系. start_kernel是过了引导阶段,进入到了内核启动阶段的入口.函数在init/main.c中. set_task_stack_end_mag ...
- 基于Metronic的Bootstrap开发框架经验总结(10)--优化Bootstrap图标管理
在基于Bootstrap开发的项目中,鲜艳颜色的按钮,以及丰富的图表是很吸引人的特点,为了将这个特点发挥到极致,可以利用Bootstrap图标抽取到数据库里面,并在界面中进行管理和使用,这样我们可以把 ...
- httpModules与Http模块
httpModules是往当前应用程序添加HttpModule(http模块)的标签.配置节如下 <httpModules> <add name="ModuleName&q ...
- 设置Textview最大长度,超出显示省略号
<TextView android:id="@+id/tvUserNameUgcListItem" android:layout_height="@dimen/dp ...
- Direct3D设备管理器(Direct3D device manager)
这几天在做dxva2硬件加速,找不到什么资料,翻译了一下微软的两篇相关文档.并准备记录一下用ffmpeg实现dxva2,将在第三篇写到.这是第一篇,英文原址:https://msdn.microsof ...