当前位置:网站首页>Web主机iptables防火墙安全脚本
Web主机iptables防火墙安全脚本
2022-06-30 19:50:00 【星哥玩云】
系统的默认策略是INPUT为DROP,OUTPUT、FORWARD链为ACCEPT,DROP设置得比较宽松,因为我们知道出去的数据包比较安全;为了验证脚本的通用性,我特的查看了服务器的内核及iptables版本,命令如下所示:
uname-a iptables -V
如果大家要采用iptables作为主机防火墙时,建议用CentOS5.6 x86_64或更高版本,不然系统会有如下错误信息:
iptables: Unknown error 18446744073709551615 iptables:Invalid argument 在tail-f /var/log/messages时能发下面的的出错提示 ip_tables: connlimit match: invalid size 32 != 16 ip_tables: connlimit match: invalid size 32 != 24
另外,在生产环境下调试iptables脚本前,强烈建议编写crontab任务,每5分钟关闭一次iptalbes脚本,防止将SSH客户端锁在外面,命令如下所示:
*/5* * * * root /etc/init.d/iptablesstop
脚本代码如下所示:
#!/bin/bash iptables -F iptables -F -t nat iptables -X iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT #load connection-tracking modules modprobe iptable_nat modprobe ip_conntrack_ftp modprobe ip_nat_ftp iptables -A INPUT -f -m limit --limit 100/sec--limit-burst 100 -j ACCEPT iptables -A INPUT -p icmp --icmp-typeecho-request -m limit --limit 1/s--limit-burst 10 -j ACCEPT iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 20/sec--limit-burst 200 -j ACCEPT iptables -A INPUT -s 122.70.x.x -j ACCEPT iptables -A INPUT -s 122.70.x.x -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp -m multiport --dport 80,22 -j ACCEPT
这里有一种特殊情况,由于此Web服务器是置于负载均衡器后面,所以与负载均衡器的连接还是很频繁的;所以我们要允许数据源地址为负载均衡器的数据包通过;另外,我的许多基于LNMP的小网站上面也部署了此脚本,即Web服务和MySQL数据库同时安装在一台机器上,也没有开放3306端口,这个靠Web调用PHP程序实现访问。
成功运行此脚本后系统应该是不会报错的,命令如下:
iptables -nv –L
此命令显示结果如下
Chain INPUT (policy DROP 610 packets, 50967 bytes) pkts bytes target prot opt inout sourcedestination 0 0 ACCEPT all -f * * 0.0.0.0/00.0.0.0/0limit: avg 100/secburst 100 6100 314K ACCEPT tcp -- * * 0.0.0.0/00.0.0.0/0tcp flags:0x16/0x02limit: avg 20/secburst 200 1052 67637 ACCEPT all -- * * 122.70.x.x 0.0.0.0/0 986 58112 ACCEPT all -- * * 122.70.x.x 0.0.0.0/0 918 131K ACCEPT all -- lo * 0.0.0.0/00.0.0.0/0 97056 12M ACCEPT all -- * * 0.0.0.0/00.0.0.0/0state RELATED,ESTABLISHED 4325 218K ACCEPT tcp -- * * 0.0.0.0/00.0.0.0/0multiport dports 80,22 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt inout sourcedestination 0 0 ACCEPT icmp -- * * 0.0.0.0/00.0.0.0/0icmp type8 limit: avg 1/secburst 10 Chain OUTPUT (policy ACCEPT 144K packets, 155M bytes) pkts bytes target prot opt inout sourcedestination 956 134K ACCEPT all -- * lo 0.0.0.0/00.0.0.0/0
下面我稍为详细的解释下此脚本: 在主机的防护上我们配置了一些安全措施,以防止外部的ping和SYN洪水攻击,并且考虑到外部的疯狂端口扫描软件可能会影响服务器的入口带宽,所以在这里也做了限制。命令如下所示:
iptables -A INPUT -p tcp --syn -m limit --limit 100/s--limit-burst 100 -j ACCEPT
上面的命令每秒钟最多允许100个新连接,请注意这里的新连接指的是state为New的数据包,在后面我们也配置了允许状态为ESTABLISHED和RELATED的数据通过;另外,100这个阀值则要根据服务器的实际情况来调整,如果是并发量不大的服务器这个数值就要调小,如果是访问量非常大且并发数不小的服务器,这个值则还需要调大。
iptables -A INPUT -p icmp --icmp-typeecho-request -m limit --limit 1/s–limit-burst 10 -j ACCEPT 这是为了防止ping洪水攻击,限制每秒的ping包不超过10个。 iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 20/sec--limit-burst 200 -j ACCEPT
上面的命令防止各种端口扫描,将SYN及ACK SYN限制为每秒钟不超过200个,免得把数务器带宽耗尽了。
iptables防火墙运行后,我们可以运行nmap工具进行扫描,命令如下:
nmap -P0 -sS 211.143.6.x
此命令的执行结果如下:
Starting Nmap 4.11 ( http://www.insecure.org/nmap/) at 2009-03-29 16:21 CST Interesting ports on 211.143.6.X: Not shown: 1668 closed ports PORT STATE SERVICE 22/tcpopenssh 25/tcpopensmtp 80/tcpopenhttp 110/tcpopenpop3 111/tcpopenrpcbind 143/tcpopenimap 443/tcpopenhttps 465/tcpopensmtps 587/tcpopensubmission 993/tcpopenimaps 995/tcpopenpop3s 1014/tcpopenunknown
在这里,我们发现一个1014端被某个进程打开了,用lsof -i:1014查看发现又是rpc.statd打开的,这服务每次用的端口都不一样啊!本来想置之不理的,但是如果rpc.statd不能正确处理SIGPID信号,远程攻击者可利用这个漏洞关闭进程,进行拒绝服务攻击,所以还是得想办法解决掉,我们发现rpc.statd是由服务nfslock开启的,进一步查询得知它是一个可选的进程,它允许NFS客户端在服务器上对文件加锁。这个进程对应于nfslock服务,于是我们关掉了此服务,命令如下所示:
service nfslock stop chkconfig nfslock off
没有硬件防火墙保护的话,置于IDC机房并且有公网的Web服务器还是很有用iptables保护的必要,如果发现有人用工具恶意频繁连接我们的Web服务器,我们可以调用recent模块来阻止它们。
-A INPUT -p tcp --syn -m limit --limit 12/s --limit-burst 24 -j ACCEPT 防止DDOS的SYN
边栏推荐
- Which brokerage has the lowest commission? In addition, is it safe to open a mobile account?
- Kubevela 1.4: make application delivery safer, easier to use, and more transparent
- Qt:qaxobject operation Excel
- Primary school, session 3 - afternoon: Web_ sessionlfi
- 英语没学好到底能不能做coder,别再纠结了先学起来
- mysql主从同步
- 小学期,第三场-下午:WEB_sessionlfi
- 昔日果汁大王,16个亿卖了
- exness:美GDP终值意外加速萎缩1.6%
- S7-1500 PLC之间进行TCP通信的具体方法和步骤详解(图文)
猜你喜欢

传输层 使用滑动窗口实现流量控制

【Try to Hack】Windows系统账户安全

1. 爬虫之Beautifulsoup解析库&在线解析图片验证码

【1175. 质数排列】

计网 | 【五 传输层、六 应用层】知识点及例题

Cv+deep learning network architecture pytoch recurrence series basenets (backbones) (I)

神经网络入门(上)

Why must we move from Devops to bizdevops?

Tencent conference application market was officially launched, with more than 20 applications in the first batch
MySQL数据库误删回滚的解决
随机推荐
Character class of regular series
25:第三章:开发通行证服务:8:【注册/登录】接口:接收并校验“手机号和验证码”参数;(重点需要知道【利用redis来暂存数据,获取数据的】的应用场景)(使用到了【@Valid注解】参数校验)
暑期实训21组第一周个人工作总结
exness:美GDP终值意外加速萎缩1.6%
4.3-inch touch screen 12 channel control port programmable network central control supports mutual backup of 5 central control hosts
Why should offline stores do new retail?
CADD course learning (2) -- target crystal structure information
Primary school, session 3 - afternoon: Web_ xxe
项目经理面试常见问题及回答技巧
Warmup预热学习率「建议收藏」
盘点华为云GaussDB(for Redis)六大秒级能力
WeakSet
Graduates
Client请求外部接口标准处理方式
超视频时代的音视频架构建设|Science和英特尔联袂推出“架构师成长计划”第二季
CV+Deep Learning——网络架构Pytorch复现系列——basenets(BackBones)(一)
Exness: liquidity series - liquidity cleaning and reversal, decision interval
Go language learning tutorial (13)
十分之坑,tar命令解压文件的时候竟然不能解析英文括号“()”
VR全景拍摄为什么要加盟?巧借资源实现共赢