Linux运维笔记
我们一直在努力

iptables入门

     · iptables:防火墙(包过滤型防火墙),隔离工具:工作于主机或者网络的边缘,对于进出本主机或网络的报文,根据事先定义的检测规则做匹配,对于那些能够被规则匹配到的报文,作出相应的处理(放行或阻止等)的一个组件。
    · 这个边缘一定是报文进出的地方才可以,TCP/IP协议栈是在内网中实现的,对于防火墙是工作作在内核空间中的,因为所有进出本主机的报文都是通过TCP/IP协议栈实现的,因为我们现在互联网上,所用到的协议或所用到的组件都是TCP/IP的实现,
    · 对于内核来讲或者对Linux而言,整个TCP/IP协议栈是在内核中的,网卡作为一个硬件来讲,能够实现接受报文的硬件设备,就是网卡而已,网卡作为一个硬件设备,也只有内核通过驱动程序能访问他。
    · 所以说,一个主机防火墙对于Linux而言应该放在内核空间的协议层次上能够理解协议报文的位置上进行,在内核中TCP/IP协议栈上面去访问防火墙。所能接受到的报文,是别人发过来进入到本机内部来的报文,接受进来的报文也有2种不同的走向。

(1)把报文发送到本机,目标地址有可能是本机,目标地址为本机的所有报文,我们本机TCP/IP协议栈就应该拆封装,最终把请求根据对方所访问到的目标端口送给注册监听在这个目标端口上的应用程序。

(2)对方所发送报文的目标地址不是本机,但是如果不是本机为什么会把报文发到本机上来呢,一个主机把网关设定为了本机的网卡IP地址,这个时候我们主机首先把报文交给下一跳,由下一跳负责转发,所以他的目标地址不是本机,因此报文是收进来的,因为他明明是发给我们的,经过mac地址发送,但拆封MAC报文发现里面的目标IP不是本机怎么办呢,Linux网络协议栈当中有一个功能叫做[ 核心转发 ipforward ],如果打开核心转发功能,那么这个报文根据我们本机所理解,所记录的路由表,他被选入以后由可能通过另外一个网卡也有可能通过本网卡又重新发出去了,这个叫做转发,收到以后只要本机打开了核心转发后并通过检查本机路由表知道到达目标IP,大概会经过下一个主机是谁因此他会转发给下一个主机,这也就意味着,有可能这个报文通过另外一条网卡又出去了,这个时候他也没有经过本地的用户空间,和用户空间没有关系。

 

 

 

命令范例:
iptables [-t table] subcommand CHAIN CRETERIA -j TARGET
表            子命令           链      匹配条件     处理动作
表:
(1)filter
(2)nat
(3)mangle
(4)raw
[ 子命令 ]:
1、针对链管理的:
-F:清空规则链,不指规则链时,指定表上所有规则链都清空(可以指定哪个链、指定链上的规则号码)
-N:创建自定义规则链(链不能重名)
iptables -t filter -N CHAINname
-X:删除用户自定义的空的规则链
-Z:清零,置零,置零规则计数器
-P:为指定链的设定默认处理策略;对filter表中的链,默认策略通常有ACCEPT、DROP、REJECT
iptables -t filter -P FORWARD DROP
-E:重命名自定义链(被引用计数部位0的自定义链无法改名或者删除)
iptables -t filter -E oldCHAIN newCHAIN
2、针对规则管理的:
-A:将新的规则追加在指定链的尾部
-I:将新的规则插入至指定链的指定位置(按规则编号),不指定规则编号,插入第一条
iptables -I INPUT -d 172.16.0.94 -p tcp –dport 22 -j ACCEPT
-D:删除指定链上的指定规则,两种指定方式:
(1)指定匹配条件:   iptables
(2)指定规则编号:   iptables -D FROWARD 9
-R:替换指定的链上的指定规则
3、查看:
-L:列出指定链(或者所有链)上所有规则
由于能显示出IP地址和端口,所老是会反解,反解的结果会导致速速变得很慢
-n:以数字方式显示地址与端口号(不进行反解)
-v:显示详细信息,可以显示出计数器
-vv、-vvv:v越多显示信息越详细
–line-numbers:显示规则编号
-x:精确;每一个链以及每一个链上每一条规则都有一个计数器,当这个计数器的数量很大时,会自动做单位换算,而且单位换算后可能会自动取整,得到值已经不是精确结果了
【 Target是自定义链 】:
Chain INPUT (policy ACCEPT) <– 默认策略
target            prot opt source               destination
ACCEPT         all    —    0.0.0.0/0            0.0.0.0/0
INPUT_direct all    —    0.0.0.0/0            0.0.0.0/0
· 有些规则的Target还可以是自定义链,所可以把自定义链当Target,一旦被这个规则所匹配,直接由这个链上的规则检查,内置链上的规则也是自上而下的检查的。
· 比如检查某一条规则以后,这条规则匹配到了,匹配到应该是某一个Target,这个Target指向了另外个链,于是处理流程就变成转向另一条自定义链,自定义链上也有很多规则,于是在自定义链上通过规则自上而下开始检查。
· 如果万一被某个规则匹配到了,就处理就有可能结束,看规则是什么Target,如果那条规则的Target表示Drop了,就此打住了,后面就没了。
· 如果没有被匹配到,意味着什么,走到最后没了。没了我们应该返回到主链上,从这条规则往下继续处理。
· 所以一般在自定义链上还会使用用Return的Target,叫返回调用者。让调用者自己还继续往下走。
[ 匹配条件 ]:
(1)基本匹配:
-s:[!]IP|Netaddr 检查报文中源地址是否符合此处指定的地址范围;也可用 –src / –source IP
iptables -t filter -A INPUT -s 0.0.0.0/0 -d 172.16.0.94 -p tcp -j ACCEPT
-t filter过滤哪些地址可进可出,如果不写-t filter默认为filter表
-s 0.0.0.0/0是源地址,即允许所有进到本机的地址,可以省略
-d 172.16.0.94是目标地址,即本机
-d:[!]IP|Netaddr 检查报文中目标地址是否符合此处指定的地址范围;也可用 –dst / –destination IP
# iptables -t filter -A OUTPUT -s 172.16.0.94 -d 0.0.0.0/0 -p tcp -j ACCEPT
-p:传输层协议(tcp|udp|icmp)检查报文中协议,即ip首部中的protocols所标识的协议,也可用 –protocols
-i:数据报文的流入接口;如果有3块网卡,只对第一块网卡流入报文做检查,也可用–in-interface
仅用于对应的链:PREROUTING、INPUT、FORWARD
# iptables -A INPUT -d 172.16.0.94 -i eth0 -j ACCEPT
-o:数据报文的流出接口,仅用于对应的链:FORWARD、OUTPUT、POSTROUTING,也可用–out-interface
# iptables -A OUTPUT -s 172.16.0.94 -o eth0 -j ACCEPT
(2)扩展匹配:
/usr/lib64/xtables/ 中的so文件即为iptables的扩展(大写的文件是Target,小写的都可以做扩展)
-m 匹配扩展名 –spec_options:指明要做扩展匹配了
[ 例如 ]:-m tcp –dport 22
-m tcp表示使用tcp
–dport 22而-m tcp里的专用选项叫–dport
1.隐式扩展:如果-p已经指明tcp了,那么-m tcp可以不用写了(tcp|udp|icmp)
【 -p tcp 】:
–dportPORT:目标端口,可以指明连续的端口,也可指明单个端口
# iptables -A INPUT -d 172.16.0.94 -p tcp –dport 22 -j ACCEPT
–sport PORT:源端口,可以指明连续的端口,也可指明单个端口.
# iptables -A OUTPUT -s 172.16.0.94 -p tcp –sport 22 -j ACCEPT
–tcp-flags LIST1 LIST2:检查LIST1所指明的所有标记位,且这其中,LIST2所表示出的所有标记为必须为1,余下的必须为0,没有在LIST1中指明的,不做检查
SYN第一次握手时请求同步
ACK确认号有效
FIN断开请求
RST重置连接
PSH立即推送给应用程序
URG紧急指令有效
[ 实例 ]:
–tcp-flags SYN,ACK,FIN,RST SYN
· 表示只检查SYN,ACK,FIN,RST 4个标记位,这4个标记位中必须要求SYN为1
· 其他的必须为0。这个相当于TCP 3次握手的第一次
· 简写:–syn:检查是否为新建tcp连接请求时的第一次请求
【 -p udp 】:
–dportPORT:目标端口,可以指明连续的端口,也可指明单个端口
–sport PORT:源端口,可以指明连续的端口,也可指明单个端口
【 -p icmp 】:
–icmp-type:icmp类型,可用数字表示类型:
0:echo-reply回显应答,别人给与的响应报文类型0
# iptables -A INPUT -d 172.16.0.94 -p icmp –icmp-type 0 -j REJECT
8:echo-request表示ping别人,报文类型为8
# iptables -A OUTPUT -s 172.16.0.94 -p icmp –icmp-type 8 -j ACCEPT
2.显式扩展:必须使用-m选项指定使用的扩展
CentOS 6:man iptables
CentOS 7:man iptables-extensions
(1)、multiport 多端口匹配,离散方式定义多端口匹配,最多指定15个端口
–source-ports,–sports port[,port|,port:port]                指明多个源端口
# iptables -A OUTPUT -s 172.16.0.94 -p tcp -m multiport –sports 22,80
–destination-ports,–dports port[,port|,port:port]        指明目标端口的
# iptables -A INPUT -d 172.16.0.94 -p tcp -m multiport –dports 22,80
–ports port[,port|,port:port]                                         无论源还是目标端口都可以匹配到
(2)、iprange 指明连续的IP地址范围(但一般不可能扩展为整个网络)
[!] –src-range from[-to] 指明连续的源IP地址范围
iptables -A OUTPUT -s 172.16.0.94 -p tcp -m multiport –sports 20:22,80 -m iprange –src-range 172.16.0.5-172.16.0.8 -j ACCEPT
[!] –dst-range from[-to]指明连续的目标IP地址范围
iptables -A INPUT -d 172.16.0.94 -p tcp -m multiport –dports 20:22,80 -m iprange –dst-range 172.16.0.5-172.16.0.8 -j ACCEPT
(3)、string 字符串扩展;基于字符串匹配去检查协议传输单元报文中的内容
[ 模式匹配策略 ]:字符串检查比对算法
比如现在传递字符串 abcdefg,传输时是先传a还是先传g呢,这个都是由可能的,假
如说先传的abcdefg,我们现在要检查这个字符串里面有没有出现cd,先从第一位比
较,再从第二位比较,再从第三位比较,这样的效率很低。只要比较前两位字符没一
个相同的,直接从第三第四位比较久OK了。这就要用到高效的字符串比对算法
–algo bm|kmp指明字符串比对算法(比用选项)
–from 数字指定从哪个位置开始(从第几个字符开始检查)
–to 数字指定从倒数哪个位置开始检查
[!] –string ‘字符串’从头到尾检查
[!] –hex-string ‘字符串’16进制编码后的字符串(检查速率比给定一个文本要快)
# iptables -A INPUT -p tcp –dport 80 -m string –algo bm –string ‘GET /index.html’ -j LOG
# iptables -p udp –dport 53 -m string –algo bm –from 40 –to 57 –hex-string ‘|03|www|09|netfilter|03|org|00|’
在172.16.0.94网页中包含movie字符串的不允许访问
在172.16.0.94主机上执行iptables
iptables -A OUTPUT -m string –alog bm –string  ‘movie’ -j REJECT
用户的请求是可以进来的,但是网页中是包含movie的,所以我们不响应给请求给用户
(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…]每一月只在几号作出检查
[!] –weekdays day[,day…]每一星期只在几号作出检查
-m time –weekdays Sa,Su只匹配周六和周日
-m time –datestart 2007-12-24 –datestop 2007-12-27
-m time –datestart 2007-01-01T17:00 –datestop 2007-01-01T23:59:59
-m time –timestart 12:30 –timestop 13:30每天的
-m time –weekdays Fr每周五
-m –monthdays 22,23,24,25,26,27,28每月的
WEB服务器站点在14点到16点不允许访问:
iptables -I INPUT -d 172.16.0.94 -p tcp –doprt 80 -m time –timestart 14:00 –tiomestop 16:00 -j REJECT
(4)、connlimit 连接限制:
根据每客户端IP(也可是地址快)做并发访问数量限制的
如果一个IP对web服务器同时发起了10个请求,我们服务器最多只能并发访问100个,他一个人
就占了10个,对我们资源消耗量太大,为了公平,每一个客户端只可以并发访问2个
–connlimit-above 数字指定超过了多少连接数,进行REJECT或DROP
–connlimit-upto 数字指定小于等于多少连接数,进行ACCEPT
–connlimit-mask prefix_length指定地址网段掩码(做地址快限制的)
–connlimit-saddr源组(用来匹配地址块)
–connlimit-daddr目标组(用来匹配地址块)
对于23号端口发起新请求时,对于同一个主机所发起新情求的数量不能超过2次
iptables -A INPUT -p tcp –syn –dport 23 -m connlimit –connlimit-above 2 -j REJECT
-p tcp –synTCP第一次握手
            iptables -A INPUT -p tcp –syn –dport 23 -m connlimit –connlimit-upto 2 -j ACCEPT
              iptables -p tcp –syn –dport 80 -m connlimit –connlimit-above 16 –connlimit-mask 24 -j REJECT
对于SSH 22端口的每个IP访问并发数量不可以超过3个,超过3个拒绝
           iptables -I INPUT -p tcp –dport 22 -m connlimit –connlimit-above 3 -j REJECT
(6)、limit 扩展:基于收发报文速率做限制的
基于令牌桶过滤器做速率限制
[ 令牌桶 ]:假设摩天轮是按一定的速率旋转的,不能转太快,每2分钟能转下来一个座舱,
假如一个座舱最多坐2个人,一大堆人在这里排队坐这个摩天轮,处理方法是什么?
先一次上来2个人(一次匹配2个),但是它2分钟转下来一个,接下来2分钟有人等
也没用,等待下个座舱转过来在上2个,再快也没用用,排队的人需要发再多的报文
也没用。每一个座舱可以理解为一个令牌,整个摩天轮上所有的座舱加起来,是我们
容纳的最多的令牌数量,所以称为令牌桶。
例2:有一个免费的博物馆,为了保证参观的效率和效果,博物馆允许最大在馆人数
不允许超过100人,但是一说免费,就涌进了1000个人,这1000个在这里等待排队的
人中,我们只能放行100个,假设每一分钟放1个人进去,但事实上每一天刚开馆那
一会,第一次可以多放一些人进去,因为那时候博物馆是空的,带来的问题是,一
下子放进去这么多人,博物馆就满了,但是这100个人最后将会是同时出来的,不过
好在现实中我们人不是这么干的,先放100个人进去,过了10分钟了,开始按照我们
的速率一个个往里面放行,而第一批一下子放行这么多叫峰值,可以想象令牌桶是
这么一种做法,假如说每一分钟有一个空闲令牌到达,于是就可以放一个人进去,但
是在过去的那一段时间内,第一分钟过去了没人来,把这个空闲令牌给他收集起来,
可以想象为一个桶,来一个空闲令牌,把他扔到这个桶里面,再来一个空闲令牌还没
人用,没有人在等待参观再扔到桶里一个,但是这个桶的容量是有限的,一分钟能
空闲下来一个,但是500分钟过去了,仍然没有人来,我们这里就空闲600个令牌了
这个时候来了1000个人,我们放进去600个,这样对我们来说这个速率就太大了,因此
峰值我们不会给他放了太大,过去假如说这个桶的容量是50个,过去600分钟内一直
没有人来访问,最多也只放50个空闲令牌,到51个还没人访问就把这个令牌扔了,
所以多余的空闲令牌将不会被收集。
可以想象这个是我们的发包速率,别人ping我们当前这台主机,服务器很忙,但是
任何一个ping报文过来我们都得给他做响应,正常一个主机应该是这么做的,这个
是我们在协议上做的要求,任何报文来了,我都应该对当前系统做中断,中断完后
让内核去接收这个报文,放在内存中,理解这个报文是什么,发现这个ping请求还
要给他封装一个报文,再通过网卡发送一个响应给他。如果对方闲着没事一直在ping
你这该怎么办呢?ping的速度还非常块,一秒发了10个报文,因此可以控制响应速率
第一次来,峰值速率定义为5个,意味着只要一批来10个,我先响应5个,不控制速度
再来的话我们就最多2秒钟一个2秒钟一个放行。
–limit rate[/second|/minute|/hour|/day]限制速率
–limit-burst number峰值速率
对于ping本机的报文定义为峰值5个并且每秒放行2个(进来的限制出去的就不需要限制):
iptables -A INPUT -d 172.16.0.94 -t icmp –icmp-type 8 -m limit –limit 2/second –limit-burst 5 -j ACCEPT
iptables -A OUTPUT -s 172.16.0.94 -t icmp –icmp-type 0 -j ACCEPT
(7)、state 扩展:状态扩展
根据连接追踪机制,跟踪每一个连接最终请求来检查连接间的关系
连接和连接之间的状态就这么几种(无论TCP UDP ICMP):
这种连接追踪机制和tcp自己的状态,这个状态是iptables自己所附加的去追踪连接
去记录连接此前是否曾来来过的一种或是否访问过的一种机制,以前举过例子,你
是一个店员,来了一个人,此前你已经对他记录下来了,第二次来,你就知道了,
这个就是连接追踪机制,这种追踪无关你使用的是TCP UDP ICMP协议,因为他是
iptables自行提供的。这种连接追踪机制是怎么工作的,或者说我们连接追踪机制
的状态有哪些?
【 ESTABLISHED】在tcp udp icmp也好,通常对一个报文来讲一次请求就有所谓的请
求报文和响应报文共同组成,所以党请求发来,我们给予响应这个过程,一
旦我们收到对方请求并开始做响应,这之后他们这状态叫做established,
并且更重要的是在有限时间内,比如说我们定义此前来过,我为每连接只
记录6秒钟,在6秒钟之内,只要再来访问我都认为你是此前来过的,都是
established状态。而你访问一次,我帮你记录6秒,而6秒以内再也没来过
这个连接就被清空了,我就忘记你了,再来我就认为你是一个新顾客,所以
这个连接追踪是靠内部iptables在内核内部找到一段内存空间,在这段内存
空间当中会记录下此前每一个源地址、访问的目标地址,而后跟每一个源
地址和目标地址这个连接就记录下来了,并且记录完以后,后面给他一个
倒计时的计时器,比如:30秒钟,然后开始倒计时,一直到0,这个条目被
清除,在这个条目清楚之前同一个IP又来访问了,这就意味着这个是此前
曾经访问过的,我们是知道的。当然他的连接追踪能够包含到对应的协议
源地址是什么、目标地址是什么、源端口是什么、目标端口是什么、tcp协议
还是udp协议的,他都能记录下来,记录的非常详细,所以每一个连接都会
占用一定的内存空间。如果我们在互联网上是一个非常繁忙的服务器,如果
有10000个,甚至有10W个不同地址来访问过我们,那就要记录10W条信息,
想想什么概念,需要很大的内存空间,而这个内存是在内核中的,是内核
空间,内核一旦把内存空间耗尽就麻烦了,所以默认情况下这个内存空间
是给的比较小的,因此我们启用连接追踪后对于一个非常繁忙的服务器,
很容易吧这个空间给撑爆了,而爆了以后新的连接都会被自动拒绝,对于
状态这种方式做扩展,而检查状态这种方式去检查扩展,通常来讲我们要
求其状态连接这个数量,我们尽可能开放的大一点,怎么开放?
【 调整连接追踪功能所能容纳的最大连接数量 】:
/proc/sys/net/nf_conntrack_max(最大65536)
所以对于一个并发数量非常大的想基于lvs做并发调度时
65536这个数量可能是相当不大的
【 当前我们已追踪到的并记录下的连接 】:
/proc/net/nf_conntrack
这里面记录了当前已经追踪到的连接
【 不同协议或者链接类型追踪时间的调整 】:
/proc/sys/net/netfilter
可追踪的连接状态:
NEW:新发起的请求;连接追踪模板中不存在此链接相关的信息
条目,因此将其识别为第一次发出的请求
ESTABLISHED:表示NEW状态之后;连接追踪追踪模板中为其建立的条目
失效之前这段期间内所进行的通信的状态
RELATED:相关的连接;VSFTPD服务就是一种奇葩的服务,实现数据
传输他有两个连接,第一个连接叫控制连接,他只是用来
实现收发命令的,一旦需要获取数据他会打开新的,为每
一次数据获取打开新的数据链接,没有控制连接是否会有
数据链接,不会,只要在传数据的过程中,这个命令是存
在的,所以像这种数据连接和命令连接这种关系叫RELATED
命令连接他是一个有来有往的独立连接,有请求有响应,
但是数据链接确是另外一个有请求有响应的连接,什么叫
两个连接,每组连接都是由请求和响应组成的,所以数据
连接有自己单独的请求报文和响应报文,而命令连接也有
自己的请求报文和响应报文,他是两个互相独立的连接,
但是这两个连接之间是有关系的,所有的数据连接是由命
令连接建立起来的。这就叫相关的连接
INVALIED:无法识别的连接;这个新的也不是旧的连接也不是其他连接
而STATE连接就是能够让我们根据连接追踪状态中的状态,进而实现对连接做出控制功能的
【 注意 】:如果我们使用连接追踪的状态实现对报文的状态做状态追踪做状态检测的话,需
要装载专用的模块才行,需要让内核装载专用的模块才行(一般装载是自动完成的)
以WEB为例:当用户请求发出来时,第一次请求是一个NEW状态的连接,我们队NEW放行
以后,那后续的所有通信过程只要连接追踪模板中条目失效之前的所有通信过程,我们
都可以认为是ESTABLISHED状态,所以只要第一次请求放行了,在连接追踪模板中就
记录这么一条连接,随后所有请求和响应在这个条目失效之前都是叫做已建立的连接
事实上只有第一次请求发出时叫NEW的,哪怕对你第一个请求响应也叫ESTABLISHED的
后续在请求再响应都是,因此将来为了使得我们防火墙更安全,状态追踪就能在一定
程度上帮我们实现这样的效果,现在有些木马程序,能扫描你服务哪个端口能够访问
他发现80端口能够访问,自己主动发起一个连接控制端,能够远程控制主机,80端口
让别人访问给予响应的,也就是说我们从本机80端口发出去的所有报文都是用来响应
别人,而不是请求别人的,因此对于反弹式木马,开放80端口是无效,因为默认开放
80,至于是请求还是响应是做不到的,一旦我们能有做连接追踪,80端口新连接还是
已经建立的连接我都允许,出去的只允许已建立的,不应该允许新连接出去的,我们
80端口WEB服务,只可能通过80响应别人,怎么可能通过80去建立连接别人,因此如果
说我们限制了所有通过80端口出去的连接,必须是对某个请求作出的响应,必须得是
ESTABLISHED状态,那么这种反弹式木马就出去了,因为他发起的是新连接。
这种防火墙增强的前提是,得打开连接追踪功能,而连接追踪是消耗资源并降低效率
[!] –state state状态选项,多个以逗号隔开
对于入站的80端口中NEW和ESTABLIESHED状态的报文放行,出站的报文只放行ESTABLISHED:
# iptables -I INPUT -d 172.16.0.94 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT
# iptables -I OUTPUT -s 172.16.0.94 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT
允许别人ping我们的主机:
iptables -A INPUT -d 172.16.0.94 -p icmp -m –icmp-type 8 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUP -s 172.16.0.94 -p icmp -m –icmp-type 0 -m state –state ESTABLISHED -j ACCEPT
只要能够进来的请求,我们都给他出去(允许所有端口和IP的请求报文出去):
iptables -I OUTPUT -m state –state ESTABLISHED -j ACCEPT
为了提高效率,只要把所有ESTABLISHED状态的无论什么端口和协议的入站请求都放行:
iptables -I INPUT -m state –state ESTABLISHED -j ACCEPT
iptables -A INPUT -d 172.16.0.94 -p tcp -m multiport –sports 22,80 -m state NEW -j ACCEPT
【 问题 】:
如何开放被动模式的ftp服务?
数据连接本来就只有第一次,数据传完就断开了
对于21开放NEW ESTABLISHED
对于其他的非固定的端口的连接,我们只需要检查是否为RELATED状态
(1)装载RELATED追踪专用模块:
cd /lib/modules/3.10.0-514.26.2.el7.x86_64/kernel/net/netfilter
ll nf_conntrack_ftp.ko
modprobe nf_conntrack_ftp
(2)放行请求报文:
命令连接:NEW,ESTABLISHED
iptables -I INPUT -d 172.16.0.94 -p tcp –dport 21 -m state –state NEW,ESTABLISHED -j ACCEPT
数据连接:ESTABLISHED,RELATED
iptables -A INPUT -d 172.16.0.94 -p tcp -m state –state RELATED,ESTABLISHED
(3)放行响应报文:
iptables -A OUT -s 172.16
赞(0) 打赏

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址