纯干货详解iptables工作原理以及使用方法

简介

网络中的防火墙,是一种将内部和外部网络分开的方法,是一种隔离技术。防火墙在内网与外网通信时进行访问控制,依据所设置的规则对数据包作出判断,最大限度地阻止网络中不法分子破坏企业网络,从而加强了企业网络安全。

防火墙的分类

硬件防火墙,如思科的ASA防火墙,H3C的Secpath防火墙等
软件防火墙,如iptables、firewalld等

Linux包过滤防火墙简介

1、Linux操作系统中默认内置一个软件防火墙,即iptables防火墙
2、netfilter位于Linux内核中的包过滤功能体系,又称为模块,并且自动加载,是内核很小的一部分称为Linux防火墙的“内核态”,注意,真正生效的是内核态。
3、iptables位于/sbin/iptables,用来管理防火墙规则的工具称为Linux防火墙的“用户态”。仅仅是管理工具,真正起作用的是内核态。

iptables规则链

规则的作用:对数据包进行过滤或处理
链的作用:容纳各种防火墙规则,相当于容器
链的分类依据:处理数据包的不同时机
系统默认自带的5种规则链:
INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包
POSTROUTING:在进行路由选择后处理数据包(出站过滤)
PREROUTING:在进行路由选择前处理数据包(入站过滤)
注意:POSTROUTING、PREROUTING在做NAT时所使用

iptables规则表

表的作用:容纳各种规则链
表的划分依据:防火墙规则的作用相似,以功能进行划分
默认包括4个规则表:
raw表:确定是否对该数据包进行状态跟踪
mangle:为数据包设置标记,标记之后可以分流、限流
nat表:修改数据包中的源、目标IP地址或端口
filter表:确定是否放行该数据包,即过滤
注意:最终规则是存到链里面,最小的容器是链表里面会存放链,链是一条又一条的规则,一条一条的存

五链四表图


raw表:包含了PREROUTING和OUTPUT。注意只能在这两个时机进行跟踪。
mangle表:包含了PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。注意在这5个时机做标记。
nat表:包含了PREROUTING、OUTPUT、POSTROUTING。注意在这3个时机进行ip或端口修改。
filter表:包含了INPUT、FORWARD、OUTPUT。注意在这3个时机进行过滤数据。

iptables匹配流程

规则表之间的顺序:raw→mangle→nat→filter,即先做状态跟踪→在做标记→在做修改源目IP或端口→在做是否过滤

规则链之间的顺序:

入站:PREROUTING→INPUT 路由前发现是自己的,直接进站
出站:OUTPUT→POSTROUTING
转发:PREOUTING→FORWARD→POSTROUTING
注意:PREROUTING和POSTROUTING是最外围,规则链是靠时机分的,分为了入站,出站,转发三个时机

规则链内的匹配顺序:

按顺序依次检查,匹配即停止(LOG策略外)
若找不到相匹配规则,按该链的默认策略处理

匹配流程示意图

主机型防火墙:

1、入站:数据包发来,路由前,先做跟踪,再做标记,修改,查看路由,如果是发往本机的直接往上走,进站前标记,然后出站过滤
2、出站:出站和路由后,指的是最上面的路由选择,本机选择之后先经过跟踪→标记→修改→是否过滤,出站之后是mangle表的路由后→nat表的路由后

网络型防火墙:

3、转发:数据进来以后,经过路由前raw、mangle、nat,路由前完成之后进行选择,发现此数据是需要发到别的地方,非本地,通过forward,经过mangle的forward,filter的forward,还要经过路由后标记、修改IP及端口,结束

iptables命令语法

  • 语法构成
    iptables [-I 链名] [-t 表名] [-p 条件] [-j 控制类型]
  • 参数详解
    -A:在链的末尾追加一条规则
    -I:在链的开头(或指定序号)插入一条规则
    -L:列出所有的规则条目
    -n:以数字形式显示规则信息(协议解释成数字)
    -v:以更详细的方式显示规则信息
    --line-numbers:查看规则时,显示规则的序号
    -D:删除链内指定序号(或内容)的一条规则
    -F:清空所有的规则
    -P:为指定的链设置默认规则(一条没有匹配上,按照默认规则走)
  • 注意事项
    不指定表名时,默认指filter表
    不指定链名时,默认指定表内的所有链
    除非设置链的默认策略,否则必须指定匹配条件
    选项、链名、控制类型使用大写字母,其余均为小写
  • 数据包的常见控制类型
    ACCEPT:允许通过
    DROP:直接丢弃,不给出任何回应
    REJECT:拒绝通过,必要时会给出提示
    LOG:记录日志信息,然后传给下一跳规则继续匹配

规则的匹配类型

1、通用匹配(可直接使用,不依赖于其他条件或扩展)

常见的通用匹配条件
协议匹配:-p 协议名
地址匹配:-s 源地址、-d 目的地址
接口匹配:-i 入站网卡、-o 出站网卡

2、隐含匹配(要求以特定的协议匹配作为前提)

常见的通用匹配条件
端口匹配:--sport源端口、--dport目的端口
TCP标记匹配:--tcp-flags 检查范围 被设置的标记
ICMP类型匹配:--icmp-type ICMP类型

3、显式匹配(要求以"-m扩展模块”的形式明确指出类型)

常见的通用匹配条件
多端口匹配:-m multiport --sports 源端口列表;-m multiport --dports 目的端口列表
IP范围匹配:-m iprange-src-range IP范围
MAC地址匹配:-m mac --mac-source MAC地址
状态匹配:-m state --state 连接状态

实验环境

  • 系统环境:centos6.5
  • 内网IP:192.168.100.77/24
  • 公网IP:172.16.16.101/24
  • 网关防火墙:
    公网网网卡:eth0:172.16.16.254
    内网网卡:eth1:192.168.100.254

实验论证

准备工作

1、清空防火墙规则、关闭Selinux

[[email protected] ~]# vim /etc/sysconfig/selinux

[[email protected] ~]# reboot #重启

[[email protected] ~]# /etc/init.d/iptables stop #清空防火墙规则

2、查看网卡信息

[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 #查看网关防火墙公网网卡信息

[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 #查看网关防火墙内网网卡信息

[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 #查看公网网卡信息

[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 #查看内网网卡信息

3、开启网关防火墙路由功能

[[email protected] ~]# vim /etc/sysctl.conf #配置一些系统信息以及内核参数

[[email protected] ~]# sysctl -p #重新加载配置文件

4、测试互联互通

[[email protected] ~]# ping -c 3 172.16.16.254 #公网服务器ping公网网关
[[email protected] ~]# ping -c 3 192.168.100.77 #公网服务器ping内网服务器

一、iptables语法详解

1、内网ICMP设置DROP,网关防火墙ping是什么效果?

[[email protected] ~]# iptables -I INPUT -p ICMP -j DROP #拒绝其他主机ping通此主机
[[email protected] ~]# ping 192.168.100.77

[[email protected] ~]# /etc/init.d/iptables stop #网关防火墙清空iptables规则

2、内网ICMP设置REJECT,网关防火墙ping是什么效果?

[[email protected] ~]# iptables -I INPUT -p ICMP -j REJECT #内网设置REJECT
[[email protected] ~]# ping -c 4 192.168.100.77

[[email protected] ~]# /etc/init.d/iptables stop #网关防火墙清空iptables规则

3、内网ICMP设置LOG,内网网关ping是什么效果?

[[email protected] ~]# iptables -I INPUT -j LOG #内网设置LOG
[[email protected] ~]# tail -f /var/log/messages #监视日志文件
[[email protected] ~]# ping -c 4 192.168.100.77 #网关服务器ping内网

此时切换内网,查看监视日志

[[email protected] ~]# /etc/init.d/iptables stop #网关防火墙清空iptables规则

4、设置默认规则

[[email protected] ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT #为了连接Xshell远程连接,将22端口设置为允许
[[email protected] ~]# iptables -P INPUT DROP #默认除了22端口,其余走默认,全部禁掉,根据业务需要,再将允许的端口添加

5、添加iptables新规则

[[email protected] ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT #在第一行插入此规则
[[email protected] ~]# iptables -L -n --line-numbers

[[email protected] ~]# iptables -A INPUT -p tcp --dport 21 -j DROP #在行尾追加此规则

6、查看防火墙规则

[[email protected] ~]# iptables -L

[[email protected] ~]# iptables -L -n

[[email protected] ~]# iptables -L -n --line-numbers

7、删除、清空规则

[[email protected] ~]# iptables -D INPUT -p tcp --dport 21 -j DROP #指定防火墙内容规则进行删除
[[email protected] ~]# iptables -D INPUT 1 #指定序列进行删除
[[email protected] ~]# iptables -P INPUT ACCEPT #注意一下哈,我之前设了一个默认是拒绝所有入站,现在改掉,否则演示清空规则的时候,使用xshell连接,会直接被踢掉
[[email protected] ~]# iptables -F #不加-t,默认过滤,相当与-t filter,也就是INPUT OUTPUT FWORD都清空

#继续添加一些新规则

[[email protected] ~]# iptables -I OUTPUT -p icmp -j DROP
[[email protected] ~]# iptables -I INPUT -p icmp -j DROP
[[email protected] ~]# iptables -n -L --line-numbers

[[email protected] ~]# iptables -F OUTPUT #清除所有出站
[[email protected] ~]# iptables -n -L --line-numbers

二、通用匹配

1、协议匹配:-p 协议名

[[email protected] ~]# /etc/init.d/iptables stop #实验之前清空防火墙

①.内网设置

[[email protected] ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT #允许我连接Xshell
[[email protected] ~]# iptables -P INPUT DROP #进站默认一律丢弃
[[email protected] ~]# iptables -P FORWARD DROP #通过此主机进行数据转发,又不是网关防火墙先丢弃

[[email protected] ~]# /etc/init.d/httpd start #开启Web服务

[[email protected] ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT #虽然之前进站默认设置的是丢弃,但是此时添加这条语句也是可以访问Web服务器,用什么开启什么就可以了

②.网关设置

[[email protected] ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT #先保证Xshell可以使用
[[email protected] ~]# iptables -P INPUT DROP #目前为止除了22端口,其余进站全禁掉

③.公网访问内网

[[email protected] ~]# elinks 192.168.100.77

④.网关添加新规则

[[email protected] ~]# iptables -P FORWARD DROP #将数据转发默认全部丢弃掉

⑤.公网再次访问内网

[[email protected] ~]# elinks 192.168.100.77

2、地址匹配:-s 源地址、-d 目的地址

①.网关设置

[[email protected] ~]# iptables -I FORWARD -d 192.168.100.77 -p tcp -j ACCEPT #要注意,即使添加了此项,外网主机依然无法访问,此时只允许了去访问了,并没有允许数据包回来
[[email protected] ~]# iptables -I FORWARD -s 192.168.100.77 -p tcp -j ACCEPT #添加此项允许数据包回来

②.公网再次访问内网

[[email protected] ~]# elinks 192.168.100.77

3、接口匹配:-i 入站网卡、-o 出站网卡

①.网关设置

[[email protected] ~]# iptables -t nat -A PREROUTING -i eth0 -d 172.16.16.254 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.77
#这里做了一个DNAT地址转换,下一个帖子会详细介绍,是将公网网关172.16.16.254/24转换成192.168.100.77/24内网IP地址访问

[[email protected] ~]# iptables -I FORWARD -i eth0 -p tcp --dport 80 -j ACCEPT #这里设置了允许入站网卡eth0转发tcp协议80端口的服务。此时是允许访问内网主机
[[email protected] ~]# iptables -I FORWARD -i eth0 -p tcp --dport 80 -j DROP #将丢弃80服务的规则放在第一条

②.公网访问内网

[[email protected] ~]# elinks 172.16.16.254

③.网关设置

[[email protected] ~]# iptables -D FORWARD -i eth0 -p tcp --dport 80 -j DROP #清除丢弃访问80服务的规则

④.公网访问内网

[[email protected] ~]# elinks 172.16.16.254

⑤.网关设置

[[email protected] ~]# iptables -I FORWARD -s 192.168.100.0/24 -p tcp --sport 80 -j DROP
[[email protected] ~]# iptables -I FORWARD -o eth0 -s 192.168.100.0/24 -p tcp --sport 80 -j DROP
#注意一下,在转发过程中,源地址是192.168.100.0/24网段,源端口是80的,全部禁掉

⑥.公网再次访问内网

[[email protected] ~]# elinks 172.16.16.254 #无法访问

三、隐含匹配

1、端口匹配:--sport源端口、--dport目的端口

[[email protected] ~]# /etc/init.d/iptables stop #实验之前清空防火墙

①.网关设置(基本上DNS上在网关型防火墙设置如下)

[[email protected] ~]# iptables -I FORWARD -s 192.168.1.0/24 -p udp --dport 53 -j ACCEPT
[[email protected] ~]# iptables -I FORWARD -d 192.168.1.0/24 -p udp --sport 53 -j ACCEPT
[[email protected] ~]# iptables -I FORWARD -d 192.168.1.0/24 -p tcp --sport 53 -j ACCEPT
[[email protected] ~]# iptables -I FORWARD -s 192.168.1.0/24 -p tcp --dport 53 -j ACCEPT

②.内网(主机型)

[[email protected] ~]# iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT #冒号代表连续的端口
[[email protected] ~]# iptables -A INPUT -p tcp --dport 24500:24600 -j ACCEPT

2、TCP标记匹配:--tcp-flags 检查范围 被设置的标记

写法1:

[[email protected] ~]# iptables -I INPUT -i eth0 -p tcp --tcp-flags SYN,RST,ACK SYN -j DROP #SYN被标记,直接丢弃

写法2:

[[email protected] ~]# iptables -I INPUT -i eth0 -p tcp ! --tcp-flags SYN,RST,ACK SYN -j ACCEPT #!代表逻辑非

此时查看Xshell

3、 ICMP类型匹配:--icmp-type ICMP类型

"8"作用:对应ICMP请求,禁止其他机子ping本机

①.内网设置

[[email protected] ~]# /etc/init.d/iptables stop #实验之前清空防火墙
[[email protected] ~]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP #8代表禁止其他机子ping本机
[[email protected] ~]# ping -c 4 172.16.16.101

②.公网ping内网

[[email protected] ~]# ping -c 4 192.168.100.77

"0"作用:对应ICMP回显应答(ping应答)

①.内网设置

[[email protected] ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
[[email protected] ~]# iptables -P INPUT DROP #进站时机设置默认丢弃
[[email protected] ~]# ping 192.168.100.254 #此时自己的网关也无法ping通

[[email protected] ~]# iptables -I INPUT -p icmp --icmp-type 0 -j ACCEPT #回显应答(ping应答)

[[email protected] ~]# ping 192.168.100.254

"3"作用:对应ICMP目标不可达

①.内网

[[email protected] ~]# iptables -I INPUT -p icmp --icmp-type 3 -j ACCEPT
[[email protected] ~]# ping 192.168.100.254 #网关能ping通

②.网关防火墙

[[email protected] ~]# iptables -I INPUT -p icmp --icmp-type 3 -j REJECT
[[email protected] ~]# iptables -I INPUT -p icmp -j REJECT

③.内网

[[email protected] ~]# ping 192.168.100.254

[[email protected] ~]# iptables -I INPUT -p icmp --icmp-type 3 -j DROP
[[email protected] ~]# ping -c 3 192.168.100.254

四、显示匹配

1、 多端口匹配:-m multiport --sports 源端口列表;-m multiport --dports 目的端口列表

[[email protected] ~]# /etc/init.d/iptables stop #实验之前清空防火墙
[[email protected] ~]# /etc/init.d/iptables stop
[[email protected] ~]# iptables -I INPUT -p tcp -m multiport --dports 20,25,80,443,100,53 -j ACCEPT

2、IP范围匹配:-m iprange-src-range IP范围

①.网关设置

[[email protected] ~]# iptables -A INPUT -p icmp -m iprange --src-range 192.168.100.50-192.168.100.200 -j DROP #丢弃掉"192.168.1.50-192.168.1.200"网段,不允许ping

②.内网测试

[[email protected] ~]# ping -c4 192.168.100.254

3、MAC地址匹配:-m mac --mac-source MAC地址(注意!!!!!!经过一个路由MAC地址就变了)

①.网关设置

[[email protected] ~]# iptables -D INPUT -p icmp -m iprange --src-range 192.168.100.50-192.168.100.200 -j DROP #清除规则
[[email protected] ~]# iptables -A INPUT -m mac --mac-source 00:0C:29:03:B1:BA -j DROP

②.内网测试

[[email protected] ~]# ping -c4 192.168.100.254

4、 状态匹配:-m state --state 连接状态

常见的连接状态包括

NEW:与任何连接无关的(客户端发送请求给服务器端,服务器端还没有进行处理)
ESTABLISHED:响应请求或已建立连接的
RELATED:与已有连接有相关性的,如FTP数据连接(客户端访问服务器端FTP,21端口已经连接,当20端口要建立的时候,就属于RELATED)

三台机子全部清掉防火墙

[[email protected] ~]# /etc/init.d/iptables stop

①.内网设置

[[email protected] ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
[[email protected] ~]# iptables -P INPUT DROP #此时只有22端口可以进去,除此之外啥都不行

[[email protected] ~]# ping 192.168.100.254 #ping网关不通

[[email protected] ~]# iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

[[email protected] ~]# ping 192.168.100.254 #可以ping通

[[email protected] ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #设置与ftp相关连

[[email protected] ~]# iptables -I INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT #与任何连接无关

原文地址:http://blog.51cto.com/11905606/2155464

时间: 2024-08-27 21:00:56

纯干货详解iptables工作原理以及使用方法的相关文章

【java项目实践】详解Ajax工作原理以及实现异步验证用户名是否存在+源码下载(java版)

一年前,从不知道Ajax是什么,伴随着不断的积累,到现在经常使用,逐渐有了深入的认识.今天,如果想开发一个更加人性化,友好,无刷新,交互性更强的网页,那您的目标一定是Ajax. 介绍 在详细讨论Ajax是什么之前,先让我们花一分钟了解一下Ajax做什么.如图所示: 如上图展示给我们的就是使用Ajax技术实现的效果.伴随着web应用的越来越强大而出现的是等待,等待服务器响应,等待浏览器刷新,等待请求返回和生成新的页面成为了程序员们的最最头疼的难题.随着Ajax的出现使web应用程序变得更完善,更友

详解JVM工作原理和特点

在我们运行和调试Java程序的时候,经常会提到一个JVM的概念.本文将为大家讲解JVM工作原理和特点,希望对大家有所帮助. AD:网+线下沙龙 | 移动APP模式创新:给你一个做APP的理由>> JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境. 1.创建JVM装载环境和配置 2.装载JVM.dll 3.初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例 4.调用JNIEnv实例装载并处理class类. 在我们运行和调

Java 详解 JVM 工作原理和流程

作为一名Java使用者,掌握JVM的体系结构也是必须的.说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java虚拟机和Java应用程序接口(JavaAPI).它们的关系如下图所示: 运行期环境代表着Java平台,开发人员编写Java代码(.java文件),然后将之编译成字节码(.class文件),再然后字节码被装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器码执

(转)Java 详解 JVM 工作原理和流程

作为一名Java使用者,掌握JVM的体系结构也是必须的.说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java虚拟机和Java应用程序接口(Java API).它们的关系如下图所示: 运行期环境代表着Java平台,开发人员编写Java代码(.java文件),然后将之编译成字节码(.class文件),再然后字节码被装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器码

详解Webwork中Action 调用的方法

详解Webwork中Action 调用的方法 从三方面介绍webwork action调用相关知识: 1.Webwork 获取和包装 web 参数 2.这部分框架类关系 3.DefaultActionProxyFactory.DefaultActionProxy.DefaultActionInvocation 终于要开始 webwork 核心业务类的总结,webwork 通过对客户端传递的 web 参数重新包装,进行执行业务 Action 类,并反馈执行结果,本篇源码分析对应下图 WebWork

MySQL关闭过程详解和安全关闭MySQL的方法

这篇文章主要介绍了MySQL关闭过程详解和安全关闭MySQL的方法,在了解了关闭过程后,出现故障能迅速定位,本文还给出了安全关闭MySQL的建议及方法,需要的朋友可以参考下 www.qdmm.com/BookReader/114529,58420799.aspx www.qdmm.com/BookReader/114529,58484600.aspx www.qdmm.com/BookReader/114529,58486256.aspx www.qdmm.com/BookReader/1145

详解iptables防火墙SNAT、DNAT地址转换工作原理及使用

NAT简介 NAT是将私有IP地址通过边界路由转换成外网IP地址,在边界路由的NAT地址转换表中记录下这个转换,当数据返回时,路由使用NAT技术查询NAT转换表,再将目标地址替换成内网用户IP地址. SNAT策略 局域网主机共享单个公网IP地址接入Internet(内网的地址改成公网) DNAT策略 目标地址转换 SNAT.DNAT工作原理 SNAT 局域网PC封装源.目ip(源地址:192.168.100.77,目的地址:172.16.16.101),到达网关路由器,SNAT将源地址转换成唯一

Iptables工作原理使用详解

Iptables防火墙简介 Iptables名词和术语 Iptables工作流程 基本语法 Filter 参数说明 NAT表: Icmp协议 TCP FLAG 标记 什么是状态检测 iptables的状态检测是如何工作的 iptables 自定义链实例 Iptables防火墙简介 Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精

BadVPN详解之--组网原理剖析

这可能是第一篇关于BadVPN原理的中文介绍,所以我恪守职责,希望能将BadVPN的原理阐述清楚,而不仅仅是为了欺世盗名取天下之先. 序:格尔上市 这一段插在这里有点突兀,与BadVPN无关,只是我的一点实感,忽略即可.       明天小小要去厦门演出,今天是什么日子?是小小准备且出发的日子.但是同样在今天,也就是2017年4月21日(写完本文时估计已经到了22日...),上海格尔软件股份有限公司成功上市了.也许你不知道这个公司,确实这公司的业务是很小众,不像BAT布局那般宏大,但这并不意味着