iptables的显式扩展

  • ip_conntrack [rhel5.8]rhel6.5上面是nf_conntrack,这个是内存中的一个模块,主要是用来追踪TCP UDP ICMP各个报文之间的状态,防止反弹式木马利用已经打开的端口或者已经建立的连接来发送数据
  • 查看nf_conntrack里面的内容
    这里写图片描述
  • 里面的内容保存了会话访问的地址和端口等信息,同时也可以通过命令iptstate进行查看,需要安装软件包iptstate-2.2.2-4.el6.x86_64
  • 这里看到一条红色的关于icmp的信息
    这里写图片描述
  • nf_conntrack这个模块仅仅是用来追踪,并且保留这些数据报文的信息,如果需要进行分析,需要结合iptables的其它模块来实现;
  • 对于nf_conntrack里面保存条目的定义
    这里写图片描述
  • 如果超过这里面的数值定义的请求就会因为超时被丢弃,服务器性能下降会十分明显,必要时,调大这个值,甚至在某些服务器上面移除nf_conntrack,设置需要避免激活nf_conntrack这个模块,比如使用iptables -t nat -L -n,这个命令,仅仅使用查看nat表的规则的,但是首先会激活iptable_nat,由于模块间的依赖关系,接下来就会导致nf_conntrack模块被激活,一旦模块激活,就会立即开始记录数据报文之间的状态关系;
    这里写图片描述
  • 这个模块的依赖关系显示nf_conntrack被众多的模块依赖,一旦这些模块被启动nf_conntrack模块就会被启动;
  • iptables的配置文件
  • 在重启服务之前,使用service iptales save就可以用于保存文件;
[root@server2 ~]# /etc/init.d/iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
下面这两项结合使用:
[root@server2 ~]# iptables-save  > 自定义的保存位置;
[root@server2 ~]# iptables-restore < /自定义的保存位置
  • 否则在重新启动iptables时,netfilter上面的规则就会被清空;

  • 显示扩展

  • 利用state并且结合nf_conntrack的状态来管理iptables服务
    • NEW:新连接请求;
    • ESTABLISHED:表示已经建立的连接;
    • INVALID: 表示非法的请求,SYN=1,FIN=1;
    • RELATED:表示相互关联的连接;
  • 首先根据状态来放行sshdNEW ESTABLISHED服务
[root@server23 ~]# iptables -A  INPUT -d 172.25.23.23 -p tcp --dport 22 -m \
 state --state NEW,ESTABLISHED -j ACCEPT
[root@server23 ~]# iptables -A OUTPUT -s 172.25.23.23 -p tcp --sport 22 -m \
 state --state ESTABLISHED -j ACCEPT
  • 接下来修改默认的策略
[root@server23 ~]# iptables -P INPUT DROP
[root@server23 ~]# iptables -P OUTPUT DROP
  • 放行httpd服务
  • 还是需要结合状态来进行放行
[root@server23 ~]# iptables -A OUTPUT -s 172.25.23.23 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
[root@server23 ~]# iptables -A  INPUT -d 172.25.23.23 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
  • 因为本机的Yum源使用的时httpd服务,如果只进行上面的设定,那么Yum服务不能够使用的,Yum服务器是172.25.23.250,接下来放行对于这个的Web访问
[root@server23 ~]# iptables -A OUTPUT -d 172.25.23.250 -p tcp --dport 80  -m state --state NEW,ESTABLISHED -j ACCEPT
[root@server23 ~]# iptables -A INPUT  -s 172.25.23.250 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
  • 如果需要修改上面的值
[root@server23 ~]# sysctl -w net.nf_conntrack_max=65536
net.nf_conntrack_max = 65536
[root@server23 ~]# !cat
cat /proc/sys/net/nf_conntrack_max 
65536
  • 如果需要永久有效的尽进行更改,需要下载/etc/sysctl.conf这个文件里面
  • 修改nf_conntrack的其他指令的值,参数都在/proc/sys/net/netfilter/nf_目录里面;

  • 多端口匹配

  • multiport:用于实现离散的多端口匹配功能
    • --sports port[,port|,port:port]:支持离散和连续的源端口匹配;
    • --dports port[,port|,port:port]:用于支持离散和连续的目的端口匹配;
    • --ports port[,port|,port:port]...:表示不限定端口的来源进行匹配,并且支持[!]进行范围的取反操作;
  • 修改上面的端口匹配规则为,将状态为ESTABLISHED的规则进行整合,并且使用离散的端口匹配,匹配80 21 22端口
[root@server23 ~]# iptables -I INPUT -d 172.25.23.23 -p tcp -m state --state ESTABLISHED,REALYTED -j ACCEPT
  • 然后使用离散的多端口进行匹配
[root@server23 ~]#  iptables -I INPUT 2 -d 172.25.23.23 -p tcp -m state --state NEW -m multiport --destination-ports 21,22,80 -j ACCEPT
  • 查看iptables的规则
    这里写图片描述

  • IP Range

  • 使用实现IP地址的扩展,主要用于实现某个网段内部的IP地址扩展,模块为iprange,但是只能够用于IPV4的地址范围;

    • --src-range:表示源地址范围;
    • --dst-range:表示目的地址范围
  • 放行8080端口对于172.25.23.1/24-->172.25.23.100/24具有访问权限

[root@server23 ~]# iptables -A INPUT  -p tcp -m iprange --src-range 172.25.23.1-172.25.23.100  --dport 8080 -m state --state NEW,ESTABLISHED -j ACCEPT
  • 查看添加的规则
    这里写图片描述
  • 连接限制扩展
  • connlimit:用于限制连接的次数,主要是用来限制同时在线的请求;
    • ! --connlimit-above n:Match if the number of existing connections is (not) above n.,用来指定最多可以使用多少个连接;
  • connlimit提供一个Example
[root@server23 ~]# iptables  -A  INPUT  -p  tcp  --syn  --dport  23  -m connlimit ! --connlimit-above 2 -j ACCEPT
  • 首先查看添加的规则
    这里写图片描述
  • 在尝试登陆telnet-server服务两次以后,再次进行登陆,就会出现一直等待的情况
    这里写图片描述

  • limit:用于限制流量上限,单位的访问速率,以及突然而至的流量上限

    • --limit rate[/second|/minute|/hour|/day]:用于限制速率,单位时间的访问速率;
    • --limit-burst number:用于放行突然间一批的访问速率;

    • 这个来限定一下ping的请求,将这条规则,插入到第一条

[root@server23 ~]# iptables -I INPUT -d 172.25.23.23 -p icmp --icmp-type 8 -m limit --limit 5/minute -j ACCEPT
  • 添加上述规则,并且在删除多于的关于关于icmp的规则之后
    这里写图片描述
  • 上面的ping命令在执行的过程中,会发生等待,大约按照5/minutes的速度来进行放行
  • watch命令监控的命令执行过程
    这里写图片描述

  • 字符串限定

  • string:his modules matches a given string by using some pattern matching strategy. It requires a linux kernel >= 2.6.14.
    • --algo {bm|kmp}:表示字符串匹配算法,支持两种算法bm kmp
    • [!] --string pattern:表示需要匹配字符串;
  • 这条规则其实应该加在OUTPUT上面,相应内容应该在OUTPUT上面出去
[root@server23 ~]# iptables -I OUTPUT -s 172.25.23.23 -m string --algo kmp --string "h7n9" -j REJECT
  • 由于浏览器的缓存原因,建议使用Ctrl+F5进行刷新,页面就会一致得不到相应内容
    这里写图片描述

  • 查看是否匹配到报文
    这里写图片描述

  • 自定义链

  • 首先来添加一条自定义链
[root@server23 ~]# iptables -N NewChain
  • 查看添加的自定义规则链
    这里写图片描述
  • 在自定义链上添加规则
[root@server23 ~]# iptables -A NewChain -d 172.25.255.255 -p icmp -j DROP
[root@server23 ~]# iptables -A NewChain -p tcp ! --syn -m state --state NEW -j DROP
[root@server23 ~]# iptables  -A NewChain -p tcp --tcp-flags ALL ALL -j DROP
[root@server23 ~]# iptables  -A NewChain -p tcp --tcp-flags ALL NONE -j DROP
  • 自定义链首先需要返回
[root@server23 ~]# iptables -A NewChain -d 172.25.23.23 -j RETURN
  • 自定义的链,需要被主链进行调用
[root@server23 ~]# iptables -I INPUT -j NewChain
  • 查看调用的规则
    这里写图片描述
  • 如果需要删除自定义链,首先删除调用
[root@server23 ~]# iptables -D INPUT 1
  • 然后清除自定义链中的规则
[root@server23 ~]# iptables -F NewChain 
  • 接下来可以直接删除自定义链
[root@server23 ~]# iptables -X NewChain
  • recent模块
  • 利用recent来防止恶意的telnet连接
[root@server23 ~]# iptables -I INPUT 1 -d 172.25.23.23 -p tcp --dport 23 -m connlimit --connlimit-above 3 -j DROP
[root@server23 ~]# iptables -I INPUT 2 -d 172.25.23.23 -p tcp --dport 23 -m state --state NEW -m recent --set --name TELNET
[root@server23 ~]# iptables -I INPUT 3 -d 172.25.23.23 -p tcp --dport 23 -m state --state NEW -m recent --update --second 300 --hitcount 3 --name TELNET -j DROP
  • 还需要添加一条关于23端口放行的规则
[root@server23 ~]#  iptables -A INPUT -p tcp -d 172.25.23.23 --dport 23 -m state --state NEW,ESTABLISHED -j ACCEPT
  • 尝试多次telnet之后,就会被拒绝,在300s之后,就可以恢复正常
    这里写图片描述
  • 查看连接追踪信息

这里写图片描述
*

猜你喜欢

转载自blog.csdn.net/qq_36294875/article/details/80036447