防火墙基础

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

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

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

防火墙分为两种:

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:处理动作的相关选项;

防火墙规则应用同一子网计算机,防火墙基础(一)相关推荐

  1. windows防火墙规则_如何在Windows防火墙中创建高级防火墙规则

    windows防火墙规则 Windows' built-in firewall hides the ability to create powerful firewall rules. Block p ...

  2. linux防火墙规则端口转换,[转] Linux防火墙iptables初探

    iptables是专为Linux操作系统打造的极其灵活的防火墙工具.对Linux极客玩家和系统管理员来说,iptables非常有用.本文将向你展示如何配置最通用的Linux防火墙. 关于iptable ...

  3. Linux IPTables:如何添加防火墙规则

    摘要:本文介绍了如何使用"iptables -A"命令添加 iptables 防火墙规则. 本文分享自华为云社区<Linux IPTables:如何添加防火墙规则(使用允许 ...

  4. 对linux防火墙规则的优化,Linux防火墙规则优化的研究

    摘要: 随着Internet在全球范围内的迅速发展和广泛应用,在给人们的生活带来方便和快捷的同时,也带来了大量的问题,这其中就包括网络信息安全问题.作为常用的处理网络安全问题的工具,防火墙作用就显得尤 ...

  5. 设置防火墙规则,实现远程桌面连接的限制

    实验介绍 1.  Win7-2虚拟机设置远程桌面连接的限制:只允许特定的IP地址远程连接自己:(win7-2的ip地址:192.168.37.129) 2.  Win2008远程连接win7-2成功( ...

  6. windows防火墙 程序_如何使用Windows防火墙阻止应用程序访问Internet

    windows防火墙 程序 Most of the time we want our applications online and connected to both our local netwo ...

  7. 如何配置linux下的防火墙,如何配置linux下的防火墙?

    1.在Linux系统中查找并打开文2113件以编辑5261和配置防火墙,执行命令.4102:vi/etc/sysconfig/iptables.2.将以下语句添1653加到上面打开的文件中:-AINP ...

  8. 电脑小知识:计算机防火墙到底是什么?能不能阻止黑客的入侵?

    定义 所谓防火墙指的是一个由软件和硬件设备组合而成.在内部网和外部网之间.专用网与公共网之间的界面上构造的保护屏障.是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与 ...

  9. iptables —— Iptables防火墙规则使用梳理

    iptables是组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤.封包重定向和网络地址转换(NAT)等功能 ...

最新文章

  1. 普通程序员和优秀程序员的距离究竟有多大?
  2. php mysql 取最小值_php – 根据另一个值更新最小值 – MySql
  3. kibana java script_Elasticsearch:创建 Runtime field 并在 Kibana 中使用它 - 7.11 发布 - TGCode...
  4. ajax提交数据给谁,jquery ajax提交数据给后端
  5. 5G网络规划解决方案
  6. 将路由器作为AP来使用
  7. Codeforces 39H - Multiplication Table(进制转换)
  8. c++ 中字符串的字符数与字节数
  9. 查看数据是否成功发送到kafka
  10. Bugku_Misc_Licking dog diary
  11. asp_net2_0学习指导 菜鸟到中级程序员的飞跃
  12. 做项目管理,不得不考的证书
  13. 查看数据库(表)的大小(Mysql和Oracle)
  14. 华为强制升级鸿蒙,华为手机升级鸿蒙的方法,有哪位升级成功的吗?
  15. 1.2 Linux环境安装Perl
  16. 用JS点击实现一个跨行/跨列显示的效果
  17. “在线Excel文档编辑系统”新手开发训练营开营啦,完全免费,欲报从速!
  18. aspx repeater 用法_asp.net中repeater控件用法笔记
  19. 计世独家:“枪炮与玫瑰”技术女的另一个我
  20. 面试准备FPGAor数字IC(三)-边沿检测、门控时钟、单双口RAM、亚稳态等

热门文章

  1. Linux如何检查脱域,ZeroLogon的利用以及分析
  2. BIG DATA 神奇的大数据 - Hadoop(Linux)环境搭建与部署
  3. 14.二维数组:什么是二维数组???
  4. 2022暑期项目实训(二)
  5. 你绝对想知道:芝麻信用新域名xin.xin是个什么鬼!
  6. 安装与使用IPy模块
  7. torch.randn()函数
  8. python 最大子序列之和
  9. 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译...
  10. 微软业务生产力平台基础架构优化(BPIO)之企业项目管理(EPM)解决方案