前提基础:

当主机收到一个数据包后,数据包先在内核空间中处理,若发现目的地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目的不是自身,则会将包丢弃或进行转发。

iptables实现防火墙功能的原理是:在数据包经过内核的过程中有五处关键地方,分别是PREROUTING、INPUT、OUTPUT、 FORWARD、POSTROUTING,称为钩子函数,iptables这款用户空间的软件可以在这5处地方写规则,对经过的数据包进行处理,规则一般 的定义为“如果数据包头符合这样的条件,就这样处理数据包”。

iptables中定义有5条链,说白了就是上面说的5个钩子函数,因为每个钩子函数中可以定义多条规则,每当数据包到达一个钩子函数 时,iptables就会从钩子函数中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据 包;否则iptables将继续检查下一条规则,如果该数据包不符合钩子函数中任一条规则,iptables就会根据该函数预先定义的默认策略来处理数据 包

iptables中定义有表,分别表示提供的功能,有filter表(实现包过滤)、nat表(实现网络地址转换)、mangle表(实现包修 改)、raw表(实现数据跟踪),这些表具有一定的优先级:raw-->mangle-->nat-->filter

一条链上可定义不同功能的规则,检查数据包时将根据上面的优先级顺序检查

(图片来源网络)

小结一下~~~

数据包先经过PREOUTING,由该链确定数据包的走向:

1、目的地址是本地,则发送到INPUT,让INPUT决定是否接收下来送到用户空间,流程为①--->②;

2、若满足PREROUTING的nat表上的转发规则,则发送给FORWARD,然后再经过POSTROUTING发送出去,流程为: ①--->③--->④--->⑥

主机发送数据包时,流程则是⑤--->⑥

iptables安装配置

linux一般默认都已经安装iptables,只需要开启服务即可

1
service iptables start

iptables规则书写

基本语法:iptables [-t 表] [操作命令] [链][规则匹配器][-j 目标动作]

说明 支持的链
raw 一般是为了不再让iptables对数据包进行跟踪,提高性能 PREROUTING、OUTPUT
mangle 对数据包进行修改 五个链都可以
nat 进行地址转换 PREROUTING、OUTPUT、POSTROUTING
filter(默认) 对包进行过滤 INPUT、FORWARD、OUTPUT

常用操作命令

说明
-A 在指定链尾部添加规则
-D 删除匹配的规则
-R 替换匹配的规则
-I

在指定位置插入规则

例:iptables -I INPUT 1 --dport 80 -j ACCEPT

(将规则插入到filter表INPUT链中的第一位上)

-L/S 列出指定链或所有链的规则
-F

删除指定链或所有链的规则

-N

创建用户自定义链

例:iptables -N allowed

-X

删除指定的用户自定义链

-P

为指定链设置默认规则策略,对自定义链不起作

例:iptables -P OUTPUT DROP

-Z 将指定链或所有链的计数器清零
-E

更改自定义链的名称

例:iptables -E allowed disallowed

-n

ip地址和端口号以数字方式显示

例:iptables -Ln

常见规则匹配器 说明
-p tcp|udp|icmp|all 匹配协议,all会匹配所有协议
-s addr[/mask] 匹配源地址
-d addr[/mask] 匹配目标地址
--sport port1[:port2] 匹配源端口(可指定连续的端口)
--dport port1[:port2] 匹配目的端口(可指定连续的端口)
-o interface

匹配出口网卡,只适用FORWARD、POSTROUTING、OUTPUT。

例:iptables -A FORWARD -o eth0

-i interface

匹配入口网卡,只使用PREROUTING、INPUT、FORWARD。

--icmp-type  匹配icmp类型(使用iptables -p icmp -h可查看可用的ICMP类型)
--tcp-flags mask comp

匹配TCP标记,mask表示检查范围,comp表示匹配mask中的哪些标记。

例:iptables -A FORWARD -p tcp --tcp-flags ALL SYN,ACK -j ACCEPT

(表示匹配SYN和ACK标记的数据包)

目标动作 说明
ACCEPT 允许数据包通过
DROP 丢弃数据包
REJECT 丢弃数据包,并且将拒绝信息发送给发送方
SNAT

源地址转换(在nat表上)

例:iptables -t nat -A POSTROUTING -d 192.168.0.102 -j SNAT --to 192.168.0.1

DNAT

目标地址转换(在nat表上)

例:iptables -t nat -A PREROUTING -d 202.202.202.2 -j DNAT --to-destination 192.168.0.102

REDIRECT

目标端口转换(在nat表上)

例:iptables -t nat -D PREROUTING -p tcp --dport 8080 -i eth2.2 -j REDIRECT --to 80

MARK

将数据包打上标记

例:iptables -t mangle -A PREROUTING -s 192.168.1.3 -j MARK --set-mark 60

注意要点:

1、目标地址转换一般在PREROUTING链上操作

2、源地址转换一般在POSTROUTING链上操作

保存和恢复iptables规则

使用iptables-save可以保存到特定文件中

1
    iptables-save >/etc/sysconfig/iptables_save

使用iptables-restore可以恢复规则

1
    iptables-restore</etc/sysconfig/iptables_save

iptables的进阶使用

1、limit限制流量:

-m limit --limit-burst 15        #设置一开始匹配的最���数据包数量

-m limit --limit 1000/s            #设置最大平均匹配速率

-m limit --limit 5/m --limit-burst 15     #表示一开始能匹配的数据包数量为15个,每匹配到一个,

limit-burst的值减1,所以匹配到15个时,该值为0,以后每过

12s,limit-burst的值会加1,表示又能匹配1个数据包

例子:

1
2
iptables -A INPUT -i eth0 -m limit --limit 5/m --limit-burst 15 -j ACCEPT 
iptables -A INPUT -i eth0 -j DROP

注意要点:

1、--limit-burst的值要比--limit的大

2、limit本身没有丢弃数据包的功能,因此,需要第二条规则一起才能实现限速的功能

2、time :在特定时间内匹配

-m time  说明
--monthdays day1[,day2] 在每个月的特定天匹配
--timestart hh:mm:ss 在每天的指定时间开始匹配
--timestop hh:mm:ss 在每天的指定时间停止匹配
--weekdays day1[,day2] 在每个星期的指定工作日匹配,值可以是1-7

例子:

1
2
iptables -A INPUT -i eth0 -m time --weekdays 1,2,3,4 -jACCEPT
iptables -A INPUT -i eth0 -j DROP

3、ttl:匹配符合规则的ttl值的数据包

参数 说明
--ttl-eq 100 匹配TTL值为100的数据包
--ttl-gt 100 匹配TTL值大于100的数据包
--ttl-lt 100 匹配TTL值小于100的数据包

例子:

1
iptables -A OUTPUT -m ttl --ttl-eq 100 -j ACCEPT

4、multiport:匹配离散的多个端口

参数 说明
--sports port1[,port2,port3] 匹配源端口
--dports port1[,port2,port3] 匹配目的端口
--ports port1[,port2,port3] 匹配源端口或目的端口

例子:

1
iptables -A INPUT -m multiport --sports 22,80,8080 -j DROP

5、state:匹配指定的状态数据包

参数 说明
--state value value可以为NEW、RELATED(有关联的)、ESTABLISHED、INVALID(未知连接)

例子:

1
iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT

6、mark:匹配带有指定mark值的数据包

参数 说明
--mark value 匹配mark标记为value的数据包

例子:

1
iptables -t mangle -A INPUT -m mark --mark 1 -j DROP

7、mac:匹配特定的mac地址

例子:

1
iptables -A FORWARD -m mac --mac-source 00:0C:24:FA:19:80 -j DROP

更多iptables相关教程见以下内容

CentOS 7.0关闭默认防火墙启用iptables防火墙  http://www.linuxidc.com/Linux/2015-05/117473.htm

iptables使用范例详解 http://www.linuxidc.com/Linux/2014-03/99159.htm

Linux防火墙iptables详细教程 http://www.linuxidc.com/Linux/2013-07/87045.htm

iptables的备份、恢复及防火墙脚本的基本使用 http://www.linuxidc.com/Linux/2013-08/88535.htm

Linux下防火墙iptables用法规则详解 http://www.linuxidc.com/Linux/2012-08/67952.htm

Linux下iptables防火墙设置 http://www.linuxidc.com/Linux/2015-10/123843.htm

本文永久更新链接地址http://www.linuxidc.com/Linux/2016-09/134832.htm

Linux中iptables详解

Linux系统中,防火墙(Firewall), 网址转换(NAT),数据包(package)记录,流量统计,这些功能是由Netfilter子系统所提供的,而iptables是控制 Netfilter的工具。iptables将许多复杂的规则组织成成容易控制的方式,以便管理员可以进行分组测试,或关闭、启动某组规则。

iptable能够为Unix、Linux和BSD个人工作站创建一个防火墙,也可以为一个子网创建防火墙以保护其它的系统平台。iptable只读取数据包头,不会给信息流增加负担,也无需进行验证。

相关阅读:

Linux iptables 配置详解 http://www.linuxidc.com/Linux/2012-12/77074.htm

RHEL5.4 iptables配置详解 http://www.linuxidc.com/Linux/2010-04/25368.htm

Linux下主机充当防火墙的巧妙应用之iptables http://www.linuxidc.com/Linux/2012-09/70935.htm

1. 术语解释

DNATDestination Network Address Translation 目标网络地址转换。 DNAT是一种改变数据包目的ip地址的技术,经常和SNAT联用,以使多台服务器能 共享一个ip地址连入Internet,并且继续服务。通过对同一个 ip地址分配不同的端口,来决定数据的流向。SNATSource Network Address Translation源网络地址转换。这是一种改变数据包源ip地址的技术, 经常用来使多台计算机分享一个Internet地址。这只在IPv4中使用,因为IPv4的地址已快用完了,IPv6将解 决这个问题。

2. iptable 概述

2.1. iptable的链和表结构

如上图可以看出,iptable总体结构.

2.2. 5个链(chain)

PREROUTING在数据包进入防火墙之后、路由判断之前对数据包进行修改INPUT在数据包被路由到本地之后,但在用户空间程序看到它之前对数 据包进行修改OUTPUT用户空间程序处理数据包后,由本地发出,再次被路由之前更改数据包FORWARD在最初的路由判断之后、最后一次更改包的源地址 之前对数据包进行修改POSTROUTING在所有路由判断之后,对数据包进行修改

注意: 链 是每个数据包流需要经过的不同环节,你可以在不同的环节根据需要设置不同的过滤策略,每个链的默认策略都是Accept

2.3. 4个表(table)

Mangle表这个表主要用来mangle包,你可以使用mangle匹配来改变包的一些属性,比如 TOS(TYPE OF SERVICE),TTL (TIME TO LIVE),MARK(后续流量控制TC等)Nat表此表仅用于NAT,也就是转换包的源或目标地址。注意,就象我们前面说过的,只有流的第一个 包会被这个链匹配,其后的包会自动被做相同的处理(DNAT,SNAT,MASQUERADE)Filter表此表用来过滤数据包,我们可以在任何时候匹 配包并过滤它们。 我们就是在这里根据包的内容对包做DROP或ACCEPT的.

iptalbe中,要用 -t 参数指定要操作哪个表,如果没有 -t 参数,就默认对filter表操作.Raw表优先级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能

注意: 表 是规则的集合组,每个表中的规则条目是按顺序匹配的,你可以在数据包经过的不同环节设置规则,表的处理优先级:raw > mangle > nat > filter

2.4. 详细的数据包流程

从上图可以看出,数据包流环节和表的配合使用方法

3. iptable应用场景

上图是应用场景的简单拓扑描述,下面的应用场景举例,都以上图为参考.

系统启动的时候所有的默认策略都是ACCEPT,在下面的场景举例中,我们都是在这种前提下设定iptable的。下面每个场景举例都是独立的,没有相关联性的。

3.1. 网关服务器安全策略

目标 : 网关服务器系统自生安全策略,只对内网用户开放22端口(sshd服务)

#清空 filter table
[root@localhost]# iptables -F -t filter
[root@localhost]# iptables -X -t filter
[root@localhost]# iptables -Z -t filter
 
#清空 nat table
[root@localhost]# iptables -F -t nat
[root@localhost]# iptables -X -t nat
[root@localhost]# iptables -Z -t nat
 
#设置默认策略(INPUT链默认为DROP)
[root@localhost]# iptables -t filter -P INPUT DROP
[root@localhost]# iptables -t filter -P OUTPUT ACCEPT
[root@localhost]# iptables -t filter -P FORWARD ACCEPT
 
#回环接口(lo),默认accept
[root@localhost]# iptables -A INPUT -p ALL -i lo -j ACCEPT
 
#只对内网用户开放sshd服务
[root@localhost]# iptables -A INPUT -p tcp -s 192.168.138.0/24 --dport 22 -j ACCEPT

说明: 防火墙的策略顺序一般都是 从 非信任 ==> 信任,默认关闭所有访问权限,然后按照需要逐条开放访问权限.

3.2. 共享上网(nat)

目标:使局域网的用户都可以访问外网的服务器

[root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

说明: SNAT 和 MASQUERADE 区别

SNAT : 不管是几个地址,必须明确的指定要SNAT的ip,适合网关服务器有固定地址或者是固定地址范围. MASQUERADE :
是针对ADSL动态拨号这种场景而设计,从服务器的网络接口上,自动获取当前ip地址来做NAT,这样就实现了动态SNAT地址转换

3.3. 内网的服务器对外服务(端口映射)

目标:使外网用户可以访问到局域网192.168.138.21这台HTTP服务

[root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@localhost]# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.138.21
[root@localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

3.4. 在网关服务器进行透明代理

目标: 使局域网用户,访问外网web服务时,自动使用squid作web透明代理服务器。

[root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@localhost]# iptables -t nat -A PREROUTING -s 192.168.138.0/24 -p tcp --dport 80 -i eth0 -j DNAT --to 192.168.138.1
[root@localhost]# iptables -t nat -A PREROUTING -s 192.168.138.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128
[root@localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

iptables防火墙相关命令详解的更多相关文章

  1. linux中iptables配置文件及命令详解详解

    iptables配置文件 直接改iptables配置就可以了:vim /etc/sysconfig/iptables. 1.关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放. 下 ...

  2. linux中iptables配置文件及命令详解

    转自:https://www.cnblogs.com/itxiongwei/p/5871075.html iptables配置文件 直接改iptables配置就可以了:vim /etc/sysconf ...

  3. Linux下iptables防火墙用法规则详解

    管理网络流量是系统管理员必需处理的最棘手工作之一,我们必需规定连接系统的用户满足防火墙的传入和传出要求,以最大限度保证系统免受×××.很多用户把 Linux 中的iptables当成一个防火墙,从严格 ...

  4. Centos iptables防火墙关闭启动详解

    CentOS .0默认使用的是firewall作为防火墙,使用iptables必须重新设置一下 .直接关闭防火墙 systemctl stop firewalld.service #停止firewal ...

  5. Linux中3个文件查找相关命令详解

    源于:https://mp.weixin.qq.com/s/VPs-IXY6RoxbltHIxtIbng which命令 我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令 ...

  6. Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]

     Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...

  7. CentOS7下Firewall防火墙配置用法详解

    官方文档地址: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide ...

  8. Linux服务器,服务管理--systemctl命令详解,设置开机自启动

    Linux服务器,服务管理--systemctl命令详解,设置开机自启动 syetemclt就是service和chkconfig这两个命令的整合,在CentOS 7就开始被使用了. 摘要: syst ...

  9. SSH命令详解2

    ssh命令详解     目录         前言     一.ssh命令         1.Ssh参数解释         2.如何连接远程主机         3.利用Xstart 在windo ...

随机推荐

  1. 深入RESTful无状态原则

    目录 目录 前言 无状态原则 Web服务的状态 基于状态的Web服务 基于无状态的Web服务 总结两者的区别 前言 在上篇RESTful基础知识中整体的介绍了RESTful架构设计思想的框架,在往后的 ...

  2. Spark SQL实战

    一.程序 package sparklearning import org.apache.log4j.Logger import org.apache.spark.SparkConf import o ...

  3. postman的下载和使用

    postman的下载 官网:https://www.getpostman.com/downloads/ 创建账号或者用谷歌浏览器账号登录 登录之后,进行接口测试,这里请求百度为例,然后点击send,就 ...

  4. Git/SVN相关

    svn配置不当: svn1.6之前的版本,通过访问.svn/.entries metasploit auxiliary/scanner/http/svn_scanner 在svn1.7之后的版本,通过 ...

  5. reuseaddr和点对点聊天

    解决绑定失败 在测试时,经常会出现绑定错误,bind error: Address already in use 这里只要指定一下socket的reuseaddr属性即可解决 int on=1; if ...

  6. C#计算两个日期的相隔天数

    DateTime start = Convert.ToDateTime(dateStart.ToShortDateString()); DateTime end = Convert.ToDateTim ...

  7. Map遍历方式

    entrySet 推荐 最常用,性能很好 示例: for (Map.Entry<Integer, Integer> entry : map.entrySet()) { System.out ...

  8. Hibernate使用时需要注意的几个小问题

    今天晚上玩了一下JDBC连接数据库,之后又利用Hibernate进行了数据库的访问,感觉利用Hibernate对数据库访问在文件配置好了之后确实更加简单快捷. 但是在操作的过程中也有一些细节需要注意一 ...

  9. 2019牛客暑期多校训练营(第一场) - A - Equivalent Prefixes - 单调栈

    A - Equivalent Prefixes - 单调栈 题意:给定两个n个元素的数组a,b,它们的前p个元素构成的数组是"等价"的,求p的最大值."等价"的 ...

  10. IIS 应用池资源定时回收

    方法1: 方法2: