安全的Web主机iptables防火墙脚本
下面以自己的Web服务器举例说明之,系统的默认策略是INPUT为DROP,OUTPUT、FORWARD链为ACCEPT,DROP设置得比较宽松,因为我们知道出去的数据包比较安全;为了验证脚本的通用性,我特的查看了服务器的内核及iptables版本,命令如下所示:
1 2 3 4 5 6 7 8 9 10 | uname -a Linux ud50041 2.6.9-34.ELsmp #1 SMP Fri Feb 24 16:54:53 EST 2006 i686 i686 i386 GNU/Linux iptables -V iptables v1.2.11 lsb_release -a LSB Version: :core-3.0-ia32:core-3.0-noarch:graphics-3.0-ia32:graphics-3.0-noarch Distributor ID: RedHatEnterpriseAS Description: Red Hat Enterprise Linux AS release 4 (Nahant Update 3) Release: 4 Codename: NahantUpdate3 |
大家可以发现,此系统为RHEL4_i386系统,系统内核版本为2.6.9-34,iptables版本为1.2.11;另外我在别的Centos5.5 x86_64机器上也成功部署了此脚本;由于后续的recent安全模块对系统内核有要求(这个作为主机防护脚本也经常用到),如果大家要采用iptables作为主机防火墙时,建议用Centos5.6 x86_64或更高级版本,不然系统会有如下提示错误信息:
1 2 3 4 5 | 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客户端锁在外面,命令如下所示:
1 | * /5 * * * * root /etc/init .d /iptables stop |
脚本代码如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/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- type echo -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程序实现访问。
成功运行此脚本后系统应该是不会报错的,命令如下:
1 | iptables -nv –L |
此命令显示结果如下(此为另一台LNMP机器的脚本显示结果):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Chain INPUT (policy DROP 610 packets, 50967 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -f * * 0.0.0.0 /0 0.0.0.0 /0 limit: avg 100 /sec burst 100 6100 314K ACCEPT tcp -- * * 0.0.0.0 /0 0.0.0.0 /0 tcp flags:0x16 /0x02 limit: avg 20 /sec burst 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 /0 0.0.0.0 /0 97056 12M ACCEPT all -- * * 0.0.0.0 /0 0.0.0.0 /0 state RELATED,ESTABLISHED 4325 218K ACCEPT tcp -- * * 0.0.0.0 /0 0.0.0.0 /0 multiport dports 80,22 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT icmp -- * * 0.0.0.0 /0 0.0.0.0 /0 icmp type 8 limit: avg 1 /sec burst 10 Chain OUTPUT (policy ACCEPT 144K packets, 155M bytes) pkts bytes target prot opt in out source destination 956 134K ACCEPT all -- * lo 0.0.0.0 /0 0.0.0.0 /0 |
下面我稍为详细的解释下此脚本:
在主机的防护上我们配置了一些安全措施,以防止外部的ping和SYN洪水攻击,并且考虑到外部的疯狂端口扫描软件可能会影响服务器的入口带宽,所以在这里也做了限制。命令如下所示:
1 | iptables -A INPUT -p tcp --syn -m limit --limit 100 /s --limit-burst 100 -j ACCEPT |
上面的命令每秒钟最多允许100个新连接,请注意这里的新连接指的是state为New的数据包,在后面我们也配置了允许状态为ESTABLISHED和RELATED的数据通过;另外,100这个阀值则要根据服务器的实际情况来调整,如果是并发量不大的服务器这个数值就要调小,如果是访问量非常大且并发数不小的服务器,这个值则还需要调大。再看以下命令:
1 2 3 | iptables -A INPUT -p icmp --icmp- type echo -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工具进行扫描,命令如下:
1 | nmap -P0 -sS 211.143.6.x |
此命令的执行结果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 /tcp open ssh 25 /tcp open smtp 80 /tcp open http 110 /tcp open pop3 111 /tcp open rpcbind 143 /tcp open imap 443 /tcp open https 465 /tcp open smtps 587 /tcp open submission 993 /tcp open imaps 995 /tcp open pop3s 1014 /tcp open unknown |
在这里,我们发现一个1014端被某个进程打开了,用lsof -i:1014查看发现又是rpc.statd打开的,这服务每次用的端口都不一样啊!本来想置之不理的,但是如果rpc.statd不能正确处理SIGPID信号,远程攻击者可利用这个漏洞关闭进程,进行拒绝服务攻击,所以还是得想办法解决掉,我们发现rpc.statd是由服务nfslock开启的,进一步查询得知它是一个可选的进程,它允许NFS客户端在服务器上对文件加锁。这个进程对应于nfslock服务,于是我们关掉了此服务,命令如下所示:
1 2 | service nfslock stop chkconfig nfslock off |
如果没有硬件防火墙保护的话,置于IDC机房并且有公网的Web服务器还是很有用iptables保护的必要,如果发现有人用工具恶意频繁连接我们的Web服务器,我们可以调用recent模块来阻止它们,我们的做法是:尽量在每一台有公网IP的机器上部署iptables防火墙。
相关文章:

用户至上-阿里马马篇
最近经常在阿里巴巴的平台里活动,突然发现,支付宝病了。 当用户生成一单交易后,需要用支付宝支付时,如何保证是用户本人在操作呢? 当初,支付宝是国内第一家很好地解决这个问题的。 解决的途径主要是&#x…

【复盘】小朋友的奇思妙想
Scratch竞赛交流群已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档)。 上周日…

UI设计培训技术分享:搞定萌萌哒可爱图标
UI设计要学到的东西有很多,那么关于图标设计就是其中的一种,很多企业比较忠于萌萌哒的可爱图标,那么如何搞定萌萌哒可爱图标呢?来看看下面UI设计培训技术分享教程。 UI设计培训技术分享:搞定萌萌哒可爱图标 萌萌哒的图标制作有三…

远程处理Remoting
日程 ?应用程序域 ?Remoting和原理 ?编程式和管理式配置实例 用应用程序域 操作系统和运行库环境通常会在应用程序间提供某种形式的隔离。例如,Microsoft Windows 使用进程来隔离应用程序。为确保在一个应用程序中运行的代码不会对其他不相关的应用程序产生不良影…

Datawhale组队学习周报(第002周)
Datawhale组队学习周报(第002周) (一)当下 本周(02月22日~02月28日),我们正在进行5门开源内容的组队学习。一共建立了6个学习群,参与人数1080人。到目前为止,有4门课开…

LVS(Linux Virtual Server)三种负载均衡模型和十种调度的简单介绍
LVS(Linux Virtual Server)三种负载均衡模型和十种调度的简单介绍 LVS (Linux Virtual Server) LVS(Linux Virtual Server)其实就是针对高可伸缩、高可用网络服务的需求,给出了基于IP层和基于内容请求分发的负载平衡调度解决方法,…

UI设计培训分享:设计当中的颜色运用
参加UI设计培训的同学应该都知道,颜色的搭配是学习UI设计非常重要的一步,颜色跟其他的东西一样,适量才会运用得当,如果在你的配色计划中坚持使用马克思三原色的话,你会得到更好的配色结果,为一个项目配色时…

《重构-改善既有代码的设计》读书笔记(二)
12、Lazy Class – 冗赘类 对于几乎没有用的类,运用inline class 将其功能移动。去除这些不值得维护的类。 13、Speculative Generality – 夸夸其谈未来性 对于你现在用不到,觉得总有一天会用到的代码,要警惕。用不上的装置总会挡我们的路&a…

css属性选择符的应用
注释:Internet Explorer 7 (以及更高版本)在规定了 !DOCTYPE 的情况下支持属性选择器。IE6 及更低的版本不支持属性选择器。 [title]{color:red;} //为带有 title 属性的所有元素设置样式: [title"website"]{color:r…

【青少年编程】【答疑】控制Scratch异步代码的执行顺序
问题 几天前,我写了一篇图文 对「等待(0)秒」的理解,发现可以利用「等待(0)秒」这个积木块来解决Scratch中异步代码的执行顺序问题,即点击绿旗后可以控制多个角色中响应该事件的代码的顺序。 …

UI设计培训分享:学习UI设计有哪些技巧
互联网时代的快速发展,UI设计这个行业在互联网有着一席之地,越来越多的人都想要参加UI设计培训班学习,那么对于初学者来说,学习UI设计有哪些技巧呢?来看看下面的详细介绍吧。 学习UI设计有哪些技巧? 1、基础软件操作 UI设计培训…

07 Scratch等级考试(一级)模拟题
Scratch竞赛交流群已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档)。 这是第…

遮罩层+软键盘
一.清关里边申请清关 上传图片由于本身就是布局用的图片,微信手机长按会出现保存收藏该图片。 解决方法:添加同级元素充当遮罩层。设置样式,把点击事件从设置的上传图片中移除即可。 1)<!-- 图片遮罩层 --> <…

UI培训技术分享:设计大神都在用的10种技法!
越来越多的人开始学习UI设计,想要进群到UI设计这个行业,本期小编为大家介绍的UI培训教程就是关于设计师会经常用到的一些技巧,帮助大家后期的工作中的应用。 UI培训技术分享:设计大神都在用的10种技法! 1.将图片融入背景来使用 同…

正则表达式限制输入整数或小数
string pattern "^\d{1,7}(?:\.\d{0,2}$|$)"; //这是一个格式匹配字符串 其中的含义可以参考http://hi.baidu.com/%D6%C2%D0%F9%B8%F3/blog/item/9060fe35f84f872370cf6c83.html。如果调用以下代码,可以匹配整数位最多为7位,小数位最多为2位…

QC配置邮件服务器(Mail Dir)
http://blog.sina.com.cn/s/blog_5007d1b10100m8cm.html 本文转自hblxp32151CTO博客,原文链接:http://blog.51cto.com/starpoint/584056,如需转载请自行联系原作者

Datawhale组队学习周报(第003周)
(一)当下 本周(03月01日~03月07日),我们组织的5门组队学习的课程中有3门已经结营,2门仍在进行中。 1. CV实践-布匹疵点智能识别(异常检测) 已经结营,优秀队长与优秀学…

软件测试培训分享:如何才能选择到靠谱的培训学校
软件测试这个行业在近几年是非常的吃香的,职业需求也是非常大的,很多小伙伴都想寻找一个合适的软件测试培训机构进行系统学习,那么如何才能选择到靠谱的培训学校呢?来看看下面的详细介绍。 如何才能选择到靠谱的软件测试培训学校?一般可从以…

《统一沟通-微软-实战》-5-部署-SharePoint Server 2010
1. 登录-SP2010 2. 查看-计算机名 3. 查看-IP 4. 加域 5. 上网 安装 SharePoint Server 2010 若要安装和配置 SharePoint Server 2010,请按照以下步骤执行: 1. 运行 Microsoft SharePoint 产品准备工具,该工具安装使用 SharePoint Server 所需…

JQuery 给DOM控件绑定和移除事件的方法
绑定事件: Method 1$("#myElement").click( function() {alert($(this).text());}); Method 2 $("#myElement").bind(click, function() {alert($(this).text());}); 第一种看起来要方便一些,但它有一个局限,即DOM元素必…
【组队学习】【23期】Datawhale集成学习(上)
集成学习(上) 开源内容:https://github.com/datawhalechina/team-learning-data-mining/tree/master/IntegratedLearning 基本信息 贡献人员:李祖贤、薛传雨、赵可、杨毅远、陈琰钰学习周期:14天学习形式࿱…

APP测试和传统软件测试有什么区别?
软件测试从字面意思我们就知道它主要是做软件产品方面的测试,尤其是APP这块,那么很多人就问了APP测试和传统软件测试有什么区别?来看看下面的详细介绍。 软件测试培训分享:APP测试和传统软件测试有什么区别?移动APP的特点使得它与传统软件在…

C6678-SRIO和Virtex6-FPGA
设计的板子到了SRIO调试阶段了,在板子上,一片V6和两片6678通过4XSRIO互联,中间没有Switch,总算搞定了相互之间的通信。首先,感谢Ti论坛提供的SRIO程序范例,但是其硬件平台是EVM板,更多的只能用于…
【组队学习】【23期】Datawhale编程实践(区块链)
编程实践(区块链) 开源内容:https://github.com/datawhalechina/team-learning-program/tree/master/Blockchain 基本信息 贡献人员:陈锴、孙子涵、李岳昆、易远哲学习周期:12天学习形式:根据教程主线进…

bootstrap模态框显示控制
默认模态框弹出后,点击背景蒙层部分弹框会消失,如要解决,需要在模态框属性中加 aria-hidden"true" data-backdrop"static"属性即可; 转载于:https://www.cnblogs.com/jiangze-blog/p/7844639.html

什么是Python?主要运用哪些方面?
人工智能领域少不了Python的相助,这也是目前Python技术在人工领域的好前景所致,近几年,想要学习Python技术的人越来越多,很多人都想知道什么是Python?主要运用哪些方面?来看看下面的详细介绍。 什么是Python?主要运用哪些方面?…

第五课:系统目录及ls·文件类型及alias命令介绍
1、上过一次我们学习了单用户和救援模式及服务器秘钥登录等操作,而我们最终的目的还是要操作和使用linux系统,所以我们今天先初步学习linux的基本命令如下: 一目录介绍 ls命令介绍 文件类型 alias命令介绍 1、首先我们…

jquery 实现表单验证功能代码(简洁)
html xmlns"http://www.w3.org/1999/xhtml"> <head> <title>表单验证页面</title> <link href"../Scripts/themes/default/easyui.css" rel"stylesheet" type"text/css" /> <script src"../Script…
【组队学习】【23期】Datawhale深度推荐模型
深度推荐模型 开源内容:https://github.com/datawhalechina/team-learning-rs/tree/master/DeepRecommendationModel 基本信息 贡献人员:罗如意、吴忠强、田雨,宁彦吉, 何世福、徐何军、赖敏材、刘纪川学习周期:13天…

参加Python培训后能干嘛
参加Python培训后能干嘛?相信这是目前很多正在学习Python技术的同学都比较关注的一个问题,Python的法发展前景是非常好的,那么具体学完之后可以运用到哪些方面呢?我们来看看下面的详细介绍吧。 参加Python培训后能干嘛?网站是很基本的,…