防火墙基础(一)

防火墙基础

防火墙:一套安全隔离工具;

工作在网络边缘,对经过防火墙的数据报文,根据预先定义的匹配规则进行检测,如果能匹配,用预先定义好的处理机制进行处理,

如果不匹配,则用默认的处理机制进行处理的一套安全组件;

防火墙分为两种:

1)软件防火墙:

应用软件处理逻辑利用硬件实现的安全隔离;

2)硬件防火墙:

利用硬件实现安全隔离;

根据服务范围,防火墙分为两种:

1)主机防火墙:

工作在当前主机

2)网络防火墙

工作在当前局域网

Linux中防火墙的实现依赖:iptables/netfilter

功能:      实现主机防火墙和网络防火墙

netfilter:   位于Linux内核中的防火墙框架,防火墙功能实现的主体是framework;

iptables: 客户端工具,为netfilter编写数据报文的规则;

防火墙的基础概念:

netfilter的逻辑结构:

1.hook  function:钩子函数

hook_input()

hook_output()

hook_forward()

hook_prerouting()

hook_postrouting()

clain :      规则链,与钩子函数一一对应

input

output

forward

prerouting

postrouting

table:   表——多条链的组合

filter  :由input,output,forward三条链组成;

功能:  实现过滤功能,对入站,出站,转发的数据报文进行过滤;

nat    :   由input,output,prerouting,postrouting四条链组成

功能:  用于修改报文的源地址和目的地址,实现地址伪装和地址转换

mangle: 由所有链组成

功能:   拆解报文修改首部格式,进行再封装,可实现数据标签和流量控制

raw   :   由prerouting,output链组成;

功能:关闭nat表上启动的连接追踪机制;

注意:   同一条链在不同表上的优先级不同,由低到高依此是filter-nat-mangle-raw

数据报文的流向:

1.入站数据:目的地址为防火墙主机的数据报文;

prerouting---routing table---input

2.出站数据:源地址为防火墙主机的数据报文

prerouting---routing table---output---postrouting

3.转发数据:源地址和目的地址不是防火墙主机,但需要经过防火墙主机的数据报文

prerouting---routing table---forward---postrouting

使用iptables命令编写规则

根据定义用来匹配入站,出站的数据报文的匹配条件,匹配后指明处理动作;

规则组成:匹配条件+处理动作

匹配条件分为

1.基础匹配条件:

简单的IP,tcp,udp,icmp等协议报文首部中特定属性的匹配条件

2.扩展匹配条件:借助扩展模块进行匹配的机制

1): 隐式扩展

不明确指出使用哪个模块,实际已经使用

2): 显示扩展

指明使用哪个模块进行条件匹配

处理动作:

ACCEPT:接受报文

DROP   :丢弃报文

REJECT : 弹回报文

LOG:对于匹配的数据报文的流动情况进行日志记录,并不会影响数据报文本身的传输;
                                                           MARK:对于匹配的数据报文进行防火墙标记的设置;
                                                           MASQUERADE:源地址伪装,一种特殊的源IP地址转换;
                                                           REDIRECT:目标IP地址和端口的重定向;
                                                           REJECT:阻止数据报文传输并向数据报文的源头返回消息;
                                                           SNAT:源IP地址转换;
                                                           DNAT:目标IP地址转换;

注意: 若想正确的添加规则,需考虑:

1.数据报文的流经路径,将规则添加至相应表的相应链上

2.确定要实现的功能,选择正确的表

3.确定具体的匹配条件内容

4.设置链的默认匹配规则;

iptables命令:

通用规则:

iptables  [-t  table]  COMMAND  CHAIN  [-m matchname]   [per-match-options]  -j targetname  [per-targement-options]

-t table : 指定表,filter,nat,mangle,raw

COMMAND: 链的操作命令

-P: 指定链的默认策略,通常由ACCEPT,DROP

] # iptables  -t filetr -P  input -j ACCEPT(默认允许filter表的input链上的报文通过)

] # iptables  -t filetr -P  output -j ACCEPT(默认丢弃filter表的input链上的报文)

-N:  --new chain chain:自定义一条规则链

] # iptables -N pass(自定义一条名为pass的链)

-X:--delete-chain [chain]:删除被内建链调用次数为0的自定义链

-F: --flush [chain]

] # iptables -F :清空所有链的规则

] # iptables -F  input:清空input链上的所有规则

-E: --rename-chain  old-cahin new-chain

] # iptables  -E  pass  PASS:将自定义链pass改名为PASS

给链添加规则的命令:

-A, --append chain rule-specification
                                                   在指定的链的末尾追加一条规则;

] # iptables  -A  INPUT -s 172.16.1.11 -p  tcp --dports  80  -j  ACCEPT (允许172.16.1.11主机访问本机的web资源)

-D, --delete chain rule-specification
                                           -D, --delete chain rulenum
                                                 从指定的链上删除一条规则,可以指明具体规则,也可以指明规则在链上的编号;

] # iptables  -D  INPUT  1(删除INPUT链上的第二条规则)

-I, --insert chain [rulenum] rule-specification
                                                在指定的链上插入一条规则,默认是将新规则插入至链的第一条规则,也可以指定规则编号,是的插入的规则称为指定链上的第rulenum条规则;

] # iptables -I INPUT  -s 172.16.1.11 -p  tcp --dports  80  -j  ACCEPT (在INPUT链上插入一条规则允许172.16.1.11主机访问本机的web资源)

-R, --replace chain rulenum rule-specification
                                                用命令行中的规则替换指令链上的第rulenum条规则;并不是修改规则中某个具体条件,而是完全替换整条规则;

] # iptables -R INPUT  2 -j  REJECT (将IPNPUT链上的第二条规则替换为弹回)

-L, --list [chain]
                                                列表显示指定表指定链(所有链)上的所有规则;
                                               可以使用的其他常用选项:
                                             -v, --verbose:显示更详细格式的信息,还有-vv;
                                             -n, --numeric:将规则中的所有信息都进行数字化显示;包括主机名和端口号等信息;
                                             -x, --exact:精确的显示计数器的结果;
                                                                每个规则都有两个计数器:
                                                                      1.规则所匹配的报文的个数;
                                                                      2.规则所匹配的报文的字节总数;
                                             --line-numbers:显示指定链上各个规则的编号;

] # iptables -vnL  (列出所有表所有链上的所有规则)

] # iptables -vnL  INPUT (列出INPUT链上的所有规则)

] # iptables -vnL  --line-numbers  INPUT (列出INPUT链上的所有规则及对应的编号)

其他的命令:
                                        -Z, --zero [chain [rulenum]]
                                              将指定链的规则计数器置0;

-m  matchname: 扩展模块

1.multiport扩展模块:
                                                      一次性的写入多个离散端口或多组连续端口,最大的上限15组端口,每一个端口范围占用两个端口;
                                                      可以支持的协议:tcp, udp, udplite, dccp, sctp.
                                               相关选项:
                                                       [!] --source-ports,--sports port[,port|,port:port]...
                                                       [!] --destination-ports,--dports port[,port|,port:port]...
                                                       [!] --ports port[,port|,port:port]...

] # iptables -A  INPUT  -s  172.16.1.11  -p  tcp  -m multiport  --dports  22,80,3306  -j  ACCEPT

(允许172.16.1.11主机访问本机的ssh服务,web服务,mysql服务)

2.iprange扩展模块:

以连续的任意数量的IP地址访问作为匹配条件;
                                               相关选项:
                                                       [!] --src-range from[-to]
                                                       [!] --dst-range from[-to]

-m iprange --src-range 192.168.100.1-192.168.100.100
                                                       ~]# iptables -I FORWARD -m iprange --src-range 192.168.100.1-192.168.100.100 -d 172.16.1.11 -p tcp -m multiport --dports 22,80,3306 -j ACCEPT
                                                       ~]# iptables -I FORWARD -m iprange --dst-range 192.168.100.1-192.168.100.100 -s 172.16.1.11-p tcp -m multiport --sports 22,80,3306 -j ACCEPT

(对源地址段为192.168.100.1到192.168.100.100范围内的主机向172.16.1.11主机访问ssh服务,web服务,mysql服务进行请求的报文进行转发)

3.string扩展模块

对数据报文中的应用层数据做字符串匹配检测;
                                               相关选项:
                                                      --algo {bm|kmp}
                                                     --string "STRING"
                                                      ~]# iptables -I FORWARD -s 172.16.1.11 -m string --algo bm --string "mysql" -j REJECT

(反弹源地址为172.16.1.11主机请求web资源中带有“mysql”的报文)

4.time扩展模块

根据报文到达防火墙本机的时间与指定的时间范围进行匹配检测;
                                              相关选项:
                                                     --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
                                                     --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
                                                      定义唯一一个绝对的时间范围;

--timestart hh:mm[:ss]
                                                     --timestop hh:mm[:ss]
                                                       定义一个周期性的时间范围;

[!] --monthdays day[,day...]
                                                       定义每个月中各个天;取值1-31

[!] --weekdays day[,day...]
                                                      定义每个星期中的星期几;
                                                     取值:Mon, Tue, Wed, Thu, Fri, Sat, Sun, or values from 1 to 7, or Mo, Tu, etc. 
                                                     ~]# iptables -I FORWARD -m time --timestart 08:00:00 --timestop 18:00:00 ! --weekdays 6,7 -o ens33 -j REJECT

(从周一到周五早上8点到下午6点不允许通过ens33接口访问外部网络)

5.state扩展模块

连接状态检测;基于连接追踪机制实现;
                                                      conntrack

相关选项:
                                                   [!] --state state

iptables对连接状态的定义:
                                                   INVALID, ESTABLISHED, NEW, RELATED or UNTRACKED;

INVALID:无法识别的连接状态,无效的通信状态; SYN,FIN
                                                  ESTABLISHED:已经建立连接的状态;连接态;
                                                  NEW:尚未建立连接的状态;新连接态;
                                                  RELATED:与其他已经建立的连接有相互关联的连接状态;关联态或衍生态;
                                                  UNTRACKED:未追踪的状态;

内核中用于保存连接追踪状态数据的位置:/proc/net/nf_conntrack

能够被追踪到的最大的连接数:/proc/sys/net/nf_conntrack_max
                                                 注意:此处记录的最大连接数的数值,建议必要时可以调整其大小到足够大;

为了能够尽可能的高效利用内存资源,缓存的连接追踪的状态不能无限期保存,因此设置了相应的超时时间;
                                                /proc/sys/net/netfilter/nf_conntrack*timeout*

6.mac扩展模块

实现mac地址匹配检测;用于PREROUTING, FORWARD or INPUT链;

相关选项
                                               [!] --mac-source address
                                                 匹配源mac地址;其形式必须是:XX:XX:XX:XX:XX:XX

7.connlimit扩展模块

根据每个客户端IP地址做并发连接数的匹配检测;
                            
                                            相关选项:
                                              --connlimit-upto n
                                                 当客户端当前的并发连接数小于或等于n时,可以匹配此条件;此条件通常和ACCEPT动作配合使用;

--connlimit-above n
                                                 当客户端当前的并发连接数大于n时,可以匹配此条件;此条件通常和DROP或REJECT动作配合使用;

8.limit扩展模块

基于服务器端收发数据报文的速率来进行匹配检测;

相关选项:
                                            --limit rate[/second|/minute|/hour|/day]
                                              服务器端最大单位时间内能够接收的报文速率;

--limit-burst number
                                             初始时所能接收的数据报文的最大数量;

~]# iptables -I INPUT 1 -p icmp --icmp-type 8 -m limit --limit 15/minute --limit-burst 8 -j ACCEPT

per-match-options:匹配条件

基本匹配条件:
                                             [!] -s, --source address[/mask][,...]
                                                 检查数据报文中的源IP地址的匹配范围;可以是单个的IP地址,也可以是子网,主网,超网等IP地址设定;0.0.0.0/0表示整个IP地址栈中所有的IP地址;

如果省略该条件,意味着将匹 配所有的源IP地址;
                                            [!] -d, --destination address[/mask][,...]
                                                 检查数据报文中的目标IP地址的匹配范围;可以是单个的IP地址,也可以是子网,主网,超网等IP地址设定;0.0.0.0/0表示整个IP地址栈中所有的IP地址;

如果省略该条件,意味着将匹配所有的目标IP地址;
                                            [!] -i, --in-interface name
                                                 检查数据报文入站的接口是否能够被此条件所匹配;
                                            [!] -o, --out-interface name
                                                检查数据报文出站的接口是否能够被此条件所匹配;

扩展匹配条件:

1)  隐式扩展匹配条件:
                                                     [!] -p, --protocol protocol
                                                     [!] -p, [-m matchname] --protocol protocol
                                                           检查数据报文某指定的协议的封装首部中是否有符合条件的特性或字段;

可以在此处指定的协议包括:
                                                    tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp, mh, all

tcp协议(tcp模块):
                                                         [!] --source-port,--sport port[:port]
                                                         [!] --destination-port,--dport port[:port]
                                                            用于指定源端口和/或目标端口的匹配条件;每次只能指定一个端口或一组连续的端口范围,而不能指定离散端口;

[!] --tcp-flags mask comp
                                                         用于指定在TCP协议首部中各标志位的匹配条件;
                                                         URG, SYN, RST, PSH, ACK, FIN, ALL, NONE

mask:设定要检测的标志位的列表,各标志位之间使用","进行分隔;

comp:必须被置"1"的标志位列表,剩余的在mask列表中的标志位必须置"0";
                                                        [!] --syn
                                                       相当于:--tcp-flags SYN,RST,ACK,FIN SYN

udp协议(udp模块):
                                                        [!] --source-port,--sport port[:port]
                                                        [!] --destination-port,--dport port[:port]
                                                         用于指定源端口和/或目标端口的匹配条件;每次只能指定一个端口或一组连续的端口范围,而不能指定离散端口;

icmp协议(icmp模块):
                                                        [!] --icmp-type {type[/code]|typename}
                                                          常用的icmp-type:
                                                          echo-request,代码为8;
                                                          echo-reply,代码为0;

定义规则时的注意事项:
                                                                1.规则的匹配顺序是由上至下按书写顺序进行匹配:
                                                                        1) 同一类规则,匹配范围最小的应该写在最上面;
                                                                        2) 非同一类的规则,匹配频率越高的应该写在上面;
                                                                        3) 建议尽量不修改链的默认策略为阻止所有数据,如果想要设置阻止所有数据的规则,在链的最后一条设置阻止所有数据的规则即可;

- j  targetment:指定符合匹配条件的数据报文的处理动作

通常有ACCEPT,DROP,REJECT

per-target-options:处理动作的相关选项;

原文地址:http://blog.51cto.com/yuantianchi/2120434

时间: 2024-11-08 13:26:07

防火墙基础(一)的相关文章

Linux防火墙基础知识及配置

Linux防火墙基础知识 Linux的防火墙正确的来说并不算是防火墙,只是一种防火墙的功能体现.我们现在来讲解下Linux的这个防火墙功能的详细解释. Linux的防火墙是由iptables与netfilter两个程序组成的,而iptables是一个单独的程序,netfilter是集成到内核中的一个程序,两个程序合作才能拥有完整的防火墙功能. Iptables的功能是向netfiler提供规则,netfilter则是将规则执行起来. Linux防火墙还分为主机防火墙与网络防火墙. 主机防火墙:工

Linux防火墙基础与编写防火墙规则

Iptables采用了表和链的分层结构,每个规则表相当于内核空间的一个容器,根据规则集的不同用途划分为默认的四个表,raw表,mangle表,nat表,filter表,每个表容器内包括不同的规则链,根据处理数据包的不同时机划分为五种链,而决定是否过滤或处理数据包的各种规则,按先后顺序存放在各规则链中. 1.防火墙:内核中具有包过滤体系 内核态:netfilter 用户态:iptables  管理工具 工作在网络层:可以对ip地址.端口.协议等信息进行处理 2.规则链:规则的集合 五种链:(必须大

Yeslab 华为安全HCIE七门之-防火墙基础(12篇)

Yeslab 全套华为安全HCIE七门之第二门防火墙基础(12篇),第一门课论坛很早就有了,可自行下载,后面的陆续分享给大家. 华为安全HCIE-第二门-防火墙基础(12篇)\1_网络安全简述.avi华为安全HCIE-第二门-防火墙基础(12篇)\2_华为安全认证体系及相关产品介绍.avi华为安全HCIE-第二门-防火墙基础(12篇)\3_防火墙互联技术.avi华为安全HCIE-第二门-防火墙基础(12篇)\4_防火墙初始化配置.avi华为安全HCIE-第二门-防火墙基础(12篇)\5_安全策略

Fiewalld防火墙基础(一)

Fiewalld防火墙基础 1.Fiewalld概述 2.Fiewalld和iptables的关系 3.Fiewalld网络区域 4.Fiewalld防火墙的配置方法 5.Fiewalld-config图形工具 6.Fiewalld防火墙案例 Fiewalld概述 Fiewalld简介 1.支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具 2.支持IPv4.IPv6防火墙设置以及以太网桥 3.支持服务或应用程序直接添加防火墙规则接口 4.拥有两种配置模式:运行时配置.永久配置 基

Centos 7防火墙基础——理论篇

Centos 7防火墙基础--理论篇 理论结构: Firewalld概述 Firewalld和iptables的关系 Firewalld网络区域 Firewalld防火墙的配置方法 Firewalld概述 支持网络区域所定义的网络连接以及接口安全等级的动态防火墙管理工具 支持IPV4.IPV6防火墙设置以及以太网桥 支持服务或应用程序直接添加防火墙规则接口 拥有两种不同的配置模式 运行时配置 永久配置 Firewalld和iptables的关系 netfilter ? 位于Linux内核的过滤的

iptables防火墙基础

一.iptables基础: 1.了解iptables防火墙. (1)iptables的表:按照功能的不同表分为raw(状态跟踪).mangle(标记).nat(地址修改).filter(过滤). (2)iptables规则链:按照不同时机链分为INPUT(入站).OUTPUT(出站).FORWARD(转发).PREROUTING(路由前).POSTROUTING(路由后): 在链中存放规则: filter: INPUT/FORWARD/OUTPUT nat: PREROUTING/POSTROU

深入研究iptables防火墙基础

防伪码:没有比脚更长的路,没有比人更高的山 第十章 iptables防火墙(一) 前言:我们在以前学习过asa防火墙,对防火墙有一定的了解,那么iptables和asa防火墙类似,作用一样,都是为了保证网络安全,系统安全,服务器的安全,和asa一样也需要建立策略,个人觉得比asa的策略要繁琐一点,但"只要功夫深铁杵磨成针". 一.基础概念 1.iptables表.链结构 a.规则表 表的作用:容纳各种规则链 表的划分依据:防火墙规则的作用相似 默认包括4个规则表 raw表:确定是否对该

防火墙基础知识

防火墙概念 隔离功能,工作在网络或主机边缘,对进出网络或主机的 数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一 组功能的组件,基本上的实现都是默认情况下关闭所有的通过型访问,只开放允 许访问的策略 工作特性(防火墙默认放行两种类型的数据包): 1.企业内网中的主机向外网发送的请求数据包 2.外网主机对内网主机的请求进行响应的数据包 防火墙种类 主机防火墙 网络层防火墙 通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议 状态等因素,或他们的组合来确定是否允许该数

SRX防火墙基础介绍(system层级配置)

Juniper SRX采用Junos操作系统,简单介绍Junos的基础操作命令:set: 建立一个配置(set system hostname srx-test):delete:删除一个配置(delete system hostname srx-test):commit: 建立,删除,修改配置都需要保存配置,使生效:commit check: 检测候选配置的合法性:show | compare: 查看当前配置与激活配置的区别: system层级,用于配置防火墙系统配置,在系统配置中涉及用户,远程