关键词:
防火墙:
IT领域的防火墙:一整套安全隔离工具;
1. 软件防火墙:
应用软件处理逻辑而运行通用硬件实现的防火墙;
iptables/netfilter 包过滤防火墙;
2. 硬件防火墙:
在硬件级别能实现一部分防火墙功能,而另一部分功能依然要基于软件实现;
防火墙的介绍:所谓防火墙,指的是工作于主机或网络的边缘,对于经由防火墙的数据报文根据预先定义的匹配规则(识别条件)进行检测,对于能够被规则匹配到的报文要采取某些预先定义好的处理机制予以处理,而对于没有被规则匹配的报文要设置默认访问控制处理机制的一套组件;
主机防火墙:其安全服务范围仅限于当前某台主机;
网络防火墙:其安全服务范围为当前局域网;
Linux系统中的防火墙的实现:
iptables/netfilter
既可以实现主机防火墙,又可以实现网络防火墙;
netfilter:位于Linux系统内核中的防火墙的框架,Framework,防火墙功能实现的主体;
iptables:专门为netfilter编写数据报文的匹配规则的用户空间中的应用程序工具;
netfilter的逻辑结构:
hook function:
hook_input()
hook_output()
hook_forward()
hook_prerouting()
hook_postrouting()
chain:
INPUT
OUTPUT
FORWARD
PREROUTING
POSTROUTING
table:
filter:过滤器,包过滤防火墙功能;
包含:INPUT、OUTPUT、FORWARD三条链;
nat:用于修改报文的源地址和/或目的地址,而且还可以修改端口号;
地址转换
地址伪装
包含:PREROUTING、POSTROUTING、OUTPUT、INPUT(1.4+版本中新增加)
mangle:拆解报文并对报文格式进行修改,然后再重新封装报文;
流量控制
数据标签
包含:PREROUTING、POSTROUTING、OUTPUT、INPUT、FORWARD五条链;
raw:关闭nat表上启动的连接追踪机制;
包含:PREROUTING、OUTPUT两条链;
各个表中相同规则链上的规则生效优先级次序(从高到低):
raw --> mangle --> nat --> filter
数据报文的流向:
入站数据——目的IP地址为防火墙主机的有效IP地址的数据报文:
PREROUTING --> (Routing table) --> INPUT
出站数据——源IP地址为防火墙主机的有效IP地址的数据报文:
PREROUTING --> (Routing table) --> OUTPUT --> POSTROUTING
转发数据——源、目的IP地址都不是防火墙主机的有效IP地址,且需要经过防火墙转发的数据报文:
PREROUTING --> (Routing table) --> FORWARD --> POSTROUTING
** iptables/netfilter:**
iptables:规则编写工具,非交互式命令行工具,一次只能编写一条规则并送往netfilter执行;
netfilter的规则匹配顺序是:首项匹配;
首项匹配:由上至下依次匹配每条规则,且只要有规则能够匹配数据报文,则不再继续检索其他匹配规则;
** iptables命令:**
规则编写工具:
规则:
也称为匹配规则或识别条件,根据要求定义的用来匹配进入、流出或经过本机的报文的匹配条件,并且在匹配之后指明具体的处理机制;
简单来说,规则 = 匹配条件 + 处理动作
匹配条件:
基本匹配条件:
简单的IP、TCP、UDP等协议的报文首部中特定属性的匹配条件;
扩展匹配条件:
需要借助于扩展的功能模块进行匹配的机制;
隐式扩展:
不明确的指出使用哪个具体的模块,但实际上确实在使用扩展模块来完成条件匹配;
显式扩展:
必须要明确指出此次使用哪个具体模块来完成条件匹配;
处理动作:
基本动作:
即包过滤的动作:
ACCEPT,DROP,REJECT
扩展动作:
需要借助于扩展模块才能执行的处理动作;
注意:想要添加正确合适的规则,需要事先考虑如下几个问题:
1.数据报文的流经路径,已确定将规则添加至正确的表的正确链上;
2.确定此次规则实现的功能,以选择正确的表;
3.确定具体的匹配条件的内容,以便用于匹配感兴趣的数据;
4.确定链的默认匹配条件和执行动作;
** iptables命令:**
iptables/ip6tables — administration tool for IPv4/IPv6 packet filtering and NAT
格式:
iptables [-t table] -A|-C|-D chain rule-specification
iptables [-t table] -I chain [rulenum] rule-specification
iptables [-t table] -R chain rulenum rule-specification
iptables [-t table] -D chain rulenum
iptables [-t table] -S [chain [rulenum]]
iptables [-t table] -F|-L|-Z [chain [rulenum]] [options...]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target
iptables [-t table] -E old-chain-name new-chain-name
rule-specification = [matches...] [target]
match = -m matchname [per-match-options]
target = -j targetname [per-target-options]
iptables规则编写的通用格式:
iptables [-t table] COMMAND CHAIN [-m matchname] [per-match-options] -j targetname [per-target-options]
说明:
-t table:指定选择执行哪个表的功能,可以选择的表包括:raw,mangle,nat及filter,如果省略此选项,则表示使用默认表——filter表;
-m matchname:通常是配置显式扩展的匹配条件时,必须书写;如果省略则表示要配置基本匹配条件或隐式扩展匹配条件;
-j targetname:指定所有匹配条件的数据包的处理动作;
COMMAND:
链的操作命令;
-P, --policy chain target
用于定义指定链的默认策略;通常有两种动作选择,即:ACCEPT和DROP;
-N, --new-chain chain
创建一条新的自定义的规则链;新建的链上的规则必须要被内建链上的规则调用才能生效;
-X, --delete-chain [chain]
删除被内建链调用次数为0的自定义链;
-E, --rename-chain old-chain new-chain
重命名被内建链调用次数为0的自定义链;
-F, --flush [chain]
清除指定链(表中所有链)上的规则;
规则的操作命令:
-A, --append chain rule-specification
在指定的链的末尾追加一条规则;
-D, --delete chain rule-specification
-D, --delete chain rulenum
从指定的链上删除一条规则,可以指明具体规则,也可以指明规则在链上的编号;
-I, --insert chain [rulenum] rule-specification
在指定的链上插入一条规则,默认是将新规则插入至链的第一条规则,也可以指定规则编号,是的插入的规则称为指定链上的第rulenum条规则;
-R, --replace chain rulenum rule-specification
用命令行中的规则替换指令链上的第rulenum条规则;并不是修改规则中某个具体条件,而是完全替换整条规则;
-L, --list [chain]
列表显示指定表指定链(所有链)上的所有规则;
可以使用的其他常用选项:
-v, --verbose:显示更详细格式的信息,还有-vv;
-n, --numeric:将规则中的所有信息都进行数字化显示;包括主机名和端口号等信息;
-x, --exact:精确的显示计数器的结果;
每个规则都有两个计数器:
1.规则所匹配的报文的个数;
2.规则所匹配的报文的字节总数;
--line-numbers:显示指定链上各个规则的编号;
其他的命令:
-Z, --zero [chain [rulenum]]
将指定链的规则计数器置0;
常用的TARGETS:
LOG:对于匹配的数据报文的流动情况进行日志记录,并不会影响数据报文本身的传输;
MARK:对于匹配的数据报文进行防火墙标记的设置;
MASQUERADE:源地址伪装,一种特殊的源IP地址转换;
REDIRECT:目标IP地址和端口的重定向;
REJECT:阻止数据报文传输并向数据报文的源头返回消息;
SNAT:源IP地址转换;
DNAT:目标IP地址转换;
ACCEPT:对于匹配的数据报文进行放行;
DROP:对于匹配的数据报文进行阻止;
RETURN:在规则链之间跳转;
匹配条件:
默认情况下,同一条命令中的不同条件之间存在逻辑"与"的关系;
!:对于匹配的结果取反,有除了...之外的意思;
基本匹配条件:
[!] -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
检查数据报文出站的接口是否能够被此条件所匹配;
扩展匹配条件:
隐式扩展匹配条件:
[!] -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) 建议尽量不修改链的默认策略为阻止所有数据,如果想要设置阻止所有数据的规则,在链的最后一条设置阻止所有数据的规则即可;
** 注意**:凡是通过FORWARD链来设置的网络防火墙的匹配规则,必须成对出现;即,数据的往返过程必须同时被放行,才能保证路由功能的正常进行;
**显式扩展匹配条件:**
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]...
--dports 22,80,3306 -j ACCEPT
示例:
~]# iptables -I FORWARD -s 192.168.100.100 -d 172.16.69.2 -p tcp -m multiport --dports 22,80,3306 -j ACCEPT
~]# iptables -I FORWARD -d 192.168.100.100 -s 172.16.69.2 -p tcp -m multiport --sports 22,80,3306 -j ACCEPT
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.69.2 -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.69.2 -p tcp -m multiport --sports 22,80,3306 -j ACCEPT
3.string扩展:
对数据报文中的应用层数据做字符串匹配检测;
相关选项:
--algo bm|kmp
--string "STRING"
示例:
~]# iptables -I FORWARD -s 172.16.69.2 -m string --algo bm --string "dafa" -j REJECT
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 17:59:59 ! --weekdays 6,7 -o eno16777736 -j REJECT
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*
利用连接追踪设置FTP服务器的访问控制:
~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
~]# iptables -A INPUT -d 172.16.69.2 -p tcp -m multiport --dports 21,22,80,3306 -m state --state NEW -j ACCEPT
~]# iptables -A INPUT -j DROP
注意:需要装载nf_conntrack_ftp内核模块;
~]# modprobe nv_conntrack_ftp
设置nf_conntrack_ftp模块的自动装载:
设置/etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_conntrack_ftp"
利用连接追踪可以设置OUTPUT链上的通用规则:
~]# iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
~]# iptables -A OUTPUT -j DROP
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
初始时所能接收的数据报文的最大数量;
centos7配置iptables规则(代码片段)
iptables,是Linux下自带的一款免费的基于包过滤的防火墙工具,可以对流入、流出、流经服务的数据包进行精细的控制,而在centos7中将iptables给取消掉了,我们需要自行安装,下面介绍iptables的安装及使用。 一、安装ipt... 查看详情
llinux防火墙(selinux防火墙firewalldnetfilter(iptables))及iptables规则备份和恢复(代码片段)
selinux防火墙getenforce查看防火墙状态setenforce0临时关闭(0关闭1开启)#状态enforcing:强制模式,代表SELinux运作中,且已经正确的开始限制domain/type了;permissive:宽容模式:代表SELinux运作中,不过仅会有警告讯息并不会实际限制dom... 查看详情
linux----------防火墙(代码片段)
目录一、防火墙概念1.1安全技术1.2防火墙1.2.1网络层防火墙1.2.2应用层防火墙1.3防火墙工具二、iptables2.1iptables的组件2.2iptables组成2.2.1四个表t2.2.2五个内置链chain2.2.3iptables规则2.3iptables工作原理2.4iptables命令2.4.1iptables语法格式2.5ipta... 查看详情
iptables设置用法(代码片段)
1.安装iptables防火墙怎么知道系统是否安装了iptables?执行一下iptables-V,如果现实版本信息那说明已经安装了。反之则需要安装,执行命令:yuminstalliptables在linux中设置防火墙,以CentOS为例,打开iptables的配置文件:vim/etc/sysconfig/i... 查看详情
解析iptables原里及设置规则(代码片段)
...配置,才能在实际过程中出了问题能有效的排除网络防火墙等原因,iptables就是系统里的防火墙,所有数据的进入都是要经过iptables符合其一定的规则才能流入或流出。本文就是针对对iptables了解不多,需要知道其... 查看详情
iptables__防火墙(代码片段)
iptables防火墙一.iptables概述二.netfileter/iptables关系三.四表五链1.四表2.五链3.数据包到达防火墙,规则表之间的优先顺序:4.规则链之间的匹配顺序主机型防火墙:网络型防火墙:规则链内的匹配顺序:四.iptables... 查看详情
iptables防火墙(代码片段)
防火墙的几个知识点1、防火墙的概念2、iptables的基本认识3、iptables的组成4、iptables的基本语法5、iptables之forward的概念6、iptables之地址转换法则7、SNAT源地址转换的具体实现8、DNAT目标地址转换的具体实现9、firewalld介绍10、firewalld... 查看详情
centos7防火墙使用命令(代码片段)
firewalld和iptables的关系firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和iptables一样,他们的作用都是用于维护规则,而真正使用s规则干活的是内核的netfilter只不过firewalld和ip... 查看详情
linux命令(215)——iptables命令(代码片段)
...过滤和NAT的管理工具。iptables/ip6tables命令是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。iptables/ip6tables均是xtables-mu 查看详情
iptables教程(代码片段)
iptables是一个配置Linux内核防火墙的命令行工具。初学者刚看到iptables,会感到很复杂,原因是iptables功能实在是太强大了。本文会从基本概念、使用上做介绍,读者看完后再去看iptables命令就能理解其含义了。本文环境:PC:Ubuntu18... 查看详情
iptables的备份及脚本构成
...inux中,iptables为我们提供了批量备份与恢复规则的命令,防火墙脚本实际上是一个shell脚本程序,便于使用shell变量、程序控制逻辑,在需要重用、移植使用时会非常方便,只需修改下变量值就可使用iptables的备份及还原 ... 查看详情
iptables(代码片段)
防火墙RHEL6操作系统防火墙服务iptablesiptables的组成:内核态:集成在内核里的功能用户态:安装服务的软件包后提供的管理命令[[email protected]~]#rpm-qiptablesiptables-1.4.7-16.el6.x86_64]#serviceiptablesstart|status|stop]#chkconfigiptableson]#whichi 查看详情
linux命令(215)——iptables命令(代码片段)
...过滤和NAT的管理工具。iptables/ip6tables命令是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。iptables/ip6tables均是xtables-multi的软链。2.命令格式iptables[-ttable]-A|-C|-Dchain... 查看详情
linuxiptables:如何添加防火墙规则(代码片段)
...要:本文介绍了如何使用“iptables-A”命令添加iptables防火墙规则。本文分享自华为云社区《LinuxIPTables:如何添加防火墙规则(使用允许SSH示例)》,作者:Tiamo_T。本文介绍了如何使用“iptables-A”命令添加... 查看详情
centos初步学习记录iptables(代码片段)
...iptables中文名:IP信息包过滤系统,它是一个配置Linux内核防火墙的命令行工具,是netfilter项目的一部分。术语iptables也经常代指该内核级防火墙。iptables可以直接配置,也可以通过许多前端和图形界面配置。iptables用于ipv4,ip6table... 查看详情
iptables(代码片段)
iptables介绍netfilter-->iptables防火墙名字是netfilteriptables是命令1.filter(过滤包,用的最多的,)内建三个链:1.INPUT作用于进入本机的包2.OUTPUT作用于本机送出的包3.FORWARD作用于那些跟本机无关的包2.nat(主要用处是网络地址转换)3.man... 查看详情
iptables防火墙(代码片段)
...可能不给服务器配置外网IP,可以通过代理转发或者通过防火墙映射。并发不是特别大情况有外网IP,可以开启防火墙服务。大并发的情况,不能开iptables,影响性能,利用硬件防火墙提升架构安全。iptables防火墙概念介绍Netfilter/... 查看详情
linux(三十三)iptables防火墙(代码片段)
目录 一、概述1.1.为什么要使用防火墙 1.2.两种防火墙的介绍1.3.包过滤的工作层次1.4.iptables的四表五链1.4.1.四表1.4.2.五链1.5.数据传输过程1.5.1.概要叙述1.5.2.数据包的匹配流程二、基础命令2.1.准备工作2.2.基础语法2.2.1.语法结... 查看详情