当在Linux服务器上开启了不同的服务后,就会开启不同的端口。当黑客进行入侵时,一般都会使用扫描工具对目标主机进行扫描检测,来判断其开启了哪些端口,进而确定其安装了哪些服务。使用IPTables编写相应的规则,可以有效防止端口扫描。
例 如, 执 行 命 令“iptables -A INPUT -p all -m state -state ESTABLISHED,RELATED -j ACCEPT”,可 以 在“Filter”表中的“INPUT”链中追加一条规则,其作用是允许已经建立或者由其产生的网络连接通过防火墙。在默认状态下,其针对的是“Filter”表。
当然,也可以使用“-t filter”参数来指明。因为黑客发起扫描,对于服务器来说是接收扫描数据包的行为,所以应该将防御规则添加到“INPUT”链中。其中的“A”参数表示追加规则,“-p all”参数表示对于所有的协议有效,“-m state”参数表示使用状 态 匹 配 模 块,“--state ESTABLISHED,RELATED”参数表示针对已经建立和由其产生的连接状态进行处理,“-j ACCEPT”参数表示对符合条件的数据包放行。
继续执行“iptables -A INPUT -p all -m -state NEW -m recent -name saomiao -update -seconds 600 -hitcount 10 -j DROP”命令,来追加一条规则,其作用是对于新建立的网络连接来说,当防火墙检测到在10分钟内连续新建10个以上连接时,就进行拦截。
当然,可以根据具体情况进行调整。其中的“NEW”表示针对的是新建立的连接进行处理,“-m recent”参数是启用“recent”模式,该模块的作用是匹配特定数据包的重复率。“--name saomiao”参数的作用是使用名为“saomiao”的记录文件,其中存储所有连接的信息(包括IP、连接时间等参数)。“-update”参数检测该网络连接的地址是否出现在记录文件中,并且以最后一个匹配来计算时间。
如果使用“--rcheck”参数的话,同样可以检查地址是否存在在记录文件中,但是以第一个匹配开始记录时间。因为对于某个连接地址来说,可能在记录文件中多次出现。“-seconds 600-hitcount 10 -j DROP”参数表示在600秒内在上述记录文件存在10条以上记录的话,就将其丢弃。
继 续 执 行“iptables-A INPUT -p tcp -syn-m state -state NEW-m multiport -dports 21,22,80,3306 -j ACCEPT”,来追加一条规则,其作用是对 于 针 对 TCP 21、22、80、3306端口的连接放行。其中的“--syn”参数表示使用“syn”标记来检测针对TCP 21、22、80、3306 端口的连接是否为新建立的连接,因为在建立TCP连接的过程中,TCP的首个数据包中会只包含该标记。
“-m multiport” 参 数表示启用多端口匹配模块,“-dports”参数指定所有相关的端口。继续执行“iptables -A INPUT -p all-m recent -name saomiao-set -j ACCEPT”命令,来追加一条规则,其作用是创建名为“saomiao”的记录文件,记录所有的连接信息,其中的“--set”表示将符合条件的来源数据包添加到记录文件中,如果已经存在,则更新记录文件相关的记录信息。
因此,该规则的主要作用就是计算连接次数。在“Filter”过 滤 表 中 的“INPUT”链中追加了以上规则后,当黑客扫描本机时,因为其通常会扫描某个端口范围(例如从TCP 1000到5000等),只要在本小时内其扫描的端口数量超过10个(其中不 包 含 TCP 21、22、80、3306端口),就会被防火墙拦截,让黑客的扫描器无法发挥作用,其“踩点”行为必然失败。
对于SSH来说,最好的使用方法是随用随开。当使用完毕后,自动将其关闭。这样,不仅利于管理,还可以有效防范黑客偷袭。
其实,只有合理配置规则,就可以实现上述功能。例如管理员可以自定义PING数据包的大小,当发送特定大小的PING数据包时,可以开启或者关闭TCP 22端口。执行“iptables -A INPUT -p icmp -icmp-type echo-request -m length-length 1028 LOG -logprefix "autossh"”命 令,可 以 在“Filter”表 中 的“INPUT”链中追加一条规则,其作用是对于发送长度为1028字节的PING数据包的网络连接进行记录,将其添加“autossh”的前缀信息,存放到系统日志中。
其 中 的“-p icmp” 参数表示处理ICMP协议,“-icmp-type echo-request”参数表示匹配ICMP连接类型,这里为请求连接的PING数据包。“-m”参数表示使用扩展匹配选项,“length-length 1028”参数表示匹配特定长度的ICMP数据包,这里长度为1028字节。“-log-prefix”参数表示执行记录操作,并添加指定的前缀。执行“iptables -A INPUT -p icmp -icmp-type echo-request -m length-length 968-m recent -set-name opendoor -rsource-j ACCEPT”命令,可以追加一条规则,对于符合上述长度要求的ICMP连接进行记录,记录文件为“opendoor”。“--rsource”参数表示同步记录源地址。
执 行“iptables -A INPUT -p tcp -dport 22-syn -m recent -rcheck-seconds 60 -name opendoor -rsource -j ACCEPT”命令,来追加一条规则。其作用是检测在60秒时间内,在名为“opendoor”的记录文件内是否存在地址记录信息,如果有的话,就允许其连接本机TCP 22端口。执行“iptables -A INPUT -p icmp -icmp-type echo-request -m length-length 1098 -m recent-set -name opendoor-rmove -j ACCEPT”命令,可以追加一条规则,其作用是当接收到客户端发来长度为1098字节的ICMP数据包时,将其地址从名为“opendoor”的记录文件中删除,其中的“-rmove”参数表示删除记录文件内容。当然,对于已经存在的连接是允许的。
执 行“iptables -A INPUT -m state -state ESTABLISHED -j ACCEPT”命令,添加所需规则即可。这样,在客户端执行“ping xxx.xxx.xxx.xxx -l 1008”,向Linux服务器(假设其地址 为“xxx.xxx.xxx.xxx”)发送长度为1008的ICMP包,其中的“-l”参数可以指定数据包大小,注意因为ICMP和IP头长度之和为20字节,所以实际发送的指定的长度应该为1008,当Linux服务器接收到该长度的ICMP数据包后,依据上述规则,Linux服务器就允许其使用SSH连接访问了。对应的,执行“ping xxx.xxx.xxx.xxx-l 1078”名命令,向服务器发送长度为1078的ICMP数据包,服务器就会按照预设规则禁止其建立新的SSH连接。对于已经建立的SSH连接,则不予拦截。
SYN攻击利用TCP协议缺陷,通过发送大量的半连接请求,耗费服务器CPU和内存资源。SYN攻击除了能影响主机外,还可以危害路由器、防火墙等网络系统。
对于非伪造IP发起的SYN洪水攻击,可以使用对应的IPTables规则进行防御,这对于防御CC攻击同样有效。执行“iptables -A INPUT -p tcp -dport 80-syn recent -name antidos-rcheck -seconds 30-hitcount 10 -j LOG -log-prefix ‘fyhs:’ -log-ipoptions”命令可以追加一条规则,作用是当客户端针对Linux服务器的TCP 80端口发起连接时,如果在30秒内连接次数超过10个,就记录客户端的IP等信息,其中的“-log-ip-options”参数表示记录连接着的IP。
执 行“iptables -A INPUT -p tcp -dport 80-syn recent -name antidos-rcheck -seconds 30-hitcount 10 -j DROP”命令添加一条规则,当满足以上连接条件后,禁止继续连接。执 行“iptables -A INPUT-p tcp -dport 80 -syn -m recent -name antodos -ser-j ACCEPT”命令添加一条规则,创建名为“antidos”的记录文件,记录符合要求的连接信息,例如10条以内的连接信息等。
在一些Web服务器(如IIS服务器等)上往往存在各种漏洞,给黑客入侵带来了很大的便利。例如,黑客可以在浏览器工具栏中针对不同的Web服务器漏洞,非法提交各种带有危险指令的URL链接,或使用专用的黑客工具来向目标服务器提交精心“设计”的访问语句。对此,可以在Linux网关设置对应的规则进行拦截。
例如,在黑客提交的不法URL地址中可能包含“/c/windows/system32/cmd.exe”之类的语句,作用是调用系统目录中的“cmd.exe”程序来执行各种命令。例如黑客会调用Web服务器上的FTP客户端程序“ftp.exe”,从指定的网址下载并激活病毒木马进行渗透攻击。
在Linux网关上执行“iptable -A FORWARD -i eth0 -o eth1 -p tcp -d 192.168.1.10 -dport 80 -m string -algo bm -string"system32" -j DROP”命令,在“Filter”表中的“FORWARD”链上添加一条规则,作用是当检测到经过防火墙的数据包中包含“system32”内容,并且发送给IP为“192.168.0.10”,目标端口为TCP 80的主机时,就进行拦截。其中的“-i eth0”参数表示进入的网卡接口,“-o eth1”参数表示发送出的网络接口,“-d 192.168.1.10”参数指定目标IP。
此外,当病毒侵入服务器后,往往会疯狂的和外界建立各种连接,防火墙上大量的跟踪记录会不堪重负,为此可以执行“iptable -A FORWARD -i eth1 -o eth0 -p all -m state -state NEW-m recent -name warning-update -seconds 120-hitcount 120 -j REJECT” 和“iptable -A FORWARD-i eth1 -o eth0 -p all -m state -state NEW -m recent-name warning --set”指令,在“Filter” 表 中 的“FORWARD”链中追加两条规则,作用是针对从“eth0”网络接口进入从“eth1”网络接口发出的数据连接,如果在2分钟之内连续出现120个新建立的连接,将其视为病毒发起的恶意连接,并进行拦截。因为网关处理的是客户端和内网服务器互传的数据,所以需要在“FORWARD”链上配置过滤规则。
SSH连接通道可以让管理员远程管理Linux服务器。黑客为非法控制目标Linux服务器,也会想方设法破解SSH连接密码。黑客往往会借助专用的破解工具,配合密码字典来加快破解的速度。对此,可以执行“iptables -A INPUT -p tcp -syn -dport 22 -m recent -name caice-update -seconfs 120-hitcount 4 -j DROP”命令,在“Filter”表中的“INPUT”链中追加一条规则,作用是如果在120秒内检测到针对TCP 22端口的首次连接数量超过4次,就对其进行拦截。
其中的“-p tcp”参数表示针对TCP协议生效,因为SSH使用的是TCP 22端口。“-dport”参数表示目标端口为 22,“-name caice”参 数表示记录文件名为“caice”。执 行“iptables -A Input-p -syn -dport 22 - m recent -name caice --set-j ACCEPT”命令,追加一条防火墙规则,其作用是创建名为“caice”的记录文件,将首个SSH连接信息写入到该记录文件中,作为上一条规则的检测条件。因为建立TCP连接需要进行三次握手操作,所以以上针对4个首次连接的处理操作,实际上会对12次SSH连接进行过滤。
即如果黑客在2分钟内连续建立针对TCP 22端口的连接超过预设值,就被会视为非法破解密码。使用VI命令打开“/etc/ssh/sshd_config”文 件,在 其 中 的“MaxAuthTries”参数中存储的是最大允许连接次数,默认为6。即如果连接者在手工连接时,如果连续6次输错密码,Linux服务器就会终止该连接过程。为安全起见,建议为其设置一个更小的数值,例如只允许尝试3次连接等。
当然,SSH属于加密连接方式,使用IRIS等抓包工具,是无法读取其中的真实数据的。对于非加密连接,是可以针对其发送的数据包中的特征字符串进行过滤拦截的。例如对于邮件服务器来说,如果黑客破解了用户邮箱的密码,就可以非法连接POP3服务。使用WireShark等嗅探工具,针对POP3的连接过程进行分析,可以发现当使用错误的密码连接时,在返回的数据包中会出现“-ERR Authentication failed”。
当黑客对POP3服务器进行密码破解时,也必然在返回的数据包中出现以上内容,因为黑客要经过多次尝试破解。因此执行“iptables-A OUTPUT -p tcp --algo bm -sport 110 -m string-algo bm -string "-ERR Authentication failed "-m recent -name mailcc-update -seconds 600-hitcount 6 -j REJECT”命令,可以在“Filter”表中的“OUTPUT”链中追加一条规则,其作用是检测针对源TCP 110端口发出的数据包的内容进行过滤,如果发现其中包含“-ERR Authentication failed”内容,并且在名为“mailcc”的记录文件中记录的连接数量在600秒内超过6次时,就对其拦截。
其中的“OUTPUT”参数表示针对的是“OUTPUT”链,因为POP3服务器会将应答信息通过该“OUTPUT”链返回给客户端。“-sport 110”参数表示源端口为110,“--algo bm”参数表示使用的匹配的算法为Boyer-Mppre,参数“-string”表示匹配指定的字符串,“-j REJECT”参数表示执行拦截操作,但是会给客户端发送一个ICMP包给客户端。表示网络连接出现了问题。继续执行“iptables-A OUTPUT -p tcp --algo bm -sport 110 -m string-algo bm -string "-ERR Authentication failed "-m recent -name mailcc-set”命令,来追加一条规则,其作用是创建名为“mailcc”的记录文件,记录针对满足以上条件网络连接,为上一条规则提供检测基础。