iptables防火墙相关命令详解

前提基础:

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

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

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

3.2. 共享上网(nat)

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

[[email protected]]# echo 1 > /proc/sys/net/ipv4/ip_forward
[[email protected]]# 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服务

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

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

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

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

原文地址:https://www.cnblogs.com/baichuanhuihai/p/8436901.html

时间: 2024-10-27 13:03:38

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

Centos iptables防火墙关闭启动详解

CentOS 7.0默认使用的是firewall作为防火墙,使用iptables必须重新设置一下 1.直接关闭防火墙 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动 2.设置 iptables service yum -y install iptables-services 如果要修改防火墙配置,如增加防火墙端口3306 vi /etc/sysconf

Linux进程管理相关命令详解

一.top top命令用于显示系统当前的进程和其他状况:top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果再前台执行该命令,它将独占前台,直到用户终止该程序为止. 其中1-5行为统计信息区,剩余行为进程信息区:1.统计信息区1)第1行为任务队列信息(与uptime命令运行结果相同)字段含义:当前时间     系统启动持续时间   当前登陆用户数    系统负载,即任务队列的平均长度备注:格式为"日期,时:分"  三个数值分别为1,5和15分钟前到现在的均值2)第2行为

linux文件管理相关命令详解

1.文件通配符,可参考"man 7 glob"内容: (1)常用通配符: *:表示匹配零个或多个字符 ?:表示任何单个字符 ~:表示当前用户家目录 ~USERNAME:表示某用户的家目录 ^:表示取反 []:表示指定范围内的任意单个字符 [0-9]:表示匹配一个数字范围 [a-z]:表示匹配不包含Z的所有字母 [A-Z]:表示匹配不包含a的所有字母 [:digit:]:表示任意数字 [:lower:]:表示任意小写字母 [:upper:]:表示任意大写字母 [:alpha:]:表示任意

grep 命令详解及相关事例

一.匹配字符 .    匹配任意单个字符 [ ]  匹配指定范围内的任意字符 [^]  匹配飞指定范围内的任意字符 [:alpha:] 字母字符 [:lower:] 小写字母字符 [:upper:] 大写字母字符 [:digit:] 数字 [:alnum:] 字母数字字符 [:space:] 空白字符(禁止打印),如回车符.换行符.竖直制表符和换页符 [:punct:] 标点字符 [:cntrl:] 控制字符(禁止打印) [:print:] 可打印字符 使用时一般使用两个中括号,具体会在下面的例

windbg命令详解

DLL 该扩展仅在内核模式下使用,即使它是在Ext.dll中的. Windows NT 4.0 Ext.dll Windows 2000 Ext.dll Windows XP和之后 Ext.dll 注释 如果不提供参数,调试器会列出所有进程,以及时间和优先级统计.这和使用!process @#Process 0 作为CommandString值一样. To terminate execution at any point, press CTRL+BREAK (in WinDbg) or CTRL

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

官方文档地址: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html#sec-Introduction_to_firewalld1 修改防火墙配置文件之前,需要对之前防火墙做好备份 重启防火墙后,需要确认防火墙状态和防火墙规则是否加载,若重启失败或规则加载失败,则所有请求都会被防火墙拦截 1 2 3 4 5 6 7

nc命令详解

netcat被誉为网络安全界的‘瑞士军刀’,相信没有什么人不认识它吧……一个简单而有用的工具,透过使用TCP或UDP协议的网络连接去读写数据.它被设计成一个稳定的后门工具,能够直接由其它程序和脚本轻松驱动.同时,它也是一个功能强大的网络调试和探测工具,能够建立你需要的几乎所有类型的网络连接,还有几个很有意思的内置功能(详情请看下面的使用方法).nc命令详解Filed under: security — ranbo @ 9:08 pm netcat被誉为网络安全界的‘瑞士军刀’,相信没有什么人不认

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

iftop命令命令详解

iftop命令命令详解 作者:尹正杰 在Linux命令中有很多内置命令,和外置命令,但是内部命令的功能毕竟是有限的,比如ifconfig,它就不能看到网卡流量的 实时发送情况,尽管咱们知道可以用watch命令去查看网卡的发送接收流量的情况,但是还是不够细致,因为它仅仅能看到我们的 接受和发送的总流量,因此,我们今天来介绍一个比较好使的实施查看网络流量信息的软件---iftop,其实他的工作模式和top很像. 废话不多说~让我们直接进入正题吧: 1.想必大家都会在linux命令行上敲击ifconf