Linux之Iptables总结及应用

Linux之Iptables总结及应用

一、防火墙、Iptables简介

1、防火墙是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测。常见的有三、四层的防火墙,叫网络层的防火墙(这层对源地址和目标地址进行检测),还有7层防火墙,其实是代理层的网关(对源端口或者目标端口,源地址或者目标地址进行检查)。

2、Iptabels简介:netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。

iptables的前身叫ipfirewall (内核1.x时代),从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具。当内核发展到2.x系列的时候,软件更名为ipchains,它可以定义多条规则,将他们串起来,共同发挥作用,而现在,它叫做iptables,可以将规则组成一个列表,实现绝对详细的访问控制功能。

工作在用户空间,定义规则的工具,本身并不算是防火墙。定义的规则,可以让在内核空间当中的netfilter来读取,并且实现让防火墙工作。而放入内核的地方必须要是特定的位置,必须是tcp/ip的协议栈经过的地方。而这个tcp/ip协议栈必须经过的地方,可以实现读取规则的地方就叫做 netfilter(网络过滤器)。因此真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构。

在内核空间中选择了5个位置:

1)内核空间中:从一个网络接口进来,到另一个网络接口去的

2)数据包从内核流入用户空间的

3)数据包从用户空间流出的

4)进入/离开本机的外网接口

5)进入/离开本机的内网接口

这5个位置也被称为五个钩子函数(hook functions),也叫五个规则链。

1)PREROUTING (路由前)  ##对数据包作路由选择前应用此链中的规则,注意:记住!所有的数据包进来的时侯都先由这个链处理

2)INPUT (数据包流入口) ##进来的数据包应用此规则链中的策略

3)FORWARD (转发管卡)   ##转发数据包时应用此规则链中的策略

4)OUTPUT(数据包出口)   ##外出的数据包应用此规则链中的策略

5)POSTROUTING(路由后)##对数据包作路由选择后应用此链中的规则,注意:所有的数据包出来的时侯都先由这个链处理

这是NetFilter规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链

3、规则链之间的优先顺序有三种情况:

1)入站数据流向:从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。

2)转发数据流向:来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地址等)进行处理。

3)出站数据流向:防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。

二、Iptables工作机制

1、iptables数据包传输过程如下图:

    说明

    1)当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。 

    2)如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。 

    3)如果数据包是要转发出去的,且内核允许转发,数据包就会如上图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出

2、iptables规则表和链关系

iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。

链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。

注意一定要明白这些表和链的关系及作用,详见下图:

规则表说明:

1)filter表(过滤数据包  内核模块:iptables_filter)——三个链:INPUT、FORWARD、OUTPUT

2)Nat表(用于网络地址转换(IP、端口) 内核模块:iptable_nat)——三个链:PREROUTING、POSTROUTING、OUTPUT

3)Mangle表(修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptable_mangle)——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD

4)Raw表(决定数据包是否被状态跟踪机制处理  内核模块:iptable_raw)——两个链:OUTPUT、PREROUTING

规则表之间的优先顺序:

Raw——mangle——nat——filter

三、iptables基本用法

启动动脚本:/etc/init.d/iptables {start|stop|restart|save}

save是将写好的规则保存到/etc/sysconfig/iptables,下次启动时会去读取此文件中的规则。也可使用iptables-save重定向到某个文件中,下次可以使用iptables-restore命令来导入规则。

1)基本语法:

iptables [-t TABLE] COMMAND CHAIN  [RULE] [-j TARGET]

常见参数选项

-t:指明处理的表名,默认是filter

-A|-D|-I|R:增加、删除、插入、替换匹配的规则,后面是对应要处理的链名

-F:刷新规则库

-Z:清空计数器

-N|-X|-E:自己创建、删除、重命名一个链

-P:设置默认策略,经常用来设置黑名单、白名单

-L:列出对应表的防火墙规则,可以使用以下子选项

-n:以数字形式显示ip地址和端口号

-v -vv -vvv:显示信息的详细程度

-x:精确显示匹配到的包数和包的字节数

--line-numbers:列出每个规则的序列号

--modprobe=command:可以通过这个加载必要的模块

2)匹配条件的说明:

通用的匹配条件

-s:指明报文的源地址

-d:指明报文的目的地址

-p:指明报文的协议

-i:指明报文的进入的网卡,与INPUT链一起使用

-o:指明报文出去的网卡,与OUTPUT一起使用

注:每个选项前面都可以加 !来取反

扩展匹配

扩展匹配:隐式扩展、显式扩展,隐式扩展是 -p 指定协议的补充说明,显式扩展是用 -m 来指定特定的其他扩展选项。

常见隐式扩展:

tcp协议的扩展选项:

--sport:指定源端口,udp协议也同样适用

--dport:指定目标端口,udp协议也同样适用

--tcp-flags:指明tcp报文中的状态时,格式:--tcp-flags mask(要检查的状态值) comp(为1的状态值),可以设置的状态值有SYN ACK FIN RST URG PSH ,ALL表示所有的状态,NONE表示所有没有设定

如:--tcp-flags ALL ALL 检查所有状态都为1

--tcp-flags ALL NONE 检查所有状态都为0

--syn只检查SYN状态标志位为1

icmp协议常见扩展:

icmp-type:icmp报文的类型,常见的有0和8,0代表响应报文,8代表请求报文。

常见显式扩展:

iprange:指明ip范围的

--src-range:指明源地址的范围

用法:--src-range from[-to] 例如:--src-range 192.168.1.1-192.168.1.24

--dst-range:指明目标地址的范围,用法同--src-range相同

multiport:指明多端口,只能用于tcp和udp协议

--sports:指明多个源端口

例如:--sports 21,22,80,53

--dports:指明多个目标端口

--ports:指明多个端口,这些端口包括源端口和目标端口

connlimit:限定连接的并发数

--connlimit-above:同一客户端的连接并发数

--connlimit-msak:指明客户端的有掩码位数(prefix length)

limit:限制传输速率的

--limit-rate:限制传输速率的的

用法:--limit rate[/second|/minute|/hour|/day]

--limit-brust:brust是令牌桶,里面存放的是令牌的个数。简单的来说,客户端只用得带令牌才可以传输数据,此令牌数会累加

string:过滤字符串的

--algo:指明匹配字符串的加密类型 kmp和bm(根据人名命名的)

--string:指明匹配的字符串

--hex-string:匹配的字符串使用十六进制形式给出

--from:指明匹配字符串的开始处,默认是0

--to:指明匹配字符串的结束处,默认是65535

time:限定时间和日期

--datestart:起始日期,格式:YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

--datestop:截止日期,格式同上

--timestart:起始时间,格式是:hh:mm[:ss]

--timestop:截止时间,格式同上

--weekdays:指定星期数:Mon, Tue, Wed, Thu, Fri, Sat,Sun 也可以使用1-7

--monthdays day:指明一个月中的特定天数,1-31都可以使用

state:指明连接的状态

--state:指明连接状态,状态有:

NEW:新建立的连接

ESTABLISHED: 已建立的连接

RELATED: 关联的连接

INVILID:表示无效的状态

recent: 阻挡大量的请求,例如可以防止DOS的攻击

3)在内核里面维护了地址列表,这个列表可以通过--set, --rcheck, --update and --remove四种方法来修改列表。--set, --rcheck, --update and --remove 是相互排斥的,不可同时使用。recent模块个规则有返回值(布尔值),为真会执行 -j 指定的动作。

--set:将地址添加到地址列表中,包含地址的时间戳

--name:指定地址列表的名字,默认是DEFAULT

--rsource --rdest:指明当前的规则是应用到数据包的源地址还是目标地址,默认是源地址

--rcheck:检查地址是否在地址列表中

--remove:删除地址列表中的

--update:和rcheck作用一样,但他会刷新时间戳

--hitcount:指定时间内的命中数(在地址列表中匹配的次数),必须与-rcheck和--update同时使用

--seconds:用法:--seconds n (限制数据包里的地址记录到地址列表里的时间要小于n) ,必须与-rcheck和--update同时使用

4)目标:

一般有-j选项指定,常见的有:DROP,ACCEPT,REJECT,DNAT,SNAT,MASQUERADE,RETRUN,MARK,LOG

DROP,ACCEPT,REJECT常用与过滤数据包

DNAT,SNAT,MASQUERADE用在地址转换的模块

DNAT常与--to-destination一起使用,指明目标地址转换的地址

SNAT常与--to-source一起使用,指明目标地址转换的地址,但有时这个地址是动态获取的,所以就要借助于MASQUERADE来动态指明要转换的地址

RETRUN:是跳转,通常用在自定义的链上,在自义链中无法匹配报文时,将其返回主链

LOG:是定义日志功能的,常见的选项有 --log-prefix (用于在日志信息中标注信息)、 --log-level(用于指明日志的级别)

四、练习巩固

注意:以下练习iptables防火墙INPUT和OUTPUT默认策略为DROP;

1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机;

# iptables -t filter -A INPUT -d 192.168.2.5 -p tcp --dport 80 -m state --state NEW -m limit --limit 100/second -m time ! --weekdays Mon  -j ACCEPT

# iptables -t filter -A INPUT -d 192.168.2.5 -p tcp --dport 80 -m state --state ESTABLISHED -j ACCEPT

# iptables -t filter -A OUTPUT-s 192.168.2.5 -p tcp --sport 80 -m state --state ESTABLISHED -m string --algo kmp ! --string "admin" -j ACCEPT

2、在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给192.168.2.0网络中的主机访问;数据下载请求的次数每分钟不得超过5个

# iptables -t filter -R INPUT 2 -d 192.168.2.5 -s 192.168.2.0/24 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --timestop 18:00:00 -j ACCEPT

# iptables -t filter -R INPUT 3 -d 192.168.2.5  -s 192.168.2.0/24 -p tcp -m state --state RELATED  -m limit --limit 5/min  -j ACCEPT

# iptables -t filter -A INPUT -d 192.168.2.5  -s 192.168.2.0/24 -p tcp -m state --state ESTABLISHED  -j ACCEPT

# iptables -t filter -A OUTPUT -d 192.168.2.0/24 -s 192.168.2.5 -p tcp -m state --state ESTABLISHED -j ACCEPT

3、开放本机的ssh服务给192.168.2.10-192.168.2.20中的主机,新请求建立的速率一分钟不得超过2个;仅允许响应报文通过其服务端口离开本机;

# iptables -t filter -A INPUT -d 192.168.2.5 -p tcp --dport 22 -m state --state NEW -m iprange --src-range 192.168.2.10-192.168.2.20 -m limit --limit 2/min -j ACCEPT

# iptables -t filter -A INPUT -d 192.168.2.5 -p tcp --dport 22 -m state --state ESTABLISHED -m iprange --src-range 192.168.2.10-192.168.2.20  -j ACCEPT

# iptables -t filter -A OUTPUT -s 192.168.2.5 -p tcp --sport 22 -m iprange --dst-range 192.168.2.10-192.168.2.20 -m state --state ESTABLISHED -j ACCEPT

4、拒绝TCP标志位全部为1及全部为0的报文访问本机;

# iptables -t filter -A INPUT -d 192.168.2.5 -p --tcp-flags ALL ALL -j DROP

5、允许本机ping别的主机;但不开放别的主机ping本机;

# iptables -A INPUT -p icmp --icmp-type 8 -d 192.168.2.5 -j DROP

# iptables -A OUTPUT -p icmp --icmp-type 0 -s 192.168.2.5 -j ACCEPT

时间: 2024-08-05 11:46:34

Linux之Iptables总结及应用的相关文章

linux防火墙--iptables(二)

五.filter过滤和转发 a.打开内核的IP转发 # sysctl -w net.ipv4.ip_forward=1 或 # echo 1 > /proc/sys/net/ipv4/ip_forward b.基本匹配条件 ·通用匹配 → 可直接使用,不依赖于其他条件或扩展 → 包括网络协议.IP地址.网络接口等条件 ·隐含匹配 → 要求以特定的协议匹配作为前提 → 包括端口.TCP标记.ICMP类型等条件 类别 选项 用法 通用匹配 协议匹配 -p 协议名 地址匹配 -s 源地址      

Linux防火墙iptables简明教程

前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔除了许多冗余的内容,提取出尽量多的精华部分成文,和大家共同学习,本文涉及的内容包括如下 Linux防火墙iptables简明教程 1.安装iptables 2.查看现有的iptables规则 3.删除某iptables规则 4.清除现有iptables规则 5.创建规则 6.设置开机启动 7.保存i

Linux之iptables原理详解

本文和大家分享的主要是linux中iptables原理相关内容,一起来看看吧,希望对大家学习linux有所帮助. 目录: 一.netfilter与iptables 二.filter.nat.mangle等规则表 三.INPUT.FORWARD等规则链和规则 四.Linux数据包路由原理 五.iptables编写规则 一 .netfilter与iptables (1)Netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许

CentOS下配置iptables防火墙 linux NAT(iptables)配置

CentOS下配置防火墙 配置nat转发服务CentOS下配置iptables防火墙 linux NAT(iptables)配置 CentOS下配置iptables 1,vim /etc/sysconfig/network   这里可以更改主机名称. NETWORKING=yesNETWORKING_IPV6=noHOSTNAME=BGI-TJ.localdomain GATEWAY=192.168.11.1(超算网关) 2.vim /etc/sysconfig/network-scripts/

Linux Firewall ---iptables

Linux Firewall---iptables iptables 命令格式: iptables [-t TABLE] {-OPTION} [chain] [rulenum][rule-sepecification] TABLE : raw.mangle.nat.filter 过滤规则应用于filter.NAT规则应用于nat.用于修改分组数据的特定规则应用于mangle.而独立于Netfilter连接跟踪子系统起作用的规则应用于raw. OPTION: Object:chain A(Appe

Linux之Iptables防火墙概述~

Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实现过滤和机制,属于典型的包过滤防火墙(或称之为网络层防火墙). Netfilter和Iptables区别: Netfilter:指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于"内核态"(kernel space,又称为内核空间)的防火墙功能体系. Iptables:指的是Linux防护墙的命令工具,程序通常位于/sbin/iptables,属于"用户态"(User sp

LInux下iptables配置

linux下IPTABLES配置详解 如果你的IPTABLES基础知识还不了解,建议先去看看. 开始配置 我们来配置一个filter表的防火墙. (1)查看本机关于IPTABLES的设置情况 [[email protected] ~]# iptables -L -nChain INPUT (policy ACCEPT)target       prot opt source                 destination Chain FORWARD (policy ACCEPT)targ

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防火墙--iptables(三)

七.SNAT源地址转换 ·Source Network Address Translation ·修改数据包的源地址 ·仅用于nat表的POSTROUTING链 Example:局域网共享公网IP上网 ·配置的关键策略 → 做完路由选择后,针对来自局域网.即将从外网接口发出去的数据包,将其源IP地址修改为 网关的公网IP地址  # iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to-source 69.166