表 filter #用于过滤 nat #做NAT 链 input =>filter #目的ip是本机的数据包 forward =>filter #穿过本机的数据包 prerouting =>nat #修改目的地址(DNAT) postrouting =>nat #修改源地址(SNAT) iptables -t 要操作的表 操作命令 要操作的链 规则号码 匹配条件 -j 匹配到以后的命令 iptables -I INPUT -j DROP #-t 默认为filter iptables -I INPUT 3 -j DROP #链接里插入一条规则(插入第三条) iptables -D INPUT 3 #按号码匹配删除 iptables -D INPUT -s 192.168.0.1 -j DROP #按内容匹配删除 iptables -R INPUT 3 -j ACCEPT #将原来3的规则改为-j ACCEPT iptables -P INPUT DROP #设置默认规则 iptables -F INPUT #清空filter表INPUT链中的所有规则 iptables -t nat -F PREROUTING iptables -t nat vxnL PREROUTING --# v: 显示详细信息 --# x: 在v的基础上,禁止自动单位换算 --# n: 只显示IP地址和端口号码,不显示域名和服务名称 ========匹配条件 -i -i eth0 #流入接口(是否从网口eth0进来) -o #流出接口 -s -s 192.168.1.0/24 #来源地址 -d #目的地址 -p -p icmp --icmp-type #协议类型 --sport --sport 1000:3000 #来源的端口 --dport --dport 1000: :3000 #目的的端口1000:(1000端口以上) :3000(3000端口以下) -s 192.168.0.1 -d www.sina.com -p tcp -dport 80 ================================ iptables -A INPUT -j ACCEPT #允许所有访问本机IP的数据包通过 iptables -A FORWARD -s 192.168.0.1 -j DROP #阻止来源地址为192.168.80.39的数据包通过本机 -j DNAT #目的地址转换,DNAT支持转换为单IP,也支持转换到IP址 池 iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.3:80 #把从ppp0进来的要访问tcp/80的数据包的地址改为192.168.0.3 -j SNAT #源地址转换 iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1 #将内网192.168.0.0/24的源地址改为1.1.1.1,用于nat表 iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10 #修改成为一个地址池 -j MASQUERADE #动态源地址转换 iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE #将源地址为192.168.0.0/24的数据包进行地址伪装 ===================附加模块 state #按包状态匹配 mac #按来源mac匹配 limit #按包速率匹配 multiport #多端口匹配 --state -m state #new,related,established,invalid iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #包状态 RELATED(衍生态),ESTABLISHED(连接态),NEW(有别于tcp的syn),INVALID(不被识别的) iptables -A FORWARD -m mac --mac-source XX:XX:XX:XX:XX:XX -j DROP #阻断来自某MAC地址的数据包通过本机 iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s -j ACCEPT #用一定速率去匹配数据包 iptables -A INPUT -p tcp -m multiport --dports 21,22,25,80,110 -j ACCEPT #一次匹配多个端口 =======================================实例分析=================================== 单服务器的防护: iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp -m multiport --dport 22,80 -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -P INPUT DROP 制作网关: echo "1" > /proc/sys/net/ipv4/ip_forward #启用路由转发 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE 限制内网用户:filter->forward iptables -A FORWARD -s 192.168.0.3 -j DROP iptables -A FORWARD -m mac --mac-source 11:22:33:44:55:66 -j DROP iptables -A FORWARD -d www.163.com -j DROP 内网做对外服务器: iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.1.1 iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 -j DNAT --to 192.168.1.2:80 ========================================连接追踪模块================================= 主动模式(ACTIVE) 使用连接追踪模块(打开tcp/20,防火墙打开高范围端口,配置ftp,减小被动模式端口范围) modprobe ip_nat_ftp iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -P INPUT DROP 被动模式(PASSIVE) =============================网关策略================================= echo "1" > /proc/sys/net/ipv4/ip_forward echo "1" > /proc/sys/net/ipv4/tcp_syncookies echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses modprobe ip_nat_ftp 堵: iptables -A FORWARD -p tcp --dport 80 -j DROP iptables -A FORWARD -p tcp --dport yyy:zzz -j DROP 通: iptables -A FORWARD -p tcp --dport xxx -j ACCEPT iptables -A FORWARD -p tcp --dport yyy:zzz -j ACCEPT iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -P FORWARD DROP ==========================三大纪律五项注意============================= 3: filter nat mangle 5: prerouting,input,forward,output,postrouting ==========================注意事项============================== #养车好的习惯 iptables -vnL iptables -t nat -vnL iptables-save #注意逻辑顺序 iptables -A INPUT -p tcp --dport xxx -j ACCEPT iptables -I INPUT -p tcp --dport yyy -j ACCEPT ==========================FAQ====================================== iptables -m 模块名 -h /lib/modules/`uname -r`/kernel/net/ipv4/netfilter #模块存放的路径 modprobe ip_nat_ftp #加载模块 =========================实战====================================== iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -P INPUT DROP iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 j SNAT --to 202.106.0.254 iptables -t nat -A POSTROUTING -d 202.106.0.254 -p tcp --dport 80 -j DNAT --to 172.17.0.1 iptables -A FORWARD -i eth2 -p eth1 -m state --state NEW -j DROP