文档章节

Linux安全之iptables详解

Andy-xu
 Andy-xu
发布于 2014/07/31 14:44
字数 2531
阅读 301
收藏 6

   基本上,依据防火墙管理的范围,我们可以将防火墙区分为网域型与单一主机型的控管。在单一主机型的控管方面, 主要的防火墙有封包过滤型的 Netfilter 与依据服务软件程序作为分析的 TCP Wrappers(只于服务名称有关) 两种。若以区域型的防火墙而言, 由于此类防火墙都是当作路由器角色,因此防火墙类型主要则有封包过滤的 Netfilter 与利用代理服务器 (proxy server) 进行存取代理的方式了。 

        防火墙在 做信息包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的信 息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 信息包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。

        虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。

        1.netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。

        2.iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它

netfilter/iptables 的最大优点是它可以配置有状态的防火墙,有状态的防火墙能够指定并记住为发送或接收信息包所建立的连接的状态

在决定新的信息包过滤时,防火墙所使用的这些状态信息可以增加其效率和速度,这里有四种有效状态:ESTABLISHED 、 INVALID 、 NEW 和 RELATED。

状态 ESTABLISHED 指出该信息包属于已建立的连接,该连接一直用于发送和接收信息包并且完全有效。INVALID 状态指出该信息包与任何已知的流或连接都不相关联,它可能包含错误的数据或头。状态 NEW 意味着该信息包已经或将启动新的连接,或者它与尚未用于发送和接收信息包的连接相关联。最后, RELATED 表示该信息包正在启动新连接,以及它与已建立的连接相关联。


如图所示:防火墙的规则指定所检查包的特征,和目标。如果包不匹配,将送往该链中下一条规则检查;如果匹配,那么下一条规则由目标值确定.该目标值可以是用户定义的链名,或是某个专用值,如ACCEPT[通过],DROP[删除],QUEUE[排队],或者 RETURN[返回]。

但是需要注意的是:防火墙的规则是允许通过则访问目标(所以需要主机策略的定制顺序)实例3


IPtables详细介绍以及配置案列:

目前IPtables有三张表和五条链:即filter、nat 、mangle表INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING.

filter:一般的过滤功能 默认是此表

nat:用于nat功能(端口映射,地址映射等包的转发)

mangle:用于对特定数据包的修改

PREROUTING:数据包进入路由表之前  (DNAT)当数据包进入路由前进行目的的改变

INPUT:通过路由表后目的地为本机

FORWARDING:通过路由表后,目的地不为本机

OUTPUT:由本机产生,向外转发

POSTROUTIONG:发送到网卡接口之前 (SNAT)




IPtables设置详细命令:

iptables命令的管理控制选项(常用):
-A 在指定链的末尾添加(append)一条新的规则
-D删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-I在指定链中插入(insert)一条新的规则,默认在第一行添加
-L列出(list)指定链中所有的规则进行查看
-F清空(flush)
-n使用数字形式(numeric)显示输出结果
注意:更多使用详情可以查看:iptables -h


防火墙处理数据包的四种方式:
ACCEPT 允许数据包通过
DROP 直接丢弃数据包,不给任何回应信息
REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。
LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则


iptables防火墙规则的保存与恢复
#iptables-save    此命令把规则保存到文件中,再由目录rc.d下的脚本(/etc/rc.d/init.d/iptables)自动装载
同时也可以使用#service iptables save(直接保存到配置文件开机自动启动)
使用命令iptables-save来保存规则。一般用iptables-save > /etc/sysconfig/iptables


注意:一般在重新定义iptables策略时都会将当前的策略清空

#iptables -F

完成策略配置之后我们必须进行保存,加载配置文件中,以便于开机自动加载配置

#/etc/init.d/iptables save


下面我们就用实例来演示一下:

1.拒绝进入防火墙的所有ICMP协议数据包(如果不使用-t指定表,默认指的是filter表)
#iptables -A INPUT -p icmp -j REJECT

2.允许防火墙转发除ICMP协议以外的所有数据包
#iptables -A FORWARD -p ! icmp -j ACCEPT
说明:使用“!”可以将条件取反。

3.拒绝转发来自192.168.0.10主机的数据,允许转发来自192.168.0.0/24网段的数据
#iptables -A FORWARD -s 192.168.0.11 -j REJECT
#iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
说明:在实际添加规则的时候,这个顺序必须先REJECT,因为如果先ACCEPT就默认不会检测下面的

4.丢弃从外网接口(eth1)进入防火墙本机的源地址为私网地址的数据包
#iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP
#iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
#iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

5.封堵网段(192.168.0.0/24),两小时后解封。
# iptables -A INPUT -s 192.168.0.0/24 -j DROP              从192.168.0.0网段进来的数据全部拒绝
# iptables -A FORWARD -s 192.168.0.0/24 -j DROP     从192.168.0.0远端来的禁止转发
# at now +2 hours
at> iptables -D INPUT 1
at> iptables -D FORWARD 1
说明:在实际机房里维护服务器时千万谨慎,不然你在远程链接进行维护,执行第一条命令后就会立马断开,此时,坑爹的你就要进去机房维护服务器咯^*^

6.限制使用SSH远程登录防火墙主机。
#iptables -A INPUT -p tcp --dport 22 -s 192.168.0.2  -j ACCEPT            192.168.0.2主机允许访问22
#iptables -A INPUT -p tcp --dport 22 -j DROP                                        其他访问ssh(22)断开
说明:这个规则主要用来设置某个主机的保护方案,这样远程ssh就不能访问。

7.允许本机开放从TCP端口20-1024提供的应用服务。
#iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT
#iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT

8.允许转发来自192.168.0.0/24局域网段的DNS解析请求数据包。               (注意DNS同时开启UDP和TCP)
#iptables -A FORWARD -s 192.168.0.0/24 -p udp --dport 53 -j ACCEPT
#iptables -A FORWARD -d 192.168.0.0/24 -p udp --sport 53 -j ACCEPT

9.禁止转发来自MAC地址为00:0C:29:27:55:3F的和主机的数据包
#iptables -A FORWARD -m mac --mac-source 00:0c:29:27:55:3F -j DROP
说明:iptables中使用“-m 模块关键字”的形式调用显示匹配。咱们这里用“-m mac –mac-source”来表示数据包的源MAC地址。

10.允许防火墙本机对外开放TCP端口20、21、25、110以及被动模式FTP端口1250-1280
#iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT
说明:这里用"-m multiport –dport"来指定目的多个端口

11.禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包。
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
说明:此处用"-m –iprange –src-range"指定IP范围。一般作为NAT服务器需要

12.拒绝访问防火墙的新数据包,但允许响应连接或与已有连接相关的数据包
#iptables -A INPUT -p tcp -m state --state NEW -j DROP
#iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
说明:“ESTABLISHED”表示已经响应请求或者已经建立连接的数据包,“RELATED”表示与已建立的连接有相关性的,比如FTP数据连接等。

13.只开放本机的web服务(80)、FTP(20、21、20450-20480),放行外部主机发住服务器其它端口的应答数据包,将其他入站数据包均予以丢弃处理。
#iptables -I INPUT -p tcp -m multiport --dport 20,21,80 -j ACCEPT
#iptables -I INPUT -p tcp --dport 20450:20480 -j ACCEPT
#iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
#iptables -P INPUT DROP


来自192.168.0.0网段的客户,通过eth0进来链接ssh的用户拒绝
# iptables -A INPUT -i eth0 -p tcp -s 192.168.0.0/24 --sport 1024:65535 --dport ssh -j DROP

说明:--sport指定的端口意义,就是TCP/IP的链接机制(客户端给一个1024+端口,服务返回一个1024-端口)

                                                                                                      

注意:本篇iptables 的简单配置大多是根据自己对应用的理解增加的注释,因此解释的不到位的地方希望大家能够及时指出,同时对与很多参数并没有详细的指出作用,有需要的访客可以自行查看。

希望转载的朋友能够加上原文地址:http://my.oschina.net/xxbAndy/blog/296787




© 著作权归作者所有

共有 人打赏支持
Andy-xu
粉丝 108
博文 95
码字总数 179246
作品 0
大兴
运维
私信 提问
加载中

评论(1)

Galen_Z
Galen_Z
非常详细的东西,非常好,顶起了!
Linux操作系统下IPTables配置方法详解(转载)

配置一个filter表的防火墙 1、查看本机关于IPTABLES的设置情况 [root@tp ~]# iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEP......

Start-up
2012/06/13
0
0
linux下IPTABLES配置详解

如果你的IPTABLES基础知识还不了解,建议先去看看. 开始配置 我们来配置一个filter表的防火墙. (1)查看本机关于IPTABLES的设置情况 [root@tp ~]# iptables -L -n Chain INPUT (policy ACCEPT...

龙上
2012/04/14
0
2
《Linux云计算从入门到精通》系列实战笔记全放送

为了方便Linux云计算爱好者的学习查看,马哥Linx云计算团队特别整理了《Linux云计算从入门到精通》年度重磅大放送,囊括了整个学习过程的学习精华,内容全部由马哥Linux云计算学员撰写,欢迎...

898009427
2017/11/21
0
0
iptables基础知识详解

iptables防火墙可以用于创建过滤(filter)与NAT规则。所有Linux发行版都能使用iptables,因此理解如何配置 iptables将会帮助你更有效地管理Linux防火墙。如果你是第一次接触iptables,你会觉得...

好铁
2014/09/16
0
0
firewalld和iptables 详解

在RHEL7里有几种防火墙共存:firewalld、iptables、ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等。 firewalld跟iptables比起来至少有两大好处:...

ugali
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

码云项目100,水一发

简单回顾一下: 早期构想最多的,是希望能将PHP一些类和编码分区做得更细,所以很多尝试。但不得不说,PHP的功能过于单一,是的,也许写C/C++扩展,可以解决问题,那我为什么不用C#或者Golan...

曾建凯
今天
3
0
Spring应用学习——AOP

1. AOP 1. AOP:即面向切面编程,采用横向抽取机制,取代了传统的继承体系的重复代码问题,如下图所示,性能监控、日志记录等代码围绕业务逻辑代码,而这部分代码是一个高度重复的代码,也就...

江左煤郎
今天
4
0
eclipse的版本

Eclipse各版本代号一览表 Eclipse的设计思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。 Eclipse基本内核包括:图形API(SWT/Jface),Java开发环...

mdoo
今天
3
0
SpringBoot源码:启动过程分析(一)

本文主要分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 还是老套路,先把分析过程的时序图摆出来:时序图-SpringBoot2.10启动分析 二.源码分析 首...

Jacktanger
今天
6
0
小白带你认识netty(二)之netty服务端启动(上)

上一章 中的标准netty启动代码中,ServerBootstrap到底是如何启动的呢?这一章我们来瞅下。 server.group(bossGroup, workGroup);server.channel(NioServerSocketChannel.class).optio...

天空小小
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部