• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

从理论到实践:iptables使用时的样板

发布: 2007-6-23 14:09 | 作者:   | 来源:   | 查看: 12次 | 进入软件测试论坛讨论

领测软件测试网

   
  在设定 iptables 的封包过滤规则时,有几个样板的动作,若先熟悉它们,往后就可自行套用,依此类推,很快地,您就可以进入这个天地之中。
  
  观察目前的设定
  作法如下∶
  
  iptables -L -n

  iptablse -t nat -L -n
  
  定义变数
  FW_IP="163.26.197.8"
  
  打开核心 forward 功能
  作法如下∶
  
  ###-----------------------------------------------------###
  # 打开 forward 功能
  ###-----------------------------------------------------###
  
  echo "1" > /proc/sys/net/ipv4/ip_forward
  
  清除所有的规则
  一开始要先清除所有的规则,重新开始,以免旧有的规则影响新的设定。作法如下∶
  
  ###-----------------------------------------------------###
  # 清除先前的设定
  ###-----------------------------------------------------###
  # 清除预设表 filter 中,所有规则链中的规则
  iptables -F
  # 清除预设表 filter 中,使用者自订链中的规则
  iptables -X
  
  # 清除mangle表中,所有规则链中的规则
  iptables -F -t mangle
  # 清除mangle表中,使用者自订链中的规则
  iptables -t mangle -X
  
  # 清除nat表中,所有规则链中的规则
  iptables -F -t nat
  # 清除nat表中,使用者自订链中的规则
  iptables -t nat -X
  
  选定预设的政策
  接着,要选定各个不同的规则链,预设的政策为何。作法如下∶
  
  预设全部丢弃∶
  
  ###-----------------------------------------------------###
  # 设定 filter table 的预设政策
  ###-----------------------------------------------------###
  iptables -P INPUT DROP
  iptables -P OUTPUT DROP
  iptables -P FORWARD DROP
  
  或者预设全部接受∶
  
  ###-----------------------------------------------------###
  # 设定 filter table 的预设政策
  ###-----------------------------------------------------###
  iptables -P INPUT ACCEPT
  iptables -P OUTPUT ACCEPT
  iptables -P FORWARD ACCEPT
  
  各个规则链的预设政策可独立自主的设定,不必受其它链的影响。
  
  以下练习,若目标为 DROP,则 policy 请设为 ACCEPT;若目标为 ACCEPT,则 policy 请设为 DROP,如此方可看出效果。
  
  开放某一个介面
  作法如下∶
  
  iptables -A INPUT -i lo -j ACCEPT
  iptables -A OUTPUT -o lo -j ACCEPT
  
  注∶IPFW 或 Netfilter 的封包流向,local process 不会经过 FORWARD Chain,
  因此 lo 只在 INPUT 及 OUTPUT 二个 chain 作用。
  
  iptables -A INPUT -i eth1 -j ACCEPT
  iptables -A OUTPUT -o eth1 -j ACCEPT
  iptables -A FORWARD -i eth1 -j ACCEPT
  iptables -A FORWARD -o eth1 -j ACCEPT
  
  IP 伪装
  使内部网路的封包经过伪装之后,使用对外的 eth0 网卡当作代表号,对外连线。作法如下∶
  
  ###-----------------------------------------------------###
  # 启动内部对外转址
  ###-----------------------------------------------------###
  
  iptables -t nat -A POSTROUTING -o eth0 -s 172.16.0.0/16 -j SNAT --to-source $FW_IP
  
  上述指令意指∶把 172.16.0.0/16 这个网段,伪装成 $FW_IP 出去。
  
  虚拟主机
  利用转址、转 port 的方式,使外部网路的封包,可以到达内部网路中的伺服主机,俗称虚拟主机。这种方式可保护伺服主机大部份的 port 不被外界存取,只开放公开服务的通道(如 Web Server port 80),因此安全性甚高。
  
  作法如下∶
  
  ###-----------------------------------------------------###
  # 启动外部对内部转址
  ###-----------------------------------------------------###
  # 凡对 $FW_IP:80 连线者, 则转址至 172.16.255.2:80
  iptables -t nat -A PREROUTING -i eth0 -p tcp -d $FW_IP --dport 80 -j DNAT --to-destination 172.16.255.2:80
  
  开放内部主机可以 telnet 至外部的主机
  开放内部网路,可以 telnet 至外部主机。
  
  作法如下∶(预设 policy 为 DROP)
  
  ###-----------------------------------------------------###
  # open 外部主机 telnet port 23
  ###-----------------------------------------------------###
  
  iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 23 -j ACCEPT
  iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 23 -d $FW_IP --dport 1024:65535 -j ACCEPT
  
  开放邮包转递通道
  开放任意的邮件主机送信包给你的 Mail Server,而你的 Mail Server 也可以送信包过去。
  
  作法如下∶(预设 policy 为 DROP)
  
  ###-----------------------------------------------------###
  # open SMTP port 25
  ###-----------------------------------------------------###
  
  # 以下是∶别人可以送信给你
  iptables -A INPUT -i eth0 -p tcp -s any/0 --sport 1024:65535 -d $FW_IP --dport 25 -j ACCEPT
  iptables -A OUTPUT -o eth0 -p tcp ! --syn -s $FW_IP --sport 25 -d any/0 --dport 1024:65535 -j ACCEPT
  
  # 以下是∶你可以送信给别人
  iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 25 -j ACCEPT
  iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 25 -d $FW_IP --dport 1024:65525 -j ACCEPT
  
  开放对外离线下载信件的通道
  开放内部网路可以对外部网路的 POP3 server 取信件。
  
  作法如下∶(预设 policy 为 DROP)
  
  ###-----------------------------------------------------###
  # open 对外部主机的 POP3 port 110
  ###-----------------------------------------------------###
  
  iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 110 -j ACCEPT
  iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 110 -d $FW_IP --dport 1024:65535 -j ACCEPT
  
  开放观看网页的通道
  开放内部网路可以观看外部网路的网站。
  
  作法如下∶(预设 policy 为 DROP)
  
  ###-----------------------------------------------------###
  # open 对外部主机的 HTTP port 80
  ###-----------------------------------------------------###
  
  iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 80 -j ACCEPT
  iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 80 -d $FW_IP --dport 1024:65535 -j ACCEPT
  
  开放查询外部网路的 DNS 主机
  开放内部网路,可以查询外部网路任何一台 DNS 主机。
  
  作法如下∶(预设 policy 为 DROP)
  
  ###-----------------------------------------------------###
  # open DNS port 53
  ###-----------------------------------------------------###
  
  # 第一次会用 udp 封包来查询
  iptables -A OUTPUT -o eth0 -p udp -s $FW_IP --sport 1024:65535 -d any/0 --dport 53 -j ACCEPT
  iptables -A INPUT -i eth0 -p udp -s any/0 --sport 53 -d $FW_IP --dport 1024:65535 -j ACCEPT
  
  # 若有错误,会改用 tcp 封包来查询
  iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 53 -j ACCEPT
  iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 53 -d $FW_IP --dport 1024:65535 -j ACCEPT
  
  # 开放这台主机上的 DNS 和外部的 DNS 主机互动查询∶使用 udp
  iptables -A OUTPUT -o eth0 -p udp -s $FW_IP --sport 53 -d any/0 --dport 53 -j ACCEPT
  iptables -A INPUT -i eth0 -p udp -s any/0 --sport 53 -d $FW_IP --dport 53 -j ACCEPT
  # 开放这台主机上的 DNS 和外部的 DNS 主机互动查询∶使用 tcp
  iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 53 -d any/0 --dport 53 -j ACCEPT
  iptables -A INPUT -i eth0 -p tcp ! -y -s any/0 --sport 53 -d $FW_IP --dport 53 -j ACCEPT
  
  开放内部主机可以 ssh 至外部的主机
  开放内部网路,可以 ssh 至外部主机。
  
  作法如下∶(预设 policy 为 DROP)
  
  ###-----------------------------------------------------###
  # open 外部主机 ssh port 22
  ###------------------------------------

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网