欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 28_03 _iptables系列之常用扩展模块 有大用

匹配条件:


        通用匹配 (普通匹配)


            -s,--src  指定源ip地址,源网络


            -d,--dst  指定目标ip地址,目标网络


            -p {tcp|udp|icmp}  指定协议


            -i INTERFACE  (input interface)(比如 ethX网卡,pptX网络接口):指定数据报文流入的接口 (进来的)


                        PREROUTING,INPUT,FORWARD 用在这些链上,可用于定义的标准链


            -o INTERFACE  (output interface)(比如 ethX网卡,pptX网络接口):指定数据报文流出的接口 (出去的)


                        POSTROUTING,OUTPUT,FORWARD 用在这些链上,可用于定义的标准链


     


        扩展匹配:使用netfilter的扩展模块才能完成的匹配


                隐含扩展:(当我们使用-p实施某协议之后)不需要明确指定(特别指明)由哪个模块扩展,因为此时使用了 -p {tcp|udp|icmp}


                    -p tcp


                            --sport PORT[-PORT]:源端口, (source port)         例如 80-100 只能是连续的端口,不能是隔开的端口


                            --dport PORT[-PORT]:目标端口,(destination port)       例如 80-100 只能是连续的端口,不能是隔开的端口


                            --tcp-flags: mask comp:只检查mask指定的标志位,是逗号分隔的标志位列表. comp:此列表中的位必须为1,而comp中未出现且mask中出现的必须为0


                                    --tcp-flags SYN,FIN,RST,ACK SYN,ACK         ( 这里SYN,ACK必须为1,FIN,RST必须为0)


                                    --tcp-flags SYN,FIN,RST,ACK SYN    =    --syn    (这是三次握手的第一次因为它用得比较多,所以用 --syn来简写它)


                            --syn   (--tcp-flags SYN,FIN,RST,ACK SYN 的简写,因为它用得比较多)  这是三次握手的第一次




                    -p icmp


                            --icmp-type:(icmp报文的类型)   类型对照表 /node-admin/12464


                                0:echo-replay 响应报文


                                8:echo-request 请求报文


                    -p udp


                            --sport PORT[-PORT]:源端口, (source port)     


                            --dport PORT[-PORT]:目标端口,(destination port)    




                    隐含扩展也可以使用显式扩展的(比如 -p tcp --dport 可以写成 -p tcp -m tcp --dport)






                显式扩展:必须指明由哪个模块进行的扩展,在 iptables中使用-m选项可完成此功能  使用额外的条件匹配机制(比如报文的速度,追踪会话连接的状态,可以根据时间来放行数据报文的) -m 是match的意思  MATCH EXTENSIONS 匹配扩展


                    -m EXTENSION  --spe-opt       (--spe-opt 指定选项,指定独有选项)


                       -m  state: 状态扩展


                            结合ip_conntrack追踪会话的状态 (与TCP协议状态其实不一样,是根据ip来的)(可以追踪三种协议  tcp udp icmp)


                                    NEW: 新连接请求 (相当于TCP/IP握手的第一次),但是ping别人第一次也是NEW,udp第一次也是NEW


                                    ESTABLISHED: 已建立的连接 (对新请求的响应)        


                                    INVALID: 非法连接(非法报文)    (比如报文 SYN=1,FIN=1) 


                                    RELATED: 相关联的  (比如 ftp 命令连接和数据连接,数据连接由于命令连接中的某个命令激活的,比如get mget,put,mput都可以激活) 由命令连接激活的另一个连接,这种两个关系叫做RELATED  (它其实是专为ftp服务器而设定的)


                                (例子 -m state --state NEW -j ACCEPT ,,,,-m state --state NEW,ESTABLISHED -j ACCEPT)


                                (NEW,ESTABLISHED 可以用逗号隔开两个状态,表示这两个状态的都一律放行)


                                


要使用 ftp 功能,首先要装载 ip_conntrack_ftp和 ip_nat_ftp模块




                     -m multiport:离散的多端口匹配扩展


                            --source-ports


                            --destination-ports


                            --ports  (不指定源或目标端口,只要是端口就行,包括源和目标)


                                    (比如 -m multiport --destination-ports 21,22,80 -j ACCEPT)


                                            (这里端口不连续用逗号)(端口连续的话 用冒号) (最多支持15个端口)



                    -m iprange:ip的范围

                            --src-range

                            --dst-range

                                

                                    -s,-d

                                    -s IP,NET

                                    cadr格式(172.16.0.0/16)

                                    

                                    172.16.100.3-172.16.100.100


                                    iptables -t filter -A INPUT -p tcp -m iprange --src-range 192.168.1.0-192.168.1.244 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

                                    

                                    感叹号 ! 放行给这个地址范围之外的地址访问了

                                    iptables -t filter -A INPUT -p tcp -m iprange  ! --src-range 192.168.1.0-192.168.1.244 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT


                    -m connlimit:连接数限定(限制)  (感觉是对于一个客户端而言的)

                          !  --connlimit-above n  (above 达到)连接上限,最多多少连接(通常前面加感叹号!,ACCEPT的情况下加叹号)


                                iptables -t filter -A INPUT -d 192.168.1.15 -p tcp --dport 80 -m connlimit ! --connlimit-above 2 -j ACCEPT

                                                                                                                                                没有达到2个就接受(但意味着达到2个就拒绝吗?未必)    (--connlimit-above 2 -j DROP) 


                    -m limit:   (感觉是对于所有客户端而言的)

                        --limit RATE: 速率(单位时间 每秒每分每小时)

                        --limit-burst 7: 一批进来的上限 (第一批爆发7个)(超出的话连接可能会重置,要求用户重新发送请求)


                    -m string: 

                            --algo:(Algorithm 算法) (bm或kmp)

                            --string "STRING": 包含的字符串 (不仅仅是字符串,而是当作一个模式pattern(正则表达式)来匹配的)



-j TARGET

    ACCEPT

    DROP

    REJECT

    LOG:记录日志信息的(它是不管允许还是拒绝的) (LOG一定要放在相应的ACCEPT,DROP,REJECT前面,否则的话人家允许或拒绝后执行不到LOG)

     (日志频率要降低,防止磁盘IO开销太大,而导致磁盘性能下降)

        --log-level level

              Level of logging (numeric or see syslog.conf(5)).


       --log-prefix prefix  前缀

              Prefix log messages with the specified prefix; up to 29  letters

              long, and useful for distinguishing messages in the logs.


       --log-tcp-sequence

              Log  TCP sequence numbers. This is a security risk if the log is

              readable by users.


       --log-tcp-options

              Log options from the TCP packet header.



NAT

FORWARD




# man iptables

image.png





# man iptables

image.png



http 是连接无状态的,尤其是没有使用长连接的情况下,用户下载后,就立即关闭了

像 ssh telnet 长连接 -m connlimit ! --connlimit-above 2 -j ACCEPT 效果是比较明显的

image.png


tc: traffic  control  (流量控制)   reshape 流量整形,流量重塑

image.png

image.png


image.png


image.png


image.png


image.png


image.png

image.pngimage.png

并没有限定最多有多少人同时在线,

1)可以限定每秒钟,每分钟,每小时(单位时间)可以接进来的请求数,

2)并发涌至的请求数

不能限定总体上限,但可以限定流量上限

# man iptables

image.png





[root@localhost ~]# iptables -L -n

image.png

[root@localhost ~]# iptables -I INPUT -d 192.168.0.15 -p tcp --dport 22 -m limit --limit 3/minute --limit-burst 3 -j ACCEPT

image.png


image.png


上面使用 22 这种长连接的端口对于 limit 模块 好像看不出效果


[root@localhost ~]# iptables -I INPUT -d 192.168.0.15 -p icmp --icmp-type 8 -j ACCEPT

[root@localhost ~]#  iptables -I OUTPUT -s 192.168.0.15 -m state --state RELATED,ESTABLISHED  -j ACCEPT

[root@localhost ~]# iptables -L -n --line-numbers

image.png


可以ping了

image.png


(--limit 1/second 这个每秒钟应该看不出来效果吧)

[root@localhost ~]# iptables -R INPUT 1  -d 192.168.0.15 -p icmp --icmp-type 8 -m limit --limit 1/second -j ACCEPT


(--limit-burst 默认为5)

 image.png


默认  ping 4次

image.png

windows中 ping -t 可以 ping 无数次 

# ping  -h    #windows中的命令帮助

image.png


image.png


(切记  下面的规则要删除其它有对这个icmp 有影响的其它的iptables规则,否则即使它没有起作用,其它的规则可以对它起作用,会导致下面的规则好像看起来失效)

[root@localhost ~]# iptables -R INPUT 1  -d 192.168.0.15 -p icmp --icmp-type 8 -m limit --limit 3/minute -j ACCEPT

image.png


[root@localhost ~]#  iptables -R INPUT 1  -d 192.168.0.15 -p icmp --icmp-type 8 -m limit --limit 3/minute --limit-burst 6 -j ACCEPT


# man iptables

(algo Algorithm 的简写) bm 是两个人简写 kmp 是三个人简写 它们几乎相当,差不多,没有好坏

image.png

image.png

--hex-string 十六进制字符串,效率更高一点


[root@localhost ~]# vim /var/www/html/test.html

h7n9

hello world

~


[root@localhost ~]# iptables -I INPUT -d 192.168.0.15 -m string --algo kmp --string "h7n9" -j REJECT

[root@localhost ~]# iptables -L -n

image.png


[root@localhost ~]# iptables -L -n -v

image.png


http://192.168.0.15/test.html 这是可以打开的,虽然里面有内容 h7n9 ,但是它可以打开

[root@localhost ~]# cd /var/www/html/

[root@localhost html]# ls -la

总计 12

drwxr-xr-x 2 root root 4096 09-12 20:35 .

drwxr-xr-x 6 root root 4096 09-11 21:39 ..

-rw-r--r-- 1 root root   17 09-12 20:35 test.html

[root@localhost html]# mv test.html h7n9.html

[root@localhost html]#


此时打不开了,

image.png

当然  http://192.168.0.15/ 是可以打开的

image.png

( iptables -I INPUT -d 192.168.0.15 -m string --algo kmp --string "h7n9" -j REJECT )所以 INPUT 里面如果出现  h7n9 就会屏蔽掉,如果INPUT 没有 h7n9 就不会屏蔽

( iptables -I OUTPUT -s 192.168.0.15 -m string --algo kmp --string "h7n9" -j REJECT )所以 OUTPUT 里面如果出现  h7n9 就会屏蔽掉,如果OUTPUT 没有 h7n9 就不会屏蔽


[root@localhost html]# cd /var/www/html/

[root@localhost html]# mv h7n9.html test.html


http://192.168.0.15/test.html 此时不能打开 (好像这个有缓存时间,要过几分钟才可以的)

image.png

此时是能够匹配到报文的

image.png



# man iptables

image.png

当然有 Recent 模块 限制在某段时间最多尝试几次登陆 (ssh 等)

比如5分钟最多登陆两次, 过了5分钟再尝试,尝试多了,加入黑名单列表


image.png

[root@localhost html]# iptables -L -n --line-numbers

image.png



[root@localhost html]# iptables -I INPUT 2 -d 192.168.0.15 -p icmp --icmp-type 8 -j LOG --log-prefix "--firewall log for icmp--"

[root@localhost html]# tail /var/log/messages

[root@localhost html]# tail -f /var/log/messages         (tail -f:  查看文件尾部,不退出,等待其它进程追加进来的新内容 ,比如apache 的日志文件)

image.png

LEN ping包长度 TOS是服务质量(服务类型)



普通分类: