- 浏览: 267392 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
chenzheng8975:
总结很到位 ,没有两三年经验是总结不出来的。。。
27种迹象显示你应该辞掉程序员的工作 -
java_stream:
种种迹象显示,该文章要上首页
27种迹象显示你应该辞掉程序员的工作 -
tenght:
16跟27重复了
27种迹象显示你应该辞掉程序员的工作 -
flex_莫冲:
上述27种都不存在。除了上级不写代码,任何一种都无法忍受。虽然 ...
27种迹象显示你应该辞掉程序员的工作 -
mvp_huang:
好像这种情况都有吧,我们的领导现在基本都不写代码了~~~~~
27种迹象显示你应该辞掉程序员的工作
如其名称所示,iptables,就是里面有好几个table,大约有过滤桌、nat桌、mangle桌啥的。后两个你先别管,等我搞明白了再来教你,第一个桌子从名称上一看就明白了,过滤数据用的,它也正是我们用来防止攻击用的——把坏人过滤掉,不让他进来!那我们就讲这个过滤桌吧。
这个桌子上放有一条一条的chain,就是链子。每个链子由尺子(rules)组成…严肃点,我不开玩笑了,这么说吧,table(表)由chain(链)组成,Chain又有规则组成(rules)。
既然我们只讲 filter table(过滤表),那么table这个概念就跟我们无关了,重点要理解“链”和组成“链”的“rule (规则)”。
链(chain)与规则 (rules)
filter table里面有三个默认的链,INPUT,OUTPUT 和 FORWARD。FORWARD呢对于做站基本用不上,我们就讲INPUT 和 OUTPUT。因为是别人要攻击我们,对于我们的服务器来讲,攻击是要进来的,即INPUT,诶?那么说把 INPUT这个链搞明白,就可以防守了?差不多吧。那我们就只讲 INPUT好了,越简单越好,关键是把概念理清楚,别的细节,都可以查到的的亲。另外,INPUT, OUTPUT, FORWARD都是由规则组成的链,INPUT搞懂了,其他的也就不难了。
平常我们看到iptables,就是一条条的规则,例如:
看到INPUT这个词了吧?这说明这条规则属于INPUT这个链的,tcp是协议,网站都是用tcp的, –dport 80,就是80这个端口,也就是别人打开你的网站的时候需要与你的服务器的80端口连起来,就像一条打印机线把电脑的打印机口与打印机连起来一样,不过网络上端口是虚拟的,但实际工作的时候是一回事,就是通信。对于INPUT(发进来)的数据包,80是目标端口,即destination port, 简称 dport。
因为你的服务器上放了你的网站,你需要允许别人向80端口发连接请求,ACCEPT,即接受请求和连接。现在你明白了吧?有了这句,别人就可以连接你的服务器,打开上面的网页了。
前面那个“-A”的意思append,与后面的INPUT连用的,就是把这条规则加到INPUT这个链的最后面。当然现我们INPUT这个链上啥都没有,加到最后面,也就是第一条了。
命令行的规则你大概明白了吧,“-”符号,后面直接跟的是参数名,参数名后跟空格,空格后跟这个参数的值(姑且这么理解吧)。例如 -p tcp ,这里的‘-p’是不能随便写的,是iptables程序定义的,你写个“-p”,程序就知道后面跟的是协议名称。你写个“-A”,iptables程序就知道后面跟的是链的名称。那么“–dport”里的两个减号“–”是啥意思呢?它的功能跟一个减号是一样的,都表示后面是参数名,不过两个减号后面跟的参数名的全称,一个减号跟的是简称,全称容易看懂,减称写起来省劲。例如上面这句规则也可以写成:
当然,爱装逼的理科生一般是不会写全称的,大都用一个减号,一个字母的简称。
亲爱的windows用户,注意这里的参数名和参数值都是大小写敏感的,把“-p”写成“-P”,程序是不工作的。另外英语很好的你可以注意到了,即使是加了两个减号的“全称”,也不全,proto明明不对,该是protocol才对。你知道他们理科生语文不好,原谅他们吧。
光有这条还不够,因为你的vps上还有别的服务,例如你上传文件需要ftp或sftp,进入后台需要ssh,ftp的默认端口是21,ssh是22,我们把它们也加上。
好了,你准备就开放这么多服务,最后在加一句
它的意思是拒绝所有连接…这怎么行?不是说要允许80,21,和22吗?这是因为INPUT是个链子,有头有尾,按顺序来的。如果有人连接你的80口,第一句规则说ACCEPT,进来吧。那么他发来的一梭子弹弹就不再经过后面的规则了,当然也就不会被放在最后面的DROP这句拒绝了。
现在我们的全部规则是:
翻译成文科生的语言就是发到80(嘴巴),21(菊花),22(猫猫)三个口的数据将接受,想往别的地方塞数据,一律拒绝。复习一下开始说的,这些东东的意思是在INPUT这个链子上有四条规则,规则是按顺序一个一个来的,发来的数据被匹配后,就跳出链子,后面的规则就不再执行了。如果你把iptables -A INPUT -j DROP这条放在链头,你的vps就变成了石女,唯有通过服务商的面板重启了!
REJECT 和 DROP
刚才-j 后面的拒绝操作是DROP,正确的英语译文该是”REJECT”才对。是的,写成”-j REJECT”也是可以的。不同之处是REJECT比较客气,等于告诉想搞你的人“对不起,人家这两天不方便。”而DROP就是一声不坑地拒绝。对于入侵者,不用那么客气,用DROP好了。因为如果你回应了,等于告诉想搞你的人你是在线的,只是拒绝了,反而会引起他继续努力的斗志。
状态 (state)匹配
如果你喜颠颠地拿着上面几条去试验了,估计你的vps上的一些网站可能就竿屁了,iptables这个妹妹很难对付的。要想让你的服务器正常工作,还需要添加这一句在DROP那一句之前。
“-m”是“匹配”的意思,-m state的意思是匹配数据包状态,用户发来的数据包分别带有不同的状态,即 NEW, ESTABLISHED, 和 RELATED。NEW 就是开头搭讪,ESTABLISHED,就是搭讪完了之后后续的数据包,RELATED就是与已经存在的连接相关的数据包。总之这句话的意思是,接受已经建立了连接的数据包,即搭讪之后的数据包。现在我们的INPUT链是这个样子的:
意思是外面接受发往本机80,21,22的tcp数据包,还接受发往任何端口的已建立(established)和相关(related)的数据包(第四句),剩下的INPUT数据包一律抛弃。
为毛要允许状态ESTABLISHED 和 RELATED的入站数据呢?因为你的服务器同时也是台电脑,还要从别的服务器下载东西。下载时,你的服务器先向别的服务器发出连接请求(new),别的服务器允许你连接,连接建立(ESTABLISHED)之后,就需要接受别的服务器发来的数据,对于你的服务器来讲属于INPUT。也就是说,如果没有iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT这句,wget curl啥的就都不工作了。有了这句,加上前三句,即允许别的电脑连接(new)你的80,21和22端口,同时允许别的服务器在你的服务器先向它发请求的条件下向你发送数据。另外这些状态都是基于tcp协议来讲的(谢谢BOYPT)。
刚才说了,-A INPUT的意思是把一条规则加在现有INPUT这个链子的最后面,那么写成-I INPUT,就是把一条规则强行插入到最前面。如果你比较变态,刚才的INPUT链倒着写也是可以的:
即后面一条总会插到现有INPUT链的最前面,最终形成的INPUT链跟前面是一样的。
不过,不要试!因为你通常是远程操作你的vps的,你在命令行输入第一句,立马掉线!后面就全输不进去了!
–insert也是有用的,例如前面这个INPUT链已经起了作用,你想在不清空现有INPUT链的基础上再开放一个端口,例如443。那么就必须写成
如果你写成 -A,那么这条规则就被跟在DROP那句后面,发到443的数据在来到新加的这句之前,就被干掉了。
如果你不想加到最前面,也可以在INPUT后面写个数字,表示添加的位置,如果把一条规则看成一行,也就是指定所谓的行号了。把上面添加443端口的规则写成:
那么就把它放在了第三条规则(即第三行)的位置了。在命令行里输入 iptables -nvx -L INPUT (查看现在生效的INPUT链),你会发现新增加的这条规则在21端口那句的后面。
把上面的规则保存到文件里,运行一下,你的服务器就安全多了。
by Dallas Cao
这个桌子上放有一条一条的chain,就是链子。每个链子由尺子(rules)组成…严肃点,我不开玩笑了,这么说吧,table(表)由chain(链)组成,Chain又有规则组成(rules)。
既然我们只讲 filter table(过滤表),那么table这个概念就跟我们无关了,重点要理解“链”和组成“链”的“rule (规则)”。
链(chain)与规则 (rules)
filter table里面有三个默认的链,INPUT,OUTPUT 和 FORWARD。FORWARD呢对于做站基本用不上,我们就讲INPUT 和 OUTPUT。因为是别人要攻击我们,对于我们的服务器来讲,攻击是要进来的,即INPUT,诶?那么说把 INPUT这个链搞明白,就可以防守了?差不多吧。那我们就只讲 INPUT好了,越简单越好,关键是把概念理清楚,别的细节,都可以查到的的亲。另外,INPUT, OUTPUT, FORWARD都是由规则组成的链,INPUT搞懂了,其他的也就不难了。
平常我们看到iptables,就是一条条的规则,例如:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
看到INPUT这个词了吧?这说明这条规则属于INPUT这个链的,tcp是协议,网站都是用tcp的, –dport 80,就是80这个端口,也就是别人打开你的网站的时候需要与你的服务器的80端口连起来,就像一条打印机线把电脑的打印机口与打印机连起来一样,不过网络上端口是虚拟的,但实际工作的时候是一回事,就是通信。对于INPUT(发进来)的数据包,80是目标端口,即destination port, 简称 dport。
因为你的服务器上放了你的网站,你需要允许别人向80端口发连接请求,ACCEPT,即接受请求和连接。现在你明白了吧?有了这句,别人就可以连接你的服务器,打开上面的网页了。
前面那个“-A”的意思append,与后面的INPUT连用的,就是把这条规则加到INPUT这个链的最后面。当然现我们INPUT这个链上啥都没有,加到最后面,也就是第一条了。
命令行的规则你大概明白了吧,“-”符号,后面直接跟的是参数名,参数名后跟空格,空格后跟这个参数的值(姑且这么理解吧)。例如 -p tcp ,这里的‘-p’是不能随便写的,是iptables程序定义的,你写个“-p”,程序就知道后面跟的是协议名称。你写个“-A”,iptables程序就知道后面跟的是链的名称。那么“–dport”里的两个减号“–”是啥意思呢?它的功能跟一个减号是一样的,都表示后面是参数名,不过两个减号后面跟的参数名的全称,一个减号跟的是简称,全称容易看懂,减称写起来省劲。例如上面这句规则也可以写成:
iptables -append INPUT --proto tcp --dport 80 --jump ACCEPT
当然,爱装逼的理科生一般是不会写全称的,大都用一个减号,一个字母的简称。
亲爱的windows用户,注意这里的参数名和参数值都是大小写敏感的,把“-p”写成“-P”,程序是不工作的。另外英语很好的你可以注意到了,即使是加了两个减号的“全称”,也不全,proto明明不对,该是protocol才对。你知道他们理科生语文不好,原谅他们吧。
光有这条还不够,因为你的vps上还有别的服务,例如你上传文件需要ftp或sftp,进入后台需要ssh,ftp的默认端口是21,ssh是22,我们把它们也加上。
iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT
好了,你准备就开放这么多服务,最后在加一句
iptables -A INPUT -j DROP
它的意思是拒绝所有连接…这怎么行?不是说要允许80,21,和22吗?这是因为INPUT是个链子,有头有尾,按顺序来的。如果有人连接你的80口,第一句规则说ACCEPT,进来吧。那么他发来的一梭子弹弹就不再经过后面的规则了,当然也就不会被放在最后面的DROP这句拒绝了。
现在我们的全部规则是:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -j DROP
翻译成文科生的语言就是发到80(嘴巴),21(菊花),22(猫猫)三个口的数据将接受,想往别的地方塞数据,一律拒绝。复习一下开始说的,这些东东的意思是在INPUT这个链子上有四条规则,规则是按顺序一个一个来的,发来的数据被匹配后,就跳出链子,后面的规则就不再执行了。如果你把iptables -A INPUT -j DROP这条放在链头,你的vps就变成了石女,唯有通过服务商的面板重启了!
REJECT 和 DROP
刚才-j 后面的拒绝操作是DROP,正确的英语译文该是”REJECT”才对。是的,写成”-j REJECT”也是可以的。不同之处是REJECT比较客气,等于告诉想搞你的人“对不起,人家这两天不方便。”而DROP就是一声不坑地拒绝。对于入侵者,不用那么客气,用DROP好了。因为如果你回应了,等于告诉想搞你的人你是在线的,只是拒绝了,反而会引起他继续努力的斗志。
状态 (state)匹配
如果你喜颠颠地拿着上面几条去试验了,估计你的vps上的一些网站可能就竿屁了,iptables这个妹妹很难对付的。要想让你的服务器正常工作,还需要添加这一句在DROP那一句之前。
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
“-m”是“匹配”的意思,-m state的意思是匹配数据包状态,用户发来的数据包分别带有不同的状态,即 NEW, ESTABLISHED, 和 RELATED。NEW 就是开头搭讪,ESTABLISHED,就是搭讪完了之后后续的数据包,RELATED就是与已经存在的连接相关的数据包。总之这句话的意思是,接受已经建立了连接的数据包,即搭讪之后的数据包。现在我们的INPUT链是这个样子的:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -j DROP
意思是外面接受发往本机80,21,22的tcp数据包,还接受发往任何端口的已建立(established)和相关(related)的数据包(第四句),剩下的INPUT数据包一律抛弃。
为毛要允许状态ESTABLISHED 和 RELATED的入站数据呢?因为你的服务器同时也是台电脑,还要从别的服务器下载东西。下载时,你的服务器先向别的服务器发出连接请求(new),别的服务器允许你连接,连接建立(ESTABLISHED)之后,就需要接受别的服务器发来的数据,对于你的服务器来讲属于INPUT。也就是说,如果没有iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT这句,wget curl啥的就都不工作了。有了这句,加上前三句,即允许别的电脑连接(new)你的80,21和22端口,同时允许别的服务器在你的服务器先向它发请求的条件下向你发送数据。另外这些状态都是基于tcp协议来讲的(谢谢BOYPT)。
-A(–append)和-I (–insert)
刚才说了,-A INPUT的意思是把一条规则加在现有INPUT这个链子的最后面,那么写成-I INPUT,就是把一条规则强行插入到最前面。如果你比较变态,刚才的INPUT链倒着写也是可以的:
iptables -I INPUT -j DROP iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -I INPUT -p tcp --dport 22 -j ACCEPT iptables -I INPUT -p tcp --dport 21 -j ACCEPT iptables -I INPUT -p tcp --dport 80 -j ACCEPT
即后面一条总会插到现有INPUT链的最前面,最终形成的INPUT链跟前面是一样的。
不过,不要试!因为你通常是远程操作你的vps的,你在命令行输入第一句,立马掉线!后面就全输不进去了!
–insert也是有用的,例如前面这个INPUT链已经起了作用,你想在不清空现有INPUT链的基础上再开放一个端口,例如443。那么就必须写成
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
如果你写成 -A,那么这条规则就被跟在DROP那句后面,发到443的数据在来到新加的这句之前,就被干掉了。
如果你不想加到最前面,也可以在INPUT后面写个数字,表示添加的位置,如果把一条规则看成一行,也就是指定所谓的行号了。把上面添加443端口的规则写成:
iptables -I INPUT 3 -p tcp --dport 443 -j ACCEPT
那么就把它放在了第三条规则(即第三行)的位置了。在命令行里输入 iptables -nvx -L INPUT (查看现在生效的INPUT链),你会发现新增加的这条规则在21端口那句的后面。
把上面的规则保存到文件里,运行一下,你的服务器就安全多了。
iptables --flush iptables --delete-chain iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -j DROP
by Dallas Cao
发表评论
-
Linux下给 ATI 显卡降温
2014-04-13 10:47 1814随着最近气温的逐日升高,爱机也开始发起热来了。近日, 偶 ... -
Unix 高手的另外 10 个习惯
2014-01-15 14:54 2152您应当采纳的其他 10 个好习惯包括: 使用文件名自动完 ... -
永远不要在 Linux 执行的 10 个最危险的命令
2013-12-09 21:38 4371Linux命令行佷有用、很高效,也很有趣,但有时候也很危 ... -
37条常用Linux Shell命令组合
2013-10-17 19:43 1622序号 任务 命令组合 1 删除0字节文 ... -
Linux Shell函数方法简介
2013-10-05 15:27 25801. 在shell文件内部定义函数并引用: [~/sh ... -
linux文件系统基础知识
2013-10-05 09:13 18321、linux文件系统分配策略: 块分配( block ... -
Linux操作系统目录结构及主要内容
2013-10-04 08:32 1649“/”根目录部分有以下子目录: /usr 目录包 ... -
如何提高Linux系统的安全性
2013-09-30 14:47 1315Linux系统不论在功能上 ... -
Linux集群原理与安装配置
2013-09-26 23:35 1584Linux集群原理 Linux集群系统包括集群节点和集群管 ... -
怎样选择你的最佳Linux服务器?
2013-09-22 11:31 4762与上千种Linux桌面版本相比,Linux服务器只有可怜的十 ... -
如何保证Linux服务器的安全
2013-09-19 13:52 1441很少见有人马上为一台新安装的服务器做安全措施,然而我们生活所 ... -
Linux wget 使用技巧
2013-09-09 10:15 1320wget 是一个命令行的下 ... -
18个非常好用的vim指令
2013-09-04 09:51 1945在Linux下最有名的程序 ... -
找回Ubuntu 13.04 退格键的’返回’功能
2013-08-30 08:59 1434使用Ubuntu 13.04 的用户可能会发现一个细节,在U ... -
CentOS系统中编译和升级内核
2013-08-23 10:13 1581可能因为以下几种原因,你可能需要对Linux kernel内 ... -
Linux 内存使用方法详细解析
2013-08-17 12:09 1307我是一名程序员,那么我在这里以一个程序员的角度来讲解Linu ... -
在Linux下安装eclipse开发工具
2013-08-16 09:05 2379Eclipse是一个软件开发环境,可以扩展插件,工具包,运 ... -
为学Linux,我看了这些书
2013-08-15 14:14 1220去 年开始,抱着学习 ... -
OPENWRT使用命令行设置无线和有线网络
2013-08-14 09:02 7107在我们将路由器固件刷 ... -
Linux configure命令详解
2013-08-12 20:24 866–cache-file=FILE ’configure’会在 ...
相关推荐
Iptables是一个基于命令行的防火墙工具,它使用规则链来允许/阻止网络流量。当一条网络连接试图在你的系统中建立时,iptables会查找其对应的匹配规则。如果找不到,iptables将对其采取默认操作。几乎所有的Linux发行...
《Linux 防火墙 IPtables 全攻略》.pdf
Linux防火墙iptables的一个实例应用.pdf
Linux 防火墙 iptables 简明教程 本文将详细介绍 Linux 防火墙 iptables 的基本概念和使用方法,包括安装、查看和删除规则、创建规则、设置开机启动等内容。 1. 安装 iptables iptables 是 Linux 防火墙的核心...
一个详尽的linux防火墙学习资料,其中详细介绍了iptables的配置使用方法
Linux防火墙iptables实用设置.docx
iptables建立linux防火墙iptables建立linux防火墙iptables建立linux防火墙
linux环境下防火墙 iptables的安装包rpm,linux环境下防火墙 iptables的安装包rpm
Linux防火墙iptables学习笔记.pdf
Linux 防火墙 iptables 中 filter(包过滤防火墙)和 nat(路由转换)详解_linux中filter和nat.pdf
linux下防火墙iptables 一、基本知识 二、iptable的安装与配置 禁止端口的实例 强制访问指定的站点 发布内部网络服务器 通过NAT上网 iptables实例
Linux防火墙iptables的表格(table)与链(chain).docx
Linux 防火墙iptables 入门 IPTABLES 是一个基于 Linux 的防火墙系统,它提供了一个灵活的防火墙解决方案,具有状态防火墙、规则控制、免费等优点。然而,它也存在一些缺点,如配置复杂、维护难。 IPTABLES 的功能...
本文介绍了如何对linux防火墙iptables规则进行查看、添加、删除和修改的操作,大家可以参考一下
Linux 上 iptables 防火墙的应用教程 Linux 上的 iptables 防火墙是一种常用的防火墙软件,能够控制访问 Linux 系统的流量。iptables 防火墙的基本应用包括安装、清除规则、开放指定端口、屏蔽指定 IP、删除已添加...
Linux 防火墙 iptables 详 细 介 绍
Android 流量防火墙 Iptables 原理详解 Android 流量防火墙是一种基于 Iptables 的防火墙解决方案,旨在限制单个应用的联网状态。Iptables 是一个功能强大的 IP 信息包过滤系统,可以用于添加、编辑和删除规则,...
Linux 防火墙软件 IPtables使用详解.docx