Iptables采用了表和链的分层结构,每个规则表相当于内核空间的一个容器,根据规则集的不同用途划分为默认的四个表,raw表,mangle表,nat表,filter表,每个表容器内包括不同的规则链,根据处理数据包的不同时机划分为五种链,而决定是否过滤或处理数据包的各种规则,按先后顺序存放在各规则链中。

1、防火墙:内核中具有包过滤体系

内核态:netfilter

用户态:iptables  管理工具

工作在网络层:可以对ip地址、端口、协议等信息进行处理

2、规则链:规则的集合

五种链:(必须大写)

INPUT:入站

OUTPUT:出站

FORWARD:转发

POSTROUTING:路由后转换

PREROUTING:路由前转换

1)INPUT链:当收到访问防火墙本机地址的数据包(入站),应用此链中的规则。

2)OUTPUT链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则。

3)FORWARD链:当收到需要通过防火墙中转发送给其他地址的数据包(转发)时,应用此链中的规则。

4)PREROUTING链:在对数据包做路由选择之前,应用此链中的规则。

5)POSTROUTING链:在对数据包做路由选择之后,应用此链中的规则。

3、规则表:规则链的集合

有4个表:

Raw:状态跟踪

Mangle:设置标记

Nat:地址转换

Filter:包过滤

1)filter表:用来对数据包进行过滤,表内包含三个链,即:INPUT,FORWARD,OUTPUT

2)Nat表:nat表主要用来修改数据包的ip地址、端口号等信息。包含三个链,即PREROUTING,POSTROUTING,OUTPUT

3)Mangle表:用来修改数据包的TOS、TTL,或者为数据包设置MARL标记,实现流量整形,策略路由等高级应用,包含五个链,PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD

4)Raw表:用来决定是否对数据包进行状态跟踪,包含两个链:即OUTPUT,PREROUTING

4、规则的匹配顺序:

1)规则表的顺序

当数据包抵达防火墙时,将依次应用raw表,mangle表,nat表和filter表中对应链内的规则,应用顺序为raw-mangle-nat-filter

按顺序依次检查,匹配即停止(LOG策略除外),无匹配项,执行默认策略。

2)规则链之间的顺序

入站数据流向:来自外界的数据包到达防火墙后,首先被PRETOUTING链处理,然后进行路由选择,如果数据包的目标地址是防火墙本机,那么内核将其传递给INPUT链进行处理,通过以后再讲给系统的上层应用程序进行响应。

转发数据流向:来自外界的数据包到达防火墙后,首先被PREROUTING链处理,然后再进行路由选择,如果数据包的目的地址是其他外部的地址,则内核将其传递给FORWARD链进行处理,最后交给POSTROUTING链进行处理。

出站数据流向:防火墙本机向外部地址发送的数据包,首先被OUTOUT处理,然后进行路由选择,再交给POSTROUTING链进行处理。

3)规则链内部各条防火墙规则之间的顺序

当数据包经过每条规则链时,依次按第一条规则,第二条规则......的顺序进行匹配和处理,链内的过滤遵循“匹配即停止”的原则,一旦找到一条相匹配的规则,则不再检查本链内后续的其它规则,如果比对完整个链,也找不到与数据包相匹配的规则,就按照规则链的默认策略进行处理。

5、iptables语法:

Iptables  -t  表名  命令选项  链名  条件选项  -j  控制类型

1)不指定表名,为filter表

2)命令选项、链名、控制类型必须大写,其他必须小写

3)条件选项可以设置多项

6、控制类型:

1)ACCEPT:允许

2)REJECT:拒绝,返回信息

3)DROP:丢弃,无信息

4)LOG:记录日志,传给下一条规则

5)SNAT:源地址转换

6)DNAT:目标地址转换

7)MASQUERADE:ip伪装,源地址转换

8)REDIRECT:重定向

7、命令选项:

-A:追加到末尾

-I:插入(默认插入到第一条)

-L:查看

-D:删除(必须加序号)

-F:清空,但默认策略不清空

-P:默认策略,只有ACCEPT或DROP两种

-R:替换

-X:删除自定义链

-N:新建自定义链

-n:以数字方式显示

--line-number:添加序号

8、条件选项:

1)通用匹配:不依赖于任何条件可直接使用

-s:源地址             -d:目标地址

-p:协议                 -i:入口

-o:出口               !:取反

2)隐含匹配:依赖指定的协议

--sport:源端口          --dport:目标端口

--tcp—flags:TCP标记

--icmp-type:icmp类型,有两种:

Echo-request(可用8代替)      请求

Echo-reply(可用0代替)        回应

开启转发功能:

永久有效:vim  /etc/sysctl.conf

Net.ipv4.ip_forward=1

生效:sysctl  -p

临时转发,立即生效

Sysctl  -w net.ipv4.ip_forward=1

Echo “1”  > /proc/sys/net/ipv4/ip_forward

3)显示配置:依赖于指定的功能模块,必须明确指定模块名称才可以使用

多端口匹配:-m  multiport --sports   源端口列表

-m  multiport  --dports  目的端口列表

IP范围匹配:-m  iprange --src-range  ip范围

MAC地址匹配:-m  mac  --mac-source MAC地址

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

 

linux编写iptables防火墙规则示例

iptables和asa防火墙类似,作用一样,都是为了保证网络安全,系统安全,服务器的安全,和asa一样也需要建立策略。

下面通过一个案例先了解一下iptables防火墙规则的相关基础操作。(关于防火墙的相关知识概念,请关注微信公众号 L宝宝聊IT  Linux防火墙基础与编写防火墙规则 文章)

实验环境:

网站服务器ip地址是192.168.1.5,网关服务器的内网地址是eth0:192.168.1.254,外网地址是eth1:172.16.16.254,internter测试机是172.16.16.172。实现三台系统之间可以互相ping通。

 

网管服务器需要开启路由转发功能

 

也可进入vim /etc/sysctl.conf 修改为 1 永久开启路由转发功能

最后测试可以互相ping通即可

下面介绍各种规则如何应用

一、编写防火墙规则

1、例如:在网站服务器的filter表的INPUT链中插入一条规则,拒绝发送给本机使用的ICMP协议的数据包。

执行:Iptables -t  filter  -I INPUT -p icmp  -j REJECT

查看规则:iptables -L INPUT --line-numbers

然后再次使用172.16.16.172ping192.168.1.5,出现目标端口不可到达,无法ping通

2、添加新的规则

例如:

1)在filter表INPUT链的末尾添加一条规则,接受tcp协议(实验之前在网站服务器上搭建ftp服务,使用internet测试机可以访问ftp服务器)

在internet测试机上访问

默认网站服务器的防火墙开启,所以不能访问,然后执行:

iptables -t   filter  -A INPUT  -p  tcp  -j   ACCEPT

发现依然不能访问,因为-A是在末尾添加一条新的规则

所以执行:Iptables  -I  INPUT  -p tcp  -j  ACCEPT(-I默认是添加在第一条)

再次访问ftp

在网站服务器上查看规则

例:2)添加规则允许udp数据包通过,默认位于filter的第一条

Iptables -I INPUT  -p  udp -j  ACCEPT

例:3)指定顺序号,添加规则允许icmp数据包通过,位于第2条

Iptables -I INPUT 2 -p icmp  -j  ACCEPT

查看规则列表:

3、以数字形式显示规则列表,加快执行速度

Iptables -n  -L  INPUT  (-n  -L  可简写为-nL)

4、删除,清空规则

1)若要删除filter表INPUT链中的第三条规则,执行:

Iptables -D  INPUT 3

2)清空指定链或表中的所有防火墙规则,使用-F

Iptables -F  INPUT

3)清空filter表,nat表,mangle表

Iptables   -F

Iptables   -t   nat   -F

Iptables   -t   mangle  -F

5、设置默认策略:当找不到任何一条能够匹配数据包规则时,则执行默认策略

例如1)将filter表中FORWARD链的默认策略设置为丢弃,OUTPUT链的默认策略设置为允许(默认策略不参与规则的顺序编排,因此在前后并无区别。)

二、规则的匹配条件

对于同一条防火墙规则,可以指定多个匹配条件,这些条件必须都满足规则才能生效。

1、通用匹配:分为三种类型,协议匹配,地址匹配,网络接口匹配。

1)协议匹配

如果在网关服务器上开启防火墙,那么internet测试机是不能访问网站服务器的。

查看网关服务器的FORWARD链,发现只有一条拒绝all。

如果想允许路由转发,执行下面的命令:

iptables -I  FORWARD  -j  ACCEPT,然后在internet测试机上可以访问网站服务器。

然后如果想丢弃通过icmp协议访问防火墙本机的数据包,允许转发经过防火墙的除icmp协议之外的数据包,可以执行:

Iptables -I  INPUT  -p  icmp -j  DROP

Iptables -A  FORWARD  !  -p  icmp -j  ACCEPT

执行之前先在internet测试机上ping网关服务器的172.16.16.254和192.168.1.5都是可以ping通的。执行完之后就不能ping通了,但是依然能够访问网站服务器的ftp。

先在internet测试机上ping,可以ping通

然后在网关服务器上执行以下命令

在internet测试机上ping192.168.1.5和172.16.16.254都不通了,但是ftp依然可以访问。

2)地址匹配

例1)例如:拒绝转发源地址为172.16.16.172的数据,允许转发源地址192.168.1.0的数据包

因为172.16.16.172就是internet测试机,所以internet测试机无法ping通192.168.1.5,也不能访问ftp

例2)如果检测到来自某网段的频繁扫描,登录等不良的企图,可以立即添加防火墙规则进行封锁。

Iptables  -I  INPUT  -s 10.20.30.0/24  -j  DROP

Iptables  -I  FORWARD  -s  10.20.30.0/24  -j  DROP

3)网络接口匹配

例如:若要丢弃从外网接口访问防火墙本机且源地址为私有地址的数据包,执行以下操作:

首先:在172.16.16.172上ping172.16.16.254,使之可以ping通

然后执行以下命令:

再此在172.16.16.172上ping172.16.16.254,无法ping通,因为外网接口是eth1

2、隐含匹配:以指定的协议匹配作为前提条件,相当于子条件。

1)端口匹配

例如:允许网段192.168.1.0/24转发dns查询数据包。

首先在网站服务器上开启dns服务

vim  /var/named/chroot/var/named/google.com.zone

为了实验效果,先在网关服务器上执行以下命令,阻止转发

Iptables -I  FORWARD  -j  REJECT

然后在internet测试机上执行nslookup,不能解析

接下来在网关服务器上执行隐含匹配,允许为172.16.16.0网段转发dns查询包

再次在internet测试机上测试解析

2)ICMP类型匹配

若要禁止从其他主机ping本机,但是允许本机ping其他主机,可以执行以下操作

首先为了实验测试方便,在网关服务器上执行:(执行之前把其它的规则都删掉,关闭防火墙即可编写规则后会自动打开)

nternet测试机和网站服务器之间可以互相ping通,然后执行:

如果实验不通,把上面的最后一条改为iptables -A INPUT -p icmp-j DROP

然后测试:

3、显示匹配

必须调用相应的模块,然后方可设置匹配条件

1)多端口匹配

例如:允许网站服务器本机开放25、80、110、143端口

2)ip范围匹配

例如:禁止转发源地址位于192.168.4.21与192.168.4.28之间的tcp数据包。

3)mac地址匹配

例如:禁止以下mac地址的主机访问网站服务器的任何应用。

4)状态匹配

例如:禁止转发与正常tcp连接无关的非syn请求数据包(如伪造的网络攻击数据包)。

再例如:开放本机的web服务80端口,但对发给本机的tcp应答数据包予以放行,其他入站数据包均丢弃,对应的入站规则如下:

以上就时iptables防火墙规则的基本应用,下面时上机实验部分:

三、上机实验

1、实验环境和上面的一样

网站服务器ip地址是192.168.1.5,网关服务器的内网地址是eth0:192.168.1.254,外网地址是eth1:172.16.16.254,internter测试机是172.16.16.172。实现三台系统之间可以互相ping通。

2、为网站服务器编写入站规则

(1)本例中所有规则均在filter表的INPUT链内添加,默认策略设置为DROP。

(2)使用“-p icmp ! --icmp-type 8 ”的条件匹配非ICMP请求的数据包。

(3)使用“-p tcp --dport 80”的条件匹配对TCP 80端口的访问。

(4)使用“-p tcp -m state --stateESTABLISHED,RELATED”匹配TCP响应数据包。

[root@localhost ~]# iptables -P INPUT DROP

[root@localhost ~]# iptables -A INPUT -p icmp !--icmp-type 8 -j ACCEPT

[root@localhost ~]# iptables -A INPUT -p tcp--dport 80 -j ACCEPT

[root@localhost ~]# iptables -A INPUT -p tcp -mstate --state ESTABLISHED,RELATED -j ACCEPT

(5)测试入站控制效果:从其他主机可以访问本机中的Web服务,但不能访问其他任何服务(如FTP、DNS);从本机可以ping通其他主机,但其他主机无法ping通本机。

[root@localhost ~]# iptables -nL INPUT

Chain INPUT (policy ACCEPT)

target   prot opt source           destination

ACCEPT   icmp --  0.0.0.0/0         0.0.0.0/0    icmp !type 8

ACCEPT   tcp  --  0.0.0.0/0         0.0.0.0/0    tcp dpt:80

ACCEPT   tcp  --  0.0.0.0/0         0.0.0.0/0    state RELATED,ESTABLISHED

…… //其他测试过程略

3、为网关服务器编写转发规则

(1)本例中所有规则均在filter表的FORWARD链内添加,默认策略设置为DROP。

(2)针对TCP协议的80、20、21、25、110、143端口,以及UDP协议的53端口,分别为从局域网访问Internet、从Internet响应局域网请求的过程编写转发规则。

[root@localhost ~]# iptables -P FORWARD DROP

[root@localhost ~]# iptables -A FORWARD -s192.168.1.0/24 -p tcp -m multiport --dport 20,21,

80,25,110,143 -o eth1 -j ACCEPT

[root@localhost ~]# iptables -A FORWARD -i eth1-m state --state ESTABLISHED,RELATED -j ACCEPT

[root@localhost ~]# iptables -A FORWARD -s192.168.1.0/24 -p udp --dport 53 -oeth1 -j ACCEPT

[root@localhost ~]# iptables -A FORWARD -p udp--sport 53 -i eth1-j ACCEPT

(3)执行DNS查询,获知站点web.qq.com、w.qq.com、im.qq.com当前所用的IP地址包括:112.90.141.88、112.90.141.163、112.90.141.164、58.251.149.159、58.251.60.202、123.138.238.100、123.138.238.101。然后依次针对这些IP地址编写转发规则,禁止到TCP协议的80、443端口的访问。

[root@localhost ~]# vi /opt/black_ip.txt            //编写封禁地址列表

112.90.141.88

112.90.141.163

112.90.141.164

58.251.149.159

58.251.60.202

123.138.238.100

123.138.238.101

[root@localhost ~]# for i in `cat/opt/black_ip.txt`; do iptables -I FORWARD -d$i -p tcp -m multiport --dport 80,443 -j DROP ; done  //读取IP地址以插入规则

(4)测试转发控制效果:从局域网中的主机无法访问Internet中的web.qq.com等被封站点,但能够访问其他Web站点,也能够访问DNS、FTP等网络服务。

[root@localhost ~]# iptables -nL FORWARD

Chain FORWARD (policy DROP)

target  prot opt source        destination

DROP    tcp  --  0.0.0.0/0     123.138.238.101     multiportdports 80,443

DROP   tcp  --  0.0.0.0/0     123.138.238.100     multiport dports80,443

DROP   tcp  --  0.0.0.0/0    58.251.60.202       multiport dports80,443

DROP    tcp  --  0.0.0.0/0   58.251.149.159      multiport dports80,443

DROP    tcp  --  0.0.0.0/0     112.90.141.164      multiport dports80,443

DROP    tcp  --  0.0.0.0/0     112.90.141.163      multiport dports80,443

DROP   tcp  --  0.0.0.0/0     112.90.141.88       multiport dports

文章参考微信公众号:L宝宝聊IT

Linux防火墙基础与编写防火墙规则的更多相关文章

  1. 玩转Django2.0---Django笔记建站基础三(编写URL规则)

    第三章 编写URL规则 URL(Uniform Resource Locator,统一资源定位符)是对可以从互联网上得到的资源位置和访问方法简洁的表示,是互联网上标准资源的地址. 在App里由于Dja ...

  2. linux防火墙(五)—— 防火墙的规则备份与还原

    一.第一种备份还原用法,使用工具 iptables-save >/opt/iprules.txt iptables-restore < /opt/iprules.txt #注意导入的文件必 ...

  3. Iptables静态防火墙基础教程

    文章目录检查Iptables是否安装Iptables相关的文件配置Iptables规则自定义规则保存规则 Iptables对于刚入门Linux的新手都比较难理解和配置.但是如果你掌握了其中的诀窍,你就 ...

  4. Linux网卡驱动安装、防火墙原理

    安装网卡驱动程序: 需要检查是否安装kernel依赖包: rpm –q kernel-devel #检查kernel依赖包是否安装 yum –y install kernel-devel 检查gcc和 ...

  5. seccomp沙盒逃逸基础——沙盒的规则编写

    seccomp沙盒逃逸基础--沙盒的规则编写 引入: 安全计算模式 seccomp(Secure Computing Mode)是自 Linux 2.6.10 之后引入到 kernel 的特性.一切都 ...

  6. firewalld防火墙基础

    目录 一.firewalld 概述 二.firewalld与iptables 的区别 三.firewalld 区域概念 四.Firewalld数据处理流程 五.Firewalld检查数据包的源地址的规 ...

  7. Firewalld防火墙——基础认知

    Firewalld防火墙 1.Firewalld概述 2.firewalld与iptables 的区别 3.firewalld区域的概念 4.firewalld数据处理流程 5.firewalld检查 ...

  8. linux常用命令和关闭防火墙

    linux常用命令和关闭防火墙   2.        linux常用命令 Mkdir 创建 Rm -rf 删除 Chmod -R 777 权限 Mysql -uroot -r quit退出 find ...

  9. Linux之iptables(一、防火墙的概念)

    防火墙的概念 一.安全技术 入侵检测与管理系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化.定位来自内外网络的威胁情况,主要以提供报告和事后监督为主,提供 ...

随机推荐

  1. mac下nginx搭建

    首先使用brew安装nginx brew install nginx 安装完毕后,如果我们要使用nginx监听本地的80端口,需要改掉mac自带的apache占用的80端口 sudo vim /etc ...

  2. 从零开始学 Web 之 jQuery(八)each,多库共存,包装集,插件

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  3. C#对象内部属性排序测试

    构建对象: class SortGrid { int indexI; int indexJ; public SortGrid(int x, int y) { indexI = x; indexJ = ...

  4. Mysql、MongoDB对比和使用场景

    MongoDB: 更高的写入负载 默认情况下,MongoDB更侧重高数据写入性能,而非事务安全,MongoDB很适合业务系统中有大量“低价值”数据的场景.但是应当避免在高事务安全性的系统中使用Mong ...

  5. netty源码解解析(4.0)-1 核心架构

    netty是java开源社区的一个优秀的网络框架.使用netty,我们可以迅速地开发出稳定,高性能,安全的,扩展性良好的服务器应用程序.netty封装简化了在服务器开发领域的一些有挑战性的问题:jdk ...

  6. FFmpeg内存IO模式(内存区作输入或输出)

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10318145.html 所谓内存IO,在FFmpeg中叫作"buffered ...

  7. XML部分

    XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? 两种形式:DTD以及schema: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展sc ...

  8. php5.5之后新特性整理

    1 生成器 yield关键字yield的中文文档在这里:http://php.net/manual/zh/language.generators.overview.php查看文档,能知道yield的一 ...

  9. JavaScript类继承

    和其他功能一样,ECMAScript 实现继承的方式不止一种.这是因为 JavaScript 中的继承机制并不是明确规定的,而是通过模仿实现的.这意味着所有的继承细节并非完全由解释程序处理.作为开发者 ...

  10. Apache SkyWalking的架构设计【译文】

    Apache SkyWalking提供了一个功能强大并且很轻量级的后端.在此,将介绍为什么采用以下方式来设计它,以及它又是如何工作的. 架构图 对于APM而言,agent或SDKs仅是如何使用libs ...