zoukankan      html  css  js  c++  java
  • (转)iptables 防火墙

    转自:http://blog.csdn.net/jixiuffff/article/details/5879547


    [c-sharp] view plaincopy
    1. # 五个检查点PREROUTING ,FORWARD POSTROUTING INPUT OUTPUT   
    2. #   一个数据包从prerouting 进入我的机器,它有两个去向,一是经过input 访问我机器上的应用程序,后经output ,postrouting   
    3. # 流走,另一个去向是:直接经forward postrouting 流向别的机器,也就是说我的机器只是充当路由,数据包经我的机器到其他机器上  
    4. #  
    5. #      PREROUTING ---------------->FORWARD---------------------> POSTROUTING  
    6. #                   |                                ^  
    7. #                   |                                |  
    8. #                   INPUT                           OUTPUT   
    9. #                   |                                |   
    10. #                   v                                |  
    11. #                    --->我机器上的应用程序---------->  
    12. #  
    13. #iptables 的结构由上到下是:表(table),规则链(chain),规则(rule) ,表由规则链组成,规则链由一条条规则组成  
    14. #iptables 默认有三张表filter ,nat ,mangle ,   使用-t 参数指定对哪张表操作,如果不指定,则默认是对filter 表进行操作  
    15. #  
    16. # filter 默认有三条内建的规则链, INPUT FORWARD OUTPUT   
    17. # nat     。。。。。。。。。。。 POSTROUTING ,OUTPUT PREROUTING   
    18. # mangle  .....两.............    OUTPUT PREROUTING   
    19. #  
    20. #iptables 命令的一般格式 iptables [ -t table]  操作  [ chain] [options ]  
    21. #一个查对完整参数的示例   
    22. #iptables -t filter      -I    INPUT 2    -i eth0  -s 10.2.1.111 --sport 1234 -d 10.2.1.123 --dport 22   -j ACCEPT   
    23. #iptables -t filter      -I    OUTPUT 2    -i eth0  -d 10.2.1.123  --dport 22 -s 10.2.1.123  --sport 1234   -j ACCEPT   
    24. # 这条命令是:在filter 表中的INPUT 链上 插入一条规则在2处(此规则排在第二个位置) ,规则的具体:从我的eth0 网卡联我,且对方机 的ip 是10.2.1.111 对方端口1234,访问我的ip :10.2.1.123 我的22端口 ,时才接受  
    25. # 然后是,从我的ip 10.2.1.123:22 向10.2.1.111:1234 经eth0 网卡发出的包放行  
    26. #iptables -F  ,清空filter 的所有规则链  
    27. #iptables -t nat -F 清空nat 表的所有规则链  
    28. ###################################################################################################  
    29. # 关于INPUT ,OUTPUT 都是相对于“我”这台机器,即INPUT  :表示向我输入数据,OUTPUT 表示“我”向外输出数据  
    30. # 而-s -d --sport --dport 分别表示 源ip(source) ,目标ip(destination) ,源ip的端口,目标ip的端口  
    31. # 当在对INPUT 作处理的时候,-s 指的是对方的机器,-d  指的是我这台机器,因为数据是从对方的机器流向我的,  
    32. # 而对OUTPUT 作处理的时候   -s 指的是我,而-d 指的是对方的机器  
    33. #正确使用防火墙,一般默认设为拒绝所有,然后只开放需要开放的,而不是允放所有,只拒绝需要拒绝的  
    34. #首先启动iptables 服务/etc/init.d/iptables start   
    35. #我用的是gentoo 系统装上iptables 后,第一次运行 它它提示我要先运行/etc/init.d/iptables save ,好像是做一些初始化或者保存一些文件,  
    36. /etc/init.d/iptables save   
    37. /etc/init.d/iptables start   
    38. #启动后看一下默认的访问规则  
    39. iptables -L 或者iptables -L --line-number 显示行号, -v 详细信息  
    40. Chain INPUT (policy ACCEPT)  
    41. target     prot opt source               destination           
    42. Chain FORWARD (policy ACCEPT)  
    43. target     prot opt source               destination           
    44. Chain OUTPUT (policy ACCEPT)  
    45. target     prot opt source               destination  
    46. #默认情况下是policy 是ACCEPT   ,等于没有防火墙,现在修改默认的policy   
    47. #注意千万不要使用远程ssh 连接进行这个操作,因为它也会关闭ssh 使用的22 端口,  
    48. #使用ssh 连接 ,首先开放了22 端口再进行下面三条命令  
    49. # sshd   
    50. # 允许任何机器向我的22 端口发出请求  
    51. #  这里没用用-t 则默认是-t filter   
    52.                         iptables -A INPUT  -p tcp --dport 22      -j ACCEPT  
    53. # 等价于:iptables -t filter  -A INPUT  -p tcp --dport 22      -j ACCEPT  
    54. #允许我的22端口向外输出数据  
    55.                         iptables -A OUTPUT  -p tcp --sport 22      -j ACCEPT  
    56. #如果只限某些特定ip 的机器访问我,上面两条要换成  
    57.                         iptables -A INPUT  -p tcp --dport 22  -s 10.2.1.110     -j ACCEPT  
    58.                         iptables -A OUTPUT  -p tcp --sport 22 -d 10.2.1.110     -j ACCEPT  
    59. #现在只有ip为10.2.1.110的ip 可以访问我  
    60. #  
    61. iptables -P INPUT  DROP  
    62. iptables -P OUTPUT DROP  
    63. iptables -P FORWARD DROP   
    64. #默认的策略只能是ACCEPT ,DROP ,不能是REJECT   
    65. Chain INPUT (policy DROP)  
    66. target     prot opt source               destination           
    67. Chain FORWARD (policy DROP)  
    68. target     prot opt source               destination           
    69. Chain OUTPUT (policy DROP)  
    70. target     prot opt source               destination  
    71. #现在无论INPUT ,OUTPUT ,FORWARD 默认都是丢包(drop拒绝),而不是accept 接受  
    72. #此时我极度安全,等于没连网,我不能访问别人,别人不能访问我  
    73. #现在我想上网  
    74. # 假 如我想访问对方的80 端口,其实包括了两个方面,一是我有权限向对方的80 端口发出请求,二是有权限从对方的80 端口取得数据,这里只规定对方的 80 端口,而没有规定我从哪个端口去访问它的80 ,意味着我可以从任意端口访问对方的80端口,这里端口都是tcp 类型的  
    75. #允许我向对方的80 端口发出请求  
    76. iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT  
    77. #允许对方的80 端口向我返回数据  
    78. iptables -A INPUT -p tcp --sport 80 -j ACCEPT  
    79. # 虽然我们此时可以访问对方的80 端口,但是我们在浏览器中输入www.baidu.com 并不能显示对方的网页,但是 http://202.108.22.142/ 确可以。因为在这个过程中还要进行dns域名解析,又要有另一个权限,那就是允许我向 dns server 的udp 53 端口请求,并允许从它返回数据  
    80.  iptables -A OUTPUT -p udp --dport 53 -j ACCEPT  
    81.  iptables -A INPUT -p udp --sport 53 -j ACCEPT  
    82. # 这里没有指定dns server 的ip 地址,如果想边dns server 的ip 也做限定的话  
    83. # 可以这样写  
    84.  iptables -A OUTPUT -p udp -d 211.64.208.1 --dport 53 -j ACCEPT  
    85.  iptables -A INPUT -p udp -s 211.64.208.1  --sport 53 -j ACCEPT  
    86. #  
    87. #我校园网用drcom 进行流量计费要开upd 61440 端口  
    88. # drcom   
    89. #允许211.64.208.160 从它的61440 (sport) 端口连接到我的机器的61440 (dport)  
    90. # -s 表示源,表示从哪台机器向我发送数据  
    91. iptables -A INPUT  -p udp --sport 61440 --dport 61440 -s 211.64.208.160 -j ACCEPT  
    92. #允许 我的机器 从61440(sport) 端口 向211.64.208.160 的61440(dport)端口发送数据  
    93. # -d 指定对方机器(目标机器)  
    94. iptables -A OUTPUT  -p udp --sport 61440 --dport 61440 -d 211.64.208.160 -j ACCEPT  
    95. #目前为止,都是作为一个客户去访问别人,如果我要在我的电脑上架设个服务器又当如何呢,比如架设sshd 及web 服务器  
    96. #web服务器,开放80端口  
    97. iptables -A INPUT -p tcp  --dport 80 -j ACCEPT   
    98. iptables -A OUTPUT  -p tcp  --sport 80 -j ACCEPT   
    99.  
    100. #开放ftp 服务  
    101. #iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT  
    102. #允许连接保持的被动访问。  
    103. #ftp协议是一个简单、保密性差(明码)的tcp协议,它的工作原理是客户端先连服务器端的21端口,然后经过3步的握手以后建立了一条连接。要注意的是,这条连接只可以用来传输ftp的命令,只有这条连接的话是什么都传不了的,就算是用“ls”命令来查看文件也不行。  
    104. # 建立了命令的连接以后,服务器端就要建立一条数据的连接。数据的连接又分为主动模式(port)和被动模式(passive)。ftp默认是被动模式,主 动和被动之间使用"pass"命令切换。主动模式通过20端口与客户端相连,而被动模式却使用1024以后的端口与客户端相连。由于1024以后的端口是 随机分配的,所以在被动模式下我们是不知道服务端是使用什么端口与客户端连接的。也就是说,我们是不知道iptables要开放什么端口。   
    105. #  
    106. #  
    107. #1 在/etc/conf.d/iptables配置文件中 加入 如下语句(不同发行版可能文件位置不同)  
    108. #IPTABLES_MODULES="ip_conntrack_ftp"  
    109. #  
    110. iptables -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT  
    111. iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT  
    112. iptables -A INPUT -p tcp --dport 21 -j ACCEPT  
    113. iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT  
    114. #主动模式使用20端口  
    115. iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT  
    116. iptables -A INPUT -p tcp --dport 20 -j ACCEPT  
    117.  
    118. #对于lo 设备的数据包都放行 ,也就是本机数据 -i 表示输入,-o 表示输出  
    119. #表示所有从lo 来的数据accept  
    120. iptables  -t filter  -I  INPUT l -i lo  -j ACCEPT   
    121. #表示流向lo 的数据accept   
    122. iptables  -t filter  -I   OUTPUT 1 -o lo  -j ACCEPT   
    123.   
    124. #  
    125. #  
    126. #  
    127.   
    128.   
    129.   
    130.   
    131. 完整的脚本:  
    132. sudo /etc/init.d/iptables save  
    133. sudo /etc/init.d/iptable restart  
    134. #清空表中规则链  
    135. iptables -F   
    136. iptables -X  
    137. iptables -t nat -F   
    138. iptables -t nat -X  
    139. #开放sshd服务  
    140. iptables -A INPUT  -p tcp --dport 22      -j ACCEPT  
    141. iptables -A OUTPUT  -p tcp --sport 22      -j ACCEPT  
    142. #默认drop 所有包  
    143. iptables -P INPUT  DROP  
    144. iptables -P OUTPUT DROP  
    145. iptables -P FORWARD DROP   
    146. #本机设备放行  
    147. iptables  -t filter  -I  INPUT 1 -i lo  -j ACCEPT   
    148. iptables  -t filter  -I   OUTPUT 1 -o lo  -j ACCEPT   
    149. #dns   
    150.  iptables -A OUTPUT -p udp   --dport 53 -j ACCEPT  
    151.  iptables -A INPUT -p udp --sport 53  -j ACCEPT  
    152. #上网  
    153. iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT  
    154. iptables -A INPUT -p tcp --sport 80 -j ACCEPT  
    155. #drcom   
    156. iptables -A INPUT  -p udp --sport 61440 --dport 61440 -s 211.64.208.160 -j ACCEPT  
    157. iptables -A OUTPUT  -p udp --sport 61440 --dport 61440 -d 211.64.208.160 -j ACCEPT  
    158. # ftp   
    159. # 在配置文件中加入  IPTABLES_MODULES="ip_conntrack_ftp"  
    160. iptables -I INPUT  2 -m state --state ESTABLISHED,RELATED -j ACCEPT  
    161. iptables -I OUTPUT 2  -m state --state ESTABLISHED,RELATED -j ACCEPT  
    162. iptables -A INPUT -p tcp --dport 21 -j ACCEPT  
    163. iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT  
    164. iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT  
    165. iptables -A INPUT -p tcp --dport 20 -j ACCEPT  
    166. #web 服务  
    167. iptables -A INPUT -p tcp  --dport 80 -j ACCEPT   
    168. iptables -A OUTPUT  -p tcp  --sport 80 -j ACCEPT   
    169. # dhcp ,使用dhcp 获得ip ,  
    170. # dhcp  
    171. iptables -A INPUT -p udp --sport 67 --dport 68 -j ACCEPT  
  • 相关阅读:
    Spring.NET企业架构实践之 NHibernate + Spring.NET + WCF + Windows服务 + Silverlight 中小企业应用架构完整Demo
    UnitOfWork模式和Repository模式[转]
    倾情奉献:开源企业类库(EntLib)大分享
    Spring.NET企业架构实践之Nhibernate + WCF + ASP.NET MVC + NVelocity 对PetShop4.0重构(一)——架构设计
    WCF服务
    EA使用教程
    第三方支付接口,银行接口(附下载),third party bank interface
    ASP.NET 开发 WAP 网站
    开源软件Mono框架和架构
    wcf asp.net
  • 原文地址:https://www.cnblogs.com/xiaouisme/p/2765743.html
Copyright © 2011-2022 走看看