标签:filter 数字 request lte 严格 过滤 ali 定时 rename
参考: iptables概念
https://www.cnblogs.com/metoy/p/4320813.html
https://blog.csdn.net/fuzhongfaya/article/details/82022181
linux的防火墙由netfilter和iptables组成。用户空间的iptables制定防火墙规则,内核空间的netfilter实现防火墙功能。
netfilter(内核空间)位于Linux内核中的包过滤防火墙功能体系,称为Linux防火墙的“内核态”。
iptables(用户空间)位于/sbin/iptables,是用来管理防火墙的命令的工具,为防火墙体系提供过滤规则/策略,决定如何过滤或处理到达防火墙主机的数据包,称为Linux防火墙的“用户态”。
① 当一个用户数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
② 如果数据包就是进入本机的,它就会沿着图向上移动,到达INPUT链。数据包到了INPUT链后,就可以进入用户空间实现对网站的访问。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。
所以根据上图,我们就能想象出某些常用场景中报文的流向:
到本机某进程的报文: PREROUTING---->INPUT
由本机转发的报文: PREROUTING--->FORWARD----->POSTROUTING
由本机某进程发出的报文(通常为响应报文): OUTPUT------->POSTROUTING
用户空间的iptables制定相应的规则策略控制内核空间的netfilter处理相应的数据访问控制。
iptables有四表五链(其实有五表,是后来加进来的),四表分别是下图的的raw,mangle,nat,filter表。五链分别是PREROUTING,INPUT,OUTPUT,FORWARD,POSTROUTING链。表有什么用?链又有什么用呢?其实表决定了数据报文处理的方式,而链则决定了数据报文的流经哪些位置。
你可以从图中看出规则表的优先级:raw-->mangle-->nat-->filter。
表:
我们把具有相同功能的规则的集合叫做"表".所以不同功能的规则可以放在不同的表中管理.表决定了数据报文处理的方式.
链:
链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一 条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。
表与链的关系:
规则表:
1.filter 表中的规则可以被哪些链使用: INPUT、FORWARD、OUTPUT
作用:过滤数据包 内核模块:iptables_filter.
2.Nat表 表中的规则可以被哪些链使用:PREROUTING、POSTROUTING、OUTPUT
作用:用于网络地址转换(IP、端口) 内核模块:iptable_nat
3.Mangle表 表中的规则可以被哪些链使用:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptable_mangle(别看这个表这么麻烦,咱们设置策略时几乎都不会用到它)
4.Raw表 表中的规则可以被哪些链使用:OUTPUT、PREROUTING
作用:决定数据包是否被状态跟踪机制处理 内核模块:iptable_raw
(这个是REHL4没有的,不过不用怕,用的不多)
规则链:
1.INPUT——进来的数据包应用此规则链中的策略
2.OUTPUT——外出的数据包应用此规则链中的策略
3.FORWARD——转发数据包时应用此规则链中的策略
4.PREROUTING——对数据包作路由选择前应用此链中的规则
(记住!所有的数据包进来的时侯都先由这个链处理)
5.POSTROUTING——对数据包作路由选择后应用此链中的规则
(所有的数据包出来的时侯都先由这个链处理)
四表的介绍如图(ps:由于现在有五表了,所以我把另一个表也加了进来)。
五链的介绍如图。
制作防火墙规则通常有两种基本策略。一是黑名单策略;二是白名单策略。
黑名单策略指没有被拒绝的流量都可以通过,这种策略下管理员必须针对每一种新出现的攻击,制定新的规则,因此不推荐。
白名单策略指没有被允许的流量都要拒绝,这种策略比较保守,根据需要,逐渐开放,目前一般都采用白名单策略,推荐。
牢记下图配置iptables.
(1)选择一张表(此表决定了数据报文处理的方式)
(2)选择一条链(此链决定了数据报文的流经哪些位置)
(3)选择合适的条件(此条件决定了对数据报文做何种条件匹配)
(4)选择处理数据报文的动作,制定相应的防火墙规则。
结构:
iptables [ -t 表名 ] 管理选项 [ 链名 ] [ 条件匹配 ] [ -j 目标动作或跳转 ]
几个注意事项:
不指定表名时,默认表示filter表,不指定链名时,默认表示该表内所有链,除非设置规则链的缺省策略,否则需要指定匹配条件。
3.1 管理选项
链管理
-N, --new-chain chain:新建一个自定义的规则链; -X, --delete-chain [chain]:删除用户自定义的引用计数为0的空链; -F, --flush [chain]:清空指定的规则链上的规则; -E, --rename-chain old-chain new-chain:重命名链; -Z, --zero [chain [rulenum]]:置零计数器; 注意:每个规则都有两个计数器 packets:被本规则所匹配到的所有报文的个数; bytes:被本规则所匹配到的所有报文的大小之和; -P, --policy chain target 制定链表的策略(ACCEPT|DROP|REJECT)
规则管理
-A, --append chain rule-specification:追加新规则于指定链的尾部; -I, --insert chain [rulenum] rule-specification:插入新规则于指定链的指定位置,默认为首部; -R, --replace chain rulenum rule-specification:替换指定的规则为新的规则; -D, --delete chain rulenum:根据规则编号删除规则; -D, --delete chain rule-specification:根据规则本身删除规则;
规则显示
-L, --list [chain]:列出规则; -v, --verbose:详细信息; -vv 更详细的信息 -n, --numeric:数字格式显示主机地址和端口号; -x, --exact:显示计数器的精确值,而非圆整后的数据; --line-numbers:列出规则时,显示其在链上的相应的编号; -S, --list-rules [chain]:显示指定链的所有规则;
3.2 条件匹配
条件匹配分为基本匹配和扩展匹配,扩展匹配又分为显示匹配和隐式匹配。
基本匹配的特点是:无需加载扩展模块,匹配规则生效;扩展匹配的特点是:需要加载扩展模块,匹配规则方可生效。
隐式匹配的特点:使用-p选项指明协议时,无需再同时使用-m选项指明扩展模块以及不需要手动加载扩展模块;
显示匹配的特点:必须使用-m选项指明要调用的扩展模块的扩展机制以及需要手动加载扩展模块。
基本匹配的使用选项及功能
-p 指定规则协议,tcp udp icmp all -s 指定数据包的源地址,ip hostname -d 指定目的地址 -i 输入接口 -o 输出接口 ! 取反
隐式匹配的使用选项及功能
-p tcp --sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围 --dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围 --tcp-flags mask comp 匹配报文中的tcp协议的标志位 -p udp --sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围 --dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围 --icmp-type 0/0: echo reply 允许其他主机ping 8/0:echo request 允许ping其他主机
显式匹配的使用选项及功能
显式匹配的选项特别多,所以使用思维导图的方式梳理一下。我们可以使用命令:man iptables-extensions查看具体用法。
1.multiport(多端口)
开放多个端口。
1 2 3 |
|
2.iprange(ip范围)
以连续地址块的方式来指明多IP地址匹配条件。
1 2 3 |
|
3.time(时间范围)
指定时间范围。
1 2 3 |
|
4.string(字符串)
对报文中的应用层数据做字符串模式匹配检测(通过算法实现)。
1 2 3 |
|
5.connlimit(连接限制)
根据每个客户端IP作并发连接数量限制。
1 2 |
|
6.limit(速率限制)
报文速率控制。
7.state(状态)
追踪本机上的请求和响应之间的数据报文的状态。状态有五种:INVALID, ESTABLISHED, NEW, RELATED, UNTRACKED.
法则:
1、对于进入的状态为ESTABLISHED都应该放行;
2、对于出去的状态为ESTABLISHED都应该放行;
3、严格检查进入的状态为NEW的连接;
4、所有状态为INVALIED都应该拒绝;
3.3 处理动作
处理动作有内置的处理动作和自定义的处理动作。自定义的处理动作用的比较少,因此只介绍内置的处理动作。
ACCEPT:允许数据包通过
DROP:直接丢弃数据包,不给出任何回应信息
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息
LOG:在日志文件中记录日志信息,然后将数据包传递给下一条规则
QUEUE: 防火墙将数据包移交到用户空间
RETURN:防火墙停止执行当前链中的后续Rules,并返回到调用链
REDIRECT:端口重定向
MARK:做防火墙标记
DNAT:目标地址转换
SNAT:源地址转换
MASQUERADE:地址伪装
3.4 保存和载入规则
CentOS6和CentOS7保存和载入的规则稍有差异。
CentOS 7
1 2 3 4 |
|
CentOS 6
1 2 3 |
|
更多例子: https://blog.csdn.net/u012904337/article/details/79507646
1.放行sshd服务
iptables -t filter -A INPUT -s 192.168.0.0/24 -d 192.168.0.1 -p tcp --dport 22 -j ACCEPT iptables -t filter -A OUTPUT -s 192.168.0.1 -p tcp --sport 22 -j ACCEPT
2.放行httpd/nginx服务
iptables -I OUTPUT -s 192.168.0.1 -p tcp --sport 80 -j ACCEPT iptables -I INPUT -d 192.168.0.1 -p tcp --dport 80 -j ACCEPT
3.放行本机端的流入流出
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT #不放行本机的流入与流出,访问本机的httpd服务,网页会出现Error establishing a database connection。
4.限制ping 192.168.0.1主机的数据包数,平均2/s个,最多不能超过3个
iptables -A INPUT -i ens33 -d 192.168.0.1 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT
如何配置iptables
a) 1. 删除现有规则 iptables -F b) 2. 配置默认链策略 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP c) 3. 允许远程主机进行SSH连接 iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT d) 4. 允许本地主机进行SSH连接 iptables -A OUTPUT -o eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT e) 5. 允许HTTP请求 iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT
iptables初始化脚本
#!/bin/bash echo "Setting firewall . . . . start" #--------RULESET INIT----------# iptables -F iptables -X iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #------------------------------# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i eth0 -p tcp ! --syn -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT #------------------------------# #zabbix iptables -A INPUT -p tcp --destination-port 10050 -j ACCEPT iptables -A INPUT -p udp --destination-port 10051 -j ACCEPT iptables -A OUTPUT -p tcp --destination-port 10050 -j ACCEPT iptables -A OUTPUT -p udp --destination-port 10051 -j ACCEPT #for web iptables -A INPUT -p tcp --destination-port 21 -j ACCEPT iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT iptables -A OUTPUT -p tcp --destination-port 80 -j ACCEPT iptables -A OUTPUT -p tcp --destination-port 21 -j ACCEPT #for mysql iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT iptables -A OUTPUT -p tcp --destination-port 3306 -j ACCEPT #for mail iptables -A INPUT -p tcp --destination-port 25 -j ACCEPT iptables -A OUTPUT -p tcp --destination-port 25 -j ACCEPT iptables -A OUTPUT -p tcp --destination-port 110 -j ACCEPT #for ssh iptables -A INPUT -p tcp -s any/0 --destination-port 22 -j ACCEPT iptables -N icmp_allowed iptables -A icmp_allowed -p ICMP --icmp-type 11 -j ACCEPT iptables -A icmp_allowed -p ICMP --icmp-type 8 -j ACCEPT iptables -A icmp_allowed -p ICMP -j DROP iptables -A OUTPUT -p icmp -j ACCEPT iptables -A INPUT -p icmp -j ACCEPT iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT /etc/init.d/iptables save
标签:filter 数字 request lte 严格 过滤 ali 定时 rename
原文地址:https://www.cnblogs.com/yitianyouyitian/p/10096302.html