Linux安全之iptables详解
博客专区 > Andy-xu 的博客 > 博客详情
Linux安全之iptables详解
Andy-xu 发表于3年前
Linux安全之iptables详解
  • 发表于 3年前
  • 阅读 292
  • 收藏 6
  • 点赞 0
  • 评论 1

腾讯云 学生专属云服务套餐 10元起购>>>   

摘要: iptables 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。而在RHEL、CentOS系列的内核里面一直内置了iptables服务,根据不同版本的内核,名称有所改变,直到2.4之后才真正命名为iptables。通过此项服务,可以有效的地控制 IP 信息包过滤和防火墙配置。本章将为大家简单介绍以下iptables的原理以及相应的规则设置。

   基本上,依据防火墙管理的范围,我们可以将防火墙区分为网域型与单一主机型的控管。在单一主机型的控管方面, 主要的防火墙有封包过滤型的 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




共有 人打赏支持
粉丝 106
博文 90
码字总数 171396
评论 (1)
Galen_Z
非常详细的东西,非常好,顶起了!
×
Andy-xu
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: