9个实验带你了解iptables的显示扩展规则设置


本小结重点讲解一下iptables的显示扩展规则设置
显示扩展:必须显式地指明使用的扩展模块进行扩展; 使用帮助: Centos 6:man Iptables Centos 7:man iptables-extensions实验1:multiport扩展 以离散的方式定义多端口匹配;最多指定15个端口; [!]–source-ports,–sports port,port,….:指定多个源端口; [!]–destination-ports,–dports port,port….:指定多个目标端口 [!]–ports port,port…:指明多个端口,不管是源端口还是目标端口都匹配 允许192.168.32.163这台主机访问本机的22,80端口 iptables -A INPUT -s 192.168.32.163 -d 192.168.32.144 -p tcp -m multiport –dports 22,80 -j ACCEPT实验2:iprange扩展 指明连续的(但一般不能是整个网络)ip地址范围; [!]–src-rang from[-to]:源IP地址; [!]–dst-rang from[-to]:目标IP地址; 172.16.100.5主机到172.16.100.10主机不能访问本机的web服务 iptables -A INPUT -d 192.168.32.144 -p tcp –dport 80 -m iprange –src-range 172.16.100.5-172.16.100.10 -j DROP实验3:string扩展 对报文中的应用层数据做字符串模式匹配检测; –algo{bm|kmp}:字符串匹配检测算法; bm:Boyer-Moore kmp:Knuth-Pratt_Morrls [!]–string patter:要检测的字符串模式; [!]–hex-string patter:要检测的字符创模式,16进制格式; 限制192.168.32.163访问本机web网页中含有have内容的网页。
必须定义到OUTPUT中因为请求的报文中是不带需要限制的字符串的,只有响应的报文中才带有需要限制的字符串 iptables -A OUTPUT -s 192.168.32.144 -d 192.168.32.163 -p tcp –sport 80 -m string –algo bm –string “have” -j REJECT在本机安装web服务,并创建两个页面,其中一个含有have字符串,
初始状态防火墙未做任何规则
此时客户端可以正常访问web服务器
添加防火墙规则
iptables -A OUTPUT -s 192.168.32.144 -d 192.168.32.163 -p tcp –sport 80 -m string –algo bm –string “have” -j REJECT含有have字段的网页不能够访问

实验4:time扩展 根据将报文到达时间与指定的时间范围进行匹配 –datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] –datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]] –datestart 1970-01-01T00:00:00 –datestop 2030-01-19T04:17:07 –timestart hh:mm[:ss] –timestop hh:mm[:ss] [!]–monthdays day[,day] Possible values are 1 to 31. [!]–weekdays day[,day] Possible values are Mon,Tue,Wed,Thu,Fri,Sat,Sun –kerneltz:使用内核上的时区,而非默认的UTC; 定义本机的web服务在每周末下午的14:30到18:30不允许192.168.32.145主机访问 iptables -AINPUT -s 192.168.32.163 -d 192.168.32.144 -p tcp –dport 80 -m time –timestart 14:30 –timestop 18:30 –weekdays Sat,Sun –kerneltz -j DROP未使用time扩展设置防火墙规则时客户端可以正常网站客户端可以正常访问web服务添加time扩展访问规则

实验5:connlimit扩展 根据每客户端IP做并发连接数量匹配; –connlimit-upto n:连接的数量小于等于n时匹配; –connlimit-above n:连接的数量大于n时匹配; 我们要求每个客户端IP最多能够连接两个 iptables -A INPUT -d 192.168.32.144 -p tcp –dport 21 -m connlimit –connlimit-above 2 -j REJECT实验6:limit扩展 基于收发报文的速率做匹配; 令牌桶过滤器: –limit rate[/second | /minute| /hour| /day] –limit-burst number 每分钟只允许其它主机对本主机进行ping操作三次,峰值最大为5 iptables -I INPUT -d 192.168.32.144 -p icmp –icmp-type 8 -m limit –limit 10/minute –limit-burst 5 -j ACCEPT 满足条件执行放行策略 iptables -I INPUT 2 -p icmp -j REJECT加一条拒绝规则设置规则之前:添加规则:
实验7:state扩展 根据“连接追踪机制”去检查连接的状态;跟TCP协议没有关系 如何判断从本机发出的一个连接是对别人请求的响应还是自己发起的请求? 可以通过本机记录的conntrack追踪结果,在有效时间内,可以查看到每个对本机的请求连接跟本机反馈的结果的之间的对应关系 conntrack机制:追踪本机上的请求和响应之间关系;状态有如下几种; NEW:新发出请求;连接追踪模板中不存在此连接的信息条目,因此,将其识别为第一次发出的请求; ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信状态; RELATED:相关联的连接;如ftp协议中的命令连接与书籍之间的关系; INVALID:无效的连接; UNTRACKEN:为进行追踪的连接; 正常情况下,服务器是不会通过80端口主动发起连接请求,22号端口正常情况下也是不会主动发起连接请求 允许NEW请求连接进来 iptables -A INPUT -d 192.168.32.144-p tcp –dport 80 -m state –state NEW -j ACCEPT INPUT链放行NEW,ESTABLISHED iptables -AINPUT -d 192.168.32.144 -p tcp -m multiport –dports 22,80 -m state –state NEW,ESTABLISHED -j ACCEPT OUTPUT链放行ESTABLISHED iptables -A OUTPUT -s 192.168.32.144 -p tcp -m multiport –sports 22,80 -m state –state ESTABLISHED -j ACCEPT 更改默认策略全部为DROP: iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP 客户端可以正常访问:
调整连接追踪功能所能容纳的最大连接数量: /proc/sys/net/nf_contrack_max 已经追踪到的并记录下来的连接: /proc/net/nf_conntrack 不同的协议的连续追踪时长 /proc/sys/net/netfilter/ iptables的链接跟踪最大容量为/proc/sys/net/ipv4/ip_conntrack_max,链接碰到各种状态的超时后就会从表中删除;当模板满载时,后续的连接可能会超时 解决方法一般有两个: (1)加大nf_conntrack_max值 vim /etc/sysctl.conf net.ipv4.nf_conntrack_max=393216 net.ipv4.netfilter.nf_conntrack_max=393216 (2)降低nf_conntrack timeout时间 vim /etc/sysctl.conf net.ipv4.netfilter.nf_conntrack_tcp_timeout_established=300 net.ipv4.netfilter.nf_conntrack_tcp_timeout_time_wait=120 net.ipv4.netfilter.nf_conntrack_tcp_timeout_close_wait=60 net.ipv4.netfilter.nf_conntrack_tcp_timeout_fin_wait=120实验8:如何开放被动模式的ftp ftp主动链接模免费云主机域名式。客户端发起请求连接服务器21号端口,服务器端进程会通过本机的20号端口主动去连接客户端随机端口+1的端口(新数据请求),客户端有可能存在防火墙, ftp被动连接模式。客户端请服务器发起数据下载请求,服务器端随机使用一个端口响应, 服务器端判断数据连接是不是与此前的某个命令连接有关联关系,只要数据连与此前的命令连接有关联关系,防火墙就放行,不从端口放行,以转态为标准。 先复制一个文件到/var/ftp/pub cp /etc/issue /var/ftp/pub/ 防火墙初始状态: 因为要使用远程连接功能,所以放行了22号端口
客户端使用lftp连接发现连接失败 手动记载连接追踪的模块 modprobe nf_conntrack_ftp 设置防火墙规则放行命令连接: iptables -A INPUT -d 192.168.32.144 -p tcp –dport 21 -m state –state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -s 192.168.32.144 -p tcp –sport 21 -m state –state ESTABLISHED -j ACCEPT 放行数据连接: iptables -A INPUT -d 192.168.32.144 -p tcp -m state –state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -s 192.168.32.144 -p tcp -m state –state ESTABLISHED -j ACCEPT 此时继续访问可以看到
实验9:规则优化: 服务器规则优化设定:任何不允许的访问,应该在请求到达时给予拒绝; (1)可安全放行所有入站的状态为ESTABLISHED状态连接; (2)可安全放行所有出站的状态为ESTABLISHED状态连接; (3)谨慎放行入站的新请求; (4)有特殊目的的限制访问功能,要于芳心规则之前加以决绝; iptables -I INPUT -d 192.168.32.144 -m state –state ESTABLISHED -j ACCEPT iptables -I INPUT 2 -d 192.168.32.144 -p tcp -m multiport –dport 21,22,80 -m state –state NEW -j ACCEPT iptables -I INPUT 3 -d 192.168.32.144 -p tcp -m state –state RELATED -j ACCEPT iptables -D INPUT 4 iptables -D INPUT 4 iptables -D INPUT 4 出站规则设定 iptables -I OUTPUT -s 192.168.32.144 -m state –state ESTABLISHED -j ACCEPT iptables -D OUTPUT 2 iptables -D OUTPUT 2iptables -D OUTPUT 2 限制掉web服务反馈的请求中含有have的页面
iptables -I OUTPUT -m string –algo kmp –string “have” -j REJECT 备注:其实在前端的web服务异常繁忙的服务器上的使用state连接追踪功能是不明智的,在讲到集群负载的时候我们将重点讨论这个问题










相关推荐: Unity3D加密外壳如何做到防止反编译?

各位Unity3D的开发者,你还为你的代码被反编译而头疼, 混淆和加密已经失效,为内存dump代码而烦恼?是否辛苦制作的游戏被盗版被抄袭而烦恼?是否害怕算法被别人参考要把算法写成C++而费劲周折?快来使用深思数盾外壳保护(Sense Shi免费云主机域名eld…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 02/01 14:57
Next 02/01 15:26