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