linux安全之iptables防火墙详解1

在介绍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

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

[[email protected] ~]# cat /proc/sys/net/nf_conntrack_max

31636

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

Iptables –Z  清空计数器

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

[[email protected] ~]# 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端口

[[email protected] ~]# 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部分

时间: 2024-12-16 16:37:03

linux安全之iptables防火墙详解1的相关文章

linux安全之iptables防火墙详解2

在上篇文章中我们介绍了iptables主要的链INPUT,这次我们主要介绍PREROUTING  POSTROUTING这两个链主要用于实现nat功能 nat:相信学网络的人对这个应该很熟悉,网络地址转换,一般用于局域网共享上网或者特殊的端口转换服务 PREROUTING:在数据包到达防火墙时进行路由之前执行的规则,作用是改变数据包的目的地址,目的端口 PSOTROUTING:在数据包离开防火墙进行路由判断之后执行的规则,作用是改变数据包的原地址 源端口 1.部署企业上网网关实战,实验环境如下,

Linux iptables防火墙详解 + 配置抗DDOS攻击策略实战

inux iptables防火墙详解 + 配置抗DDOS攻击策略实战 Linux 内核中很早就实现了网络防火墙功能,在不同的Linux内核版本中,使用了不同的软件实现防火墙功能.在2.0内核中,防火墙操作工具叫:ipfwadm在2.2内核中,防火墙操作工具叫:ipchains在2.4以后的内核,防火墙操作工具叫:iptables ipfwadm 和 ipchains 比较老,已成历史版本,本章主要介绍Iptables 一.iptable 操作命令参数详解 -A  APPEND,追加一条规则(放到

Linux iptables 防火墙详解

0x00 iptables介绍 linux的包过滤功能,即linux防火墙,它由netfilter 和 iptables 两个组件组成. netfilter 组件也称为内核空间,是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集. iptables 组件是一种工具,也称为用户空间,它使插入.修改和除去信息包过滤表中的规则变得容易. 0x01 iptables的结构 iptables的结构: iptables -> Tables -> Chains ->

linux下iptables防火墙详解

Linux网络防火墙基础知识 工作在主机或网络的边缘,对于进出的数据报文按照事先定义好的规则中的匹配标准进行检查,并做出对应的处理办法的机制称作防火墙. IP报文首部:主要包含源IP,目标IP TCP报文首部:主要包含源端口,目标端口,标志位SYN,ACK,RST,FIN 匹配标准解释: IP: 源IP,目标IP TCP: 源端口,目标端口 TCP三次握手三个阶段表示: 第一阶段:  SYN=1,FIN=0,RST=0,ACK=0; 第二阶段: SYN=1,ACK=1,FIN=0,RST=0;

iptables防火墙详解

iptables常用命令 iptables -nv -L 查看iptables列表 iptables -F 清空iptables规则 iptables-save > /etc/sysconfig/iptables 保存iptables规则到文件 以下是我服务器的iptables配置 # Generated by iptables-save v1.4.7 on Tue Jul 5 12:06:29 2016 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [

linux下IPTABLES配置详解 (防火墙命令)

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的

Linux 命令之 scp 命令详解

Linux 命令之 scp 命令详解 一.scp 简介 scp 命令用于不同主机之间复制文件和目录. scp 是 secure copy 的缩写,是 基于 ssh 协议进行安全的远程文件拷贝命令. scp 想要免密进行复制,需要发送秘钥给相应的节点. scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版. 二.scp 命令语法 scp [-options] [[[email protected]]host1:]source_file [[[email protected]]host

Linux上的free命令详解

Linux上的free命令详解 转自: http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html 解释一下Linux上free命令的输出. 下面是free的运行结果,一共有4行.为了方便说明,我加上了列号.这样可以把free的输出看成一个二维数组FO(Free Output).例如: FO[2][1] = 24677460 FO[3][2] = 10321516 1          2          3    

Linux进程上下文切换过程context_switch详解--Linux进程的管理与调度(二十一)【转】

转自:http://blog.csdn.net/gatieme/article/details/51872659 版权声明:本文为博主原创文章 && 转载请著名出处 @ http://blog.csdn.net/gatieme 目录(?)[-] 前景回顾 1 Linux的调度器组成 2 调度工作 进程上下文 1 进程上下文的概念 2 上下文切换 context_switch进程上下文切换 1 context_switch完全注释 2 prepare_arch_switch切换前的准备工作