iptables

环境:[M1机房]前置数据交换机A[内网IP(AIP0):10.50.7.178 - 外网IP(AIP1):124.162.168.43 - 端口:1022]与中心数据处理机B[内网IP(BIP0):10.50.8.2 - 端口:9001]处于同一局域网、联通网络环境中,B外网无法访问,A可外网访问,即A与B只能在局域网中通信

需求:[M2机房]远程应用机C[外网IP(CIP0):202.91.249.253]发送数据到M1.A.AIP1的1022端口上,然后A要将这些数据转发到M1.B.BIP0的9001上进行处理,M1.A.AIP1同时要能接收M1.B.BIP0的响应

//////////////////////////////////////////////////////////////////////////////
1.查看现有规则
   iptables -L -n
   iptables -L -v
2.备份现有规则
   iptables-save >~/iptables
3.打开ip包转发功能:
   echo 1 > /proc/sys/net/ipv4/ip_forward
   /etc/init.d/network restart
4.规则清除:
   service iptables stop #停止iptables服务
   iptables -F #清空现有规则
   iptables -X
   iptables -Z
/////////////////////////////端口映射配置规则///////////////////////////
5.对于外网wan到内网lan的封包予以放行
   iptables -A FORWARD -i 124.162.168.43 -o 10.50.7.178 -m state --state ESTABLISHED,RELATED -j ACCEPT
6.对所有内网到外网的封包予以放行
   iptables -A FORWARD -i 10.50.7.178 -o 124.162.168.43 -j ACCEPT
7.启用转发日
   iptables -A FORWARD -j LOG
8.启用IP伪装,使内网中的有转发的封包都是同一台机器发出的
   iptables -t nat -A POSTROUTING -o 10.50.7.178 -j MASQUERADE
9.启用地址转换NAT将内网的web服务映射到外网的特定端口上
   iptables -A PREROUTING -t nat -p tcp --dport 9001 -j DNAT --to-destination 124.162.168.43:1022
10.目的地址转换规则
   iptables -t nat -A PREROUTING -d 124.162.168.43 -p tcp --dport 1022 -j DNAT --to-destination 10.50.8.1:9001
11.源地址转换规则
   iptables -t nat -A POSTROUTING -d 10.50.8.1 -p tcp --dport 9001 -j SNAT --to 10.50.7.178
   iptables -A FORWARD -o 10.50.7.178 -d 10.50.8.1 -p tcp --dport 9001 -j ACCEPT
   iptables -A FORWARD -i 10.50.7.178 -s 10.50.8.1 -p tcp --sport 9001 -j ACCEPT
   #允许从124.162.168.43连接10.50.8.1地址的9001端口
   iptables -A INPUT -d 10.50.8.1 -p tcp -m tcp --dport 9001 -i 124.162.168.43 -j ACCEPT
12.系统启动后自动启用相关规及新的规则存盘
   service iptables save
   service iptables start
   sh /etc/rc.local
13.查看包的流向
   cat /proc/net/ip_conntrack
   wc -l /proc/net/ip_conntrack
   route -n

① vim /etc/sysctl.conf 
net.ipv4.ipforward = 1
:wq
② sysctl -p
③ iptables -F
④iptables -t nat -A PREROUTING -d 124.162.168.43 -p tcp --dport 1022 -j DNAT --to-destination 10.50.8.1:9001
⑤ service iptables save

//////////////////////////////////////////////////////////////////////////////

#超出iptables里filter表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包DROP(放弃),对于OUTPUT链,也就是流出的包不用做太多限制,而是采取ACCEPT通过. 可以看出INPUT,FORWARD两个链采用的是允许什么包通过,而OUTPUT链流出的包不做太多限制采用的是不允许什么包通过:
   iptables -p INPUT DROP
   iptables -p OUTPUT ACCEPT
   iptables -p FORWARD DROP
########INPUT链,凡是不在规则里的都DROP放弃#######
   #开启远程SSH登入,开启22端口
      iptables -A INPUT -p tcp --dport 22 -j ACCEPT
      iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
   #web服务器
      iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
      iptables -A INPUT -p tcp --dport 80 -j ACCEPT
   #允许本机访问本机
      iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
      iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
   #允许所有IP访问80端口
      iptables -A INPUT -p tcp -s 0/0 --dport 80 -j ACCEPT
      iptables -A OUTPUT -p tcp -sport 80 -m state --state ESTABLISHED -j ACCEPT
   #邮件服务器
      iptables -A INPUT -p tcp --dport 110 -j ACCEPT
      iptables -A INPUT -p tcp --dport 25 -j ACCEPT
   #FTP服务器
      iptables -A INPUT -p tcp --dport 21 -j ACCEPT
      iptables -A INPUT -p tcp --dport 20 -j ACCEPT
   #DNS服务器
      iptables -A INPUT -p tcp --dport 53 -j ACCEPT
   #允许icmp包通过即允许ping
      iptables -A OUTPUT -p icmp -j ACCEPT
      iptables -A INPUT -p icmp -j ACCEPT
   #允许lookback不然会导致DNS无法正常关闭
      iptables -A OUTPUT -o lo -p all -j ACCEPT
      iptables -A INPUT -i lo -p all -j ACCEPT
#OUTPUT链默认ACCEPT,所以需要写DROP(放弃)的链,减少不安全的端口连接#
   #特洛伊木马
      iptables -A OUTPUT -p tcp --sport 31337 -j DROP
      iptables -A OUTPUT -p tcp --dport 31337 -j DROP
      iptables -A OUTPUT -p tcp --sport 31335 -j DROP
      iptables -A OUTPUT -p tcp --dport 31335 -j DROP
      iptables -A OUTPUT -p tcp --sport 27444 -j DROP
      iptables -A OUTPUT -p tcp --dport 27444 -j DROP
      iptables -A OUTPUT -p tcp --sport 27665 -j DROP
      iptables -A OUTPUT -p tcp --dport 27665 -j DROP
      iptables -A OUTPUT -p tcp --sport 20034 -j DROP
      iptables -A OUTPUT -p tcp --dport 20034 -j DROP
      iptables -A OUTPUT -p tcp --sport 9704 -j DROP
      iptables -A OUTPUT -p tcp --dport 9704 -j DROP
      iptables -A OUTPUT -p tcp --sport 137-139 -j DROP
      iptables -A OUTPUT -p tcp --dport 137-139 -j DROP
      iptables -A OUTPUT -p tcp --sport 2049 -j DROP
      iptables -A OUTPUT -p tcp --dport 2049 -j DROP
   #只允许192.168.0.3的机器进行SSH连接
      iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
   #如果要允许或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP.24表示子网掩码数.但要记得把 /etc/sysconfig/iptables 里的这一行删了. -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 因为它表示所有地址都可以登陆. 或采用命令方式:
      iptables -D INPUT -p tcp --dport 22 -j ACCEPT
   #采用命令的方式,只在当时生效,如果想要重起后也起作用,那就要保存.写入到/etc/sysconfig/iptables文件里
      /etc/rc.d/init.d/iptables save
######FORWARD链,FORWARD链的默认规则是DROP######
   iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
   iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT
   #丢弃坏的TCP包
      iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
   #处理IP碎片数量,防止攻击,允许每秒100个
      iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
   #设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包
      iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
前面只所以允许ICMP包通过,就是因为在这里有限制

##############NAT地址转配置##############
#防洪水攻击:
   iptables -t nat -F Flood
   iptables -t nat -I Flood -j DROP
   iptables -t nat -I Flood -m limit --limit 3/hour --limit-burst 5 -j LOG --log-level 4 --log-prefix "Flood - dropped: "
   iptables -t nat -I Flood -m limit --limit 20/second --limit-burst 10 -j RETURN
#防止外网用内网IP欺骗
   iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
   iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
   iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
#禁止与211.101.46.253的所有连接:
   iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP
#禁用FTP(21)端口
   iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP
#这样写范围太大了,我们可以更精确的定义
   iptables -t nat -A PREROUTING -p tcp --dport 21 -d 211.101.46.253 -j DROP
这样只禁用211.101.46.253地址的FTP连接,其他连接还可以.如web(80端口)连接.只要找到QQ,MSN等其他软件的IP地址和端口,以及基于什么协议,照着写就行

#drop非法连接
   iptables -A INPUT -m state --state INVALID -j DROP
   iptables -A OUTPUT -m state --state INVALID -j DROP
   iptables-A FORWARD -m state --state INVALID -j DROP
#允许所有已经建立的和相关的连接
   iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
   iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
   /etc/rc.d/init.d/iptables save
   service iptables restart

参考:
企业应用开源防火墙安全保障实战演练
http://wiki.ubuntu.org.cn/IptablesHowTo
http://www.gaojinbo.com/category/app/iptables
http://my.oschina.net/javagg/blog/3239
http://wenku.baidu.com/view/cb62f83383c4bb4cf7ecd1c9.html
http://wenku.baidu.com/view/bf80d2ec4afe04a1b071dec9.html
http://wenku.baidu.com/view/fabed16527d3240c8447efc9.html

posted @ 2012-11-07 16:03  WenEric  阅读(425)  评论(0编辑  收藏  举报