码迷,mamicode.com
首页 > 系统相关 > 详细

linux安全之iptables防火墙详解1

时间:2016-08-04 19:55:20      阅读:394      评论:0      收藏:0      [点我收藏+]

标签:linux安全 iptables openstack 网络安全

   在介绍iptables防火墙之前我们先来了解下IP TCP报文的格式,因为iptables防火墙的规则基本都是根据这些报文中的字段信息来做匹配,所以报文的格式就非常重要了


ip头部信息

技术分享


抓包信息如下

技术分享

TCP头部信息如下

技术分享

抓包信息如下

技术分享

大家可以对照着图片和抓包对比每个字段的意思,这里理解起来会更方便,好了下面正式开始介绍我们的iptables,先附上图片简单说明下

技术分享


Iptables/netfiter

Iptables:命令行的编写规则工具

Netfiter:在内核中


链(内置): 相当于5道阀门,对应着上图中的5个方框,这5个链相当重要,大家需要理解清楚

1、PREROUTING   路由之前

2、INPUT        

3、FORWARD       转发链

4、OUTPUT

5、POSTROUING   路由之后


功能:

Filter:过滤表

Nat:  网络地址转换表

Mangle:拆解报文,做出修改(例如修改ttl值,增加一个标记等),并重新封装

Raw:关闭nat表上启用的连接追踪功能


优先级:raw-->mangle-->nat-->filter


在上面的表中,平常用的最多的就是INPUT表,其实就是nat表,但是在云计算平台openstack中,如果网络组件neutron用了虚拟化网络技术openvswitch,这四张表都会用到,而且非常复杂,后面我们会简单截图看看


数据流向:及其重要

流入本机:PREROUTING-->INPUT

本机流出:OUTPUT-->POSTROUTING

转发:PREROUTING-->FORWARD-->POSTROUTING



路由功能发生的时刻:

报文刚刚进入本机的那一刻,判断目标主机是?如果是自己就送往INPUT,如果不是自己则送往FORWARD


报文离开本机之前,判断经由哪个接口送往下一站


规则的编写

1、匹配条件

基本匹配条件

扩展匹配条件


2、处理动作

基本处理动作

扩展处理动作

自定义处理机制


Iptables的链:内置链和自定义链  

自定义链:用户自定义,用于内置链的扩展和补充,可实现更灵活的规则管理机制

自定义链在云计算平台openstack中大量的用到,因此这里也要引起高度的重视,后面我们会通过一个简单的例子来说明

需要和内置链关联起来,由内置链转发到自定义的链


基本匹配(-s  -d  -p –I -o)

-I 数据报文流入接口,只能应用于PREROUTING INPUT FORWARD链

-o 数据报文流出接口,只能应用于FORWARD OUTPUT POSTROUING链

-p (tcp, udp, udplite, icmp, esp, ah, sctp or all) 并非指的是应用层的协议


Iptables –t filter –A INPUT –s 172.16.80.1 –d 172.16.80.5 –p icmp –j DROP


iptables -L -n -v --line-numbers  查看规则


扩展匹配:需要加载扩展模块,方可生效 –m选项

隐士扩展:不需要手动加载扩展模块

Tcp  --source-port,--sport port[:port] --destination-port,--dport port[:port]

     --tcp-flags mask comp  --syn   --tcp-option number


Iptables –A INPUT –d 172.16.80.5 –p icmp –icmp-type 8 –j DROP 限制别人ping自己



iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN

代表要检查的标志位是SYN,ACK,FIN,RST,其中SYN必须置为1,余下的为0


显示扩展:必须要手动加载扩展模块

Multiport扩展

iptables -A INPUT -s 1.1.1.1/24 -d 172.16.80.116 -p tcp -m multiport --dports 22,80 -j ACCEPT

iprange扩展

iptables -A INPUT -d 172.16.80.116 -p tcp --dport 80 -m iprange --src-range 172.16.80.90-172.16.80.95 -j ACCEPT

string扩展

对报文中的应用层数据做字符串模式匹配检测

--algo  字符串匹配算法

--string pattern  要检测的字符串模式

iptables -A OUTPUT -d 172.16.80.116 -p tcp --sport 80 -m string --algo bm --string "gay" -j REJECT

time扩展

根据报文到达的时间与指定的时间范围进行匹配

--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

iptables -A OUTPUT -d 172.16.80.116 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sat,Sun –kerneltz -j DROP


connlimit扩展 

根据每客户端IP做并发连接数数量匹配

--connlimit-upto n  连接数量小于等于n时匹配(默认策略要求是DROP)

--connlimit-above n  连接数量大于n时匹配  (默认策略要求是ACCEPT)

iptables -A INPUT -d 172.16.80.116 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT


state扩展 (conntrack,在IP层实现)

根据连接追踪机制去检查连接的状态

Conntrack机制:能追踪本机上的请求和响应直接的关系,状态有如下几种

NEW:新发出请求,连接追踪模板中不存在此连接的相关信息条目,因此将其识别为第一次发出的请求

ESTABLISHED:在NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信状态

RELATED:相关联的连接,如ftp中命令连接与数据连接之间的关系

INVALID:无效的连接


iptables -A INPUT -d 172.16.80.116 -p tcp --dport 80 -m state --state NEW -j ACCEPT

iptables -A INPUT -d 172.16.80.116 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -d 172.16.80.116 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT   


调整连接追踪功能所能够容纳的最大连接数量

[root@centos01 ~]# cat /proc/sys/net/nf_conntrack_max 

31636

[root@centos01 ~]# cat /proc/net/nf_conntrack  已经追踪到的并记录下来的连接


Iptables –Z  清空计数器


最后我们来做一个小实验,自定义链和截图openstack部分规则链,nat表我们以后再来介绍

[root@centos01 ~]# iptables -A INPUT -d 172.16.80.116 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT  对目标主机172.16.80.116只放行22 80端口

[root@centos01 ~]# iptables -P INPUT DROP  更改默认策略是DROP


这时候我们从客户端ping 172.16.80.116是无法通信的 

技术分享

那么我们就来自定义链来放行icmp规则

iptables -N icmp  新定义一个链icmp(名字随便取)

iptables -A icmp -d 172.16.80.116 -p icmp --icmp-type 8 -mstate --state NEW -j ACCEPT

iptables -A icmp -j RETURN

对自定义的链icmp做默认跳转(即在这个icmp链中没有匹配住的就默认返回到前面关联的链INPUT中去)

iptables -A INPUT -j icmp  将自定义的链icmp和内置链INPUT关联起来,这样内置链才会生效


这时我们再来从客户端ping该主机

技术分享


技术分享


最后截图openstack相关部分,大家有兴趣自己看看研究下,下篇我们介绍nat部分

技术分享


技术分享

技术分享

技术分享


本文出自 “厚德载物” 博客,谢绝转载!

linux安全之iptables防火墙详解1

标签:linux安全 iptables openstack 网络安全

原文地址:http://huaxin.blog.51cto.com/903026/1834263

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!