一、iptables续
1、显示扩展:必须使用-m选项指明要调用的扩展模块的机制
a、multiport
(1)、以离散或连续的方式定义多端口匹配条件,最多15个
(2)、[!] --source-ports,--sports port[,port|,port:port]...:指定多个源端口
(3)、[!] --destination-ports,--dports port[,port|,port:port]...:指定多个目标端口
(4)、将我们tcp的几个端口开放给INPUT访问
1)、iptables -I INPUT -d 192.168.10.15 -p tcp -m multiport --dports 22,80,139,445,3306 -j ACCEPT
2)、我们将我们定义的第二条规则改为上述规则,先放行INPUT
[root@node3 ~]# iptables --line-numbers -vnL INPUT Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT udp -- * * 0.0.0.0/0 192.168.10.15 udp dpts:137:138 2 2918 215K ACCEPT tcp -- * * 192.168.10.0/24 192.168.10.15 tcp dpt:22 3 3 252 ACCEPT icmp -- * * 0.0.0.0/0 192.168.10.15 icmptype 0 code 0 4 569 46181 REJECT all -- ens33 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable [root@node3 ~]# iptables -R INPUT 2 -d 192.168.10.15 -p tcp -m multiport --dports 22,80,139,445 -j ACCEPT [root@node3 ~]# iptables --line-numbers -vnL INPUT Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT udp -- * * 0.0.0.0/0 192.168.10.15 udp dpts:137:138 2 5 356 ACCEPT tcp -- * * 0.0.0.0/0 192.168.10.15 multiport dports 22,80,139,445 3 3 252 ACCEPT icmp -- * * 0.0.0.0/0 192.168.10.15 icmptype 0 code 0 4 569 46181 REJECT all -- ens33 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
3)、再放行OUTPUT
[root@node3 ~]# iptables --line-numbers -vnL OUTPUT Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT udp -- * * 192.168.10.15 0.0.0.0/0 udp spts:137:138 2 1877 197K ACCEPT tcp -- * * 192.168.10.15 192.168.10.0/24 tcp spt:22 3 21 1764 ACCEPT icmp -- * * 192.168.10.15 0.0.0.0/0 icmptype 8 4 15 1680 REJECT all -- * ens33 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable [root@node3 ~]# iptables -R OUTPUT 2 -s 192.168.10.15 -p tcp -m multiport --sports 22,80,139,445 -j ACCEPT [root@node3 ~]# iptables --line-numbers -vnL OUTPUT Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT udp -- * * 192.168.10.15 0.0.0.0/0 udp spts:137:138 2 4 576 ACCEPT tcp -- * * 192.168.10.15 0.0.0.0/0 multiport sports 22,80,139,445 3 21 1764 ACCEPT icmp -- * * 192.168.10.15 0.0.0.0/0 icmptype 8 4 15 1680 REJECT all -- * ens33 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
b、iprange
(1)、以连续地址块的方式来指明多IP地址匹配条件
(2)、[!] --src-range from [-to]
(3)、[!] --dst-range from [-to]
(4)、我们开放本机的telnet服务,只开放telnet给指定地址范围内的主机访问。即开放23号端口
1)、首先要启动telnet服务,可以看到23号端口生效了
systemctl start telnet.socket (注意看是socket)
2)、开放INPUT
[root@node3 ~]# iptables --line-numbers -vnL INPUT Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT udp -- * * 0.0.0.0/0 192.168.10.15 udp dpts:137:138 2 282 20176 ACCEPT tcp -- * * 0.0.0.0/0 192.168.10.15 multiport dports 22,80,139,445 3 3 252 ACCEPT icmp -- * * 0.0.0.0/0 192.168.10.15 icmptype 0 code 0 4 589 48051 REJECT all -- ens33 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable [root@node3 ~]# iptables -I INPUT 3 -d 192.168.10.15 -p tcp --dport 23 -m iprange --src-range 192.168.10.10-192.168.10.20 -j ACCEPT [root@node3 ~]# iptables --line-numbers -vnL INPUT Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT udp -- * * 0.0.0.0/0 192.168.10.15 udp dpts:137:138 2 497 35504 ACCEPT tcp -- * * 0.0.0.0/0 192.168.10.15 multiport dports 22,80,139,445 3 0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.10.15 tcp dpt:23 source IP range 192.168.10.10-192.168.10.20 4 3 252 ACCEPT icmp -- * * 0.0.0.0/0 192.168.10.15 icmptype 0 code 0 5 589 48051 REJECT all -- ens33 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
3)、开放OUTPUT
[root@node3 ~]# iptables -I OUTPUT 3 -s 192.168.10.15 -p tcp --sport 23 -m iprange --dst-range 192.168.10.10-192.168.10.20 -j ACCEPT [root@node3 ~]# iptables --line-numbers -vnL OUTPUT Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT udp -- * * 192.168.10.15 0.0.0.0/0 udp spts:137:138 2 347 34548 ACCEPT tcp -- * * 192.168.10.15 0.0.0.0/0 multiport sports 22,80,139,445 3 0 0 ACCEPT tcp -- * * 192.168.10.15 0.0.0.0/0 tcp spt:23 destination IP range 192.168.10.10-192.168.10.20 4 21 1764 ACCEPT icmp -- * * 192.168.10.15 0.0.0.0/0 icmptype 8 5 15 1680 REJECT all -- * ens33 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
4)、我们发现就可以在指定的地址范围内通过telnet进行登录了
c、time:
(1)用来匹配在什么时间能够访问网络什么时间不能访问网络
(2)、--timestart hh:mm[:ss] #起始时间范围
(3)、--timestop hh:mm[:ss] #结束时间范围
(4)、[!] --weekdays day[,day...] #使用周几的时间范围
(5)、[!] --monthdays day[,day...] #使用每月的几号允许或拒绝,一般和周几的时间范围不一起用,否则会取交集
(6)、--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] #
(7)、--datestop [-MM[-DD[Thh[:mm[:ss]]]]]
(8)、kerneltz:使用内核配置的时区而非默认的UTC
(9)、演示:我们将刚刚的telnet规则进行修改,修改为只开放给有限的几个人访问,并且限制只在指定时间段内进行访问。假如我们工作时间是早上十点到下午四点。
1)、首先我们需要开放访问我们的时间服务器的端口123和323(主要是为了同步时间服务器使时间准确)
2)、添加相应的规则。先是INPUT。意思是我们来自于192.168.10.10-192.168.10.20访问我们192.168.10.15主机23号端口的时候都允许,并且时间范围是周1到周五的10点到16点之间的时候。并且时区需要使用内核配置的时区。
[root@node3 ~]# iptables -R INPUT 3 -d 192.168.10.15 -p tcp --dport 23 -m iprange --src-range 192.168.10.10-192.168.10.20 -m time --timestart 10:00:00 --timestop 16:00:00 --weekdays 1,2,3,4 ,5 --kerneltz -j ACCEPT
3)、添加OUTPUT上的规则
[root@node3 ~]# iptables --line-numbers -vnL OUTPUT Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT udp -- * * 192.168.10.15 0.0.0.0/0 udp spts:137:138 2 882 88748 ACCEPT tcp -- * * 192.168.10.15 0.0.0.0/0 multiport sports 22,80,139,445 3 0 0 ACCEPT tcp -- * * 192.168.10.15 0.0.0.0/0 tcp spt:23 destination IP range 192.168.10.10-192.168.10.20 TIME from 10:00:00 to 16:00:00 on M on,Tue,Wed,Thu,Fri4 21 1764 ACCEPT icmp -- * * 192.168.10.15 0.0.0.0/0 icmptype 8 5 15 1680 REJECT all -- * ens33 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
4)、此时我们相应的主机就只有在固定时间段才能连上我们的环境了
d、string:字符串匹配
(1)、this modules matches a given string by using some pattern matching strategy
(2)、--algo {bm | kmp}
(3)、[!] --string pattern
(4)、[!] --hex-string pattern
(5)、--from offset
(6)、--to offset
(7)、示例:iptables -I OUTPUT -m string --algo bm --string "gay" -j REJECT
29:19