Openwrt iptables分析
这里将载有Openwrt的WR841N的路由表dump出来分析一下。
这个是dump出iptables的命令
root@OpenWrt:/etc/config# iptables-save
这里分为4部分:
1.NAT表
*nat
:PREROUTING ACCEPT [:]
:INPUT ACCEPT [:]
:OUTPUT ACCEPT [:]
:POSTROUTING ACCEPT [:]
:MINIUPNPD - [:]
:delegate_postrouting - [:]
:delegate_prerouting - [:]
:postrouting_lan_rule - [:]
:postrouting_rule - [:]
:postrouting_wan_rule - [:]
:prerouting_lan_rule - [:]
:prerouting_rule - [:]
:prerouting_wan_rule - [:]
:zone_lan_postrouting - [:]
:zone_lan_prerouting - [:]
:zone_wan_postrouting - [:]
:zone_wan_prerouting - [:]
-A PREROUTING -j delegate_prerouting
-A POSTROUTING -j delegate_postrouting
-A delegate_postrouting -m comment --comment "user chain for postrouting" -j postrouting_rule
-A delegate_postrouting -o br-lan -j zone_lan_postrouting
-A delegate_postrouting -o eth0 -j zone_wan_postrouting
-A delegate_postrouting -o pppoe-wan -j zone_wan_postrouting
-A delegate_prerouting -m comment --comment "user chain for prerouting" -j prerouting_rule
-A delegate_prerouting -i br-lan -j zone_lan_prerouting
-A delegate_prerouting -i eth0 -j zone_wan_prerouting
-A delegate_prerouting -i pppoe-wan -j zone_wan_prerouting
-A zone_lan_postrouting -m comment --comment "user chain for postrouting" -j postrouting_lan_rule
-A zone_lan_prerouting -m comment --comment "user chain for prerouting" -j prerouting_lan_rule
-A zone_wan_postrouting -m comment --comment "user chain for postrouting" -j postrouting_wan_rule
-A zone_wan_postrouting -j MASQUERADE
-A zone_wan_prerouting -j MINIUPNPD
-A zone_wan_prerouting -m comment --comment "user chain for prerouting" -j prerouting_wan_rule
COMMIT
其中方括号里面的数据是当前所使用的流量(数据包数和byte数)。
总结为下图:

其中从LAN口流入的流量递交给了miniupnpd处理,这个工具有益于P2P下载。
往WAN口去的流量使用了MASQUERADE,是SNAT的增强型,可以转换源IP地址,这样的话就可以发挥路由器的NAT功能了,同时
支持多个客户端。
2.RAW表
*raw
:PREROUTING ACCEPT [:]
:OUTPUT ACCEPT [:]
:notrack - [:]
-A PREROUTING -j notrack
COMMIT
这里基本上没有做什么,不进行分析
3.MANGLE表
*mangle
:PREROUTING ACCEPT [:]
:INPUT ACCEPT [:]
:FORWARD ACCEPT [:]
:OUTPUT ACCEPT [:]
:POSTROUTING ACCEPT [:]
:ASSIGNOUT - [:]
:NWANOUT - [:]
:NWANPOS - [:]
:NWANPRE - [:]
:fwmark - [:]
:mssfix - [:]
-A PREROUTING -j ASSIGNOUT
-A PREROUTING -j NWANPRE
-A PREROUTING -j fwmark
-A FORWARD -j mssfix
-A OUTPUT -j NWANOUT
-A POSTROUTING -j NWANPOS
-A ASSIGNOUT -m state --state RELATED,ESTABLISHED -j RETURN
-A NWANOUT -m conntrack --ctstate RELATED,ESTABLISHED -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A NWANPOS -o pppoe-wan -m state --state NEW -j CONNMARK --set-xmark 0xa/0xffffffff
-A NWANPRE -i pppoe-wan -m state --state NEW -j CONNMARK --set-xmark 0xa/0xffffffff
-A NWANPRE -i br-lan -m conntrack --ctstate RELATED,ESTABLISHED -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A mssfix -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m comment --comment "wan (mtu_fix)" -j TCPMSS --clamp-mss-to-pmtu
-A mssfix -o pppoe-wan -p tcp -m tcp --tcp-flags SYN,RST SYN -m comment --comment "wan (mtu_fix)" -j TCPMSS --clamp-mss-to-pmtu
COMMIT

这里在prerouting,output和postrouting的时候做了CONNMRK,用于连接管理,比如做QOS管理。在转发的时候修改了MSS。
4.FILTER表
*filter
:INPUT ACCEPT [:]
:FORWARD DROP [:]
:OUTPUT ACCEPT [:]
:MINIUPNPD - [:]
:delegate_forward - [:]
:delegate_input - [:]
:delegate_output - [:]
:forwarding_lan_rule - [:]
:forwarding_rule - [:]
:forwarding_wan_rule - [:]
:input_lan_rule - [:]
:input_rule - [:]
:input_wan_rule - [:]
:output_lan_rule - [:]
:output_rule - [:]
:output_wan_rule - [:]
:reject - [:]
:syn_flood - [:]
:zone_lan_dest_ACCEPT - [:]
:zone_lan_forward - [:]
:zone_lan_input - [:]
:zone_lan_output - [:]
:zone_lan_src_ACCEPT - [:]
:zone_lan_src_REJECT - [:]
:zone_wan_dest_ACCEPT - [:]
:zone_wan_forward - [:]
:zone_wan_input - [:]
:zone_wan_output - [:]
:zone_wan_src_REJECT - [:]
-A INPUT -j delegate_input
-A FORWARD -j delegate_forward
-A OUTPUT -j delegate_output
-A delegate_forward -m comment --comment "user chain for forwarding" -j forwarding_rule
-A delegate_forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A delegate_forward -i br-lan -j zone_lan_forward
-A delegate_forward -i eth0 -j zone_wan_forward
-A delegate_forward -i pppoe-wan -j zone_wan_forward
-A delegate_forward -j reject
-A delegate_input -i lo -j ACCEPT
-A delegate_input -m comment --comment "user chain for input" -j input_rule
-A delegate_input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A delegate_input -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn_flood
-A delegate_input -i br-lan -j zone_lan_input
-A delegate_input -i eth0 -j zone_wan_input
-A delegate_input -i pppoe-wan -j zone_wan_input
-A delegate_output -o lo -j ACCEPT
-A delegate_output -m comment --comment "user chain for output" -j output_rule
-A delegate_output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A delegate_output -o br-lan -j zone_lan_output
-A delegate_output -o eth0 -j zone_wan_output
-A delegate_output -o pppoe-wan -j zone_wan_output
-A reject -p tcp -j REJECT --reject-with tcp-reset
-A reject -j REJECT --reject-with icmp-port-unreachable
-A syn_flood -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit /sec --limit-burst -j RETURN
-A syn_flood -j DROP
-A zone_lan_dest_ACCEPT -o br-lan -j ACCEPT
-A zone_lan_forward -m comment --comment "user chain for forwarding" -j forwarding_lan_rule
-A zone_lan_forward -m comment --comment "forwarding lan -> wan" -j zone_wan_dest_ACCEPT
-A zone_lan_forward -j zone_lan_src_REJECT
-A zone_lan_input -m comment --comment "user chain for input" -j input_lan_rule
-A zone_lan_input -j zone_lan_src_ACCEPT
-A zone_lan_output -m comment --comment "user chain for output" -j output_lan_rule
-A zone_lan_output -j zone_lan_dest_ACCEPT
-A zone_lan_src_ACCEPT -i br-lan -j ACCEPT
-A zone_lan_src_REJECT -i br-lan -j reject
-A zone_wan_dest_ACCEPT -o eth0 -j ACCEPT
-A zone_wan_dest_ACCEPT -o pppoe-wan -j ACCEPT
-A zone_wan_forward -j MINIUPNPD
-A zone_wan_forward -m comment --comment "user chain for forwarding" -j forwarding_wan_rule
-A zone_wan_forward -j zone_wan_src_REJECT
-A zone_wan_input -m comment --comment "user chain for input" -j input_wan_rule
-A zone_wan_input -p tcp -m tcp --dport -m comment --comment "" -j ACCEPT
-A zone_wan_input -p udp -m udp --dport -m comment --comment "" -j ACCEPT
-A zone_wan_input -p tcp -m tcp --dport -m comment --comment "" -j ACCEPT
-A zone_wan_input -p udp -m udp --dport -m comment --comment "Allow-DHCP-Renew" -j ACCEPT
-A zone_wan_input -p icmp -m icmp --icmp-type -m comment --comment "Allow-Ping" -j ACCEPT
-A zone_wan_input -j zone_wan_src_REJECT
-A zone_wan_output -m comment --comment "user chain for output" -j output_wan_rule
-A zone_wan_output -j zone_wan_dest_ACCEPT
-A zone_wan_src_REJECT -i eth0 -j reject
-A zone_wan_src_REJECT -i pppoe-wan -j reject
COMMIT

这里先不考虑eth0,从WAN口输入的数据要重点过滤,因为不能让internet的电脑随意攻击路由器,这里允许了ICMP,
51413、9091端口和transmission下载工具有关,68端口和DHCP服务有关。
对于FORWARD的流量,这里基本上已经全部屏蔽了。
对于王WAN口发送的流量全部放行。
5.总结
总的来说,这里做了SNAT实现路由器的基本功能,对连接跟踪可以管理各个连接。另外的一些策略有助于下载工具的运行。
Openwrt iptables分析的更多相关文章
- iptables 分析(三)
原文:http://blog.chinaunix.net/uid-24207747-id-2622902.html find_target查到目标并加载成功,返回一个xtables_target型对象 ...
- iptables 分析(二)
原文:http://blog.chinaunix.net/uid-24207747-id-2622901.html do_command()函数分析 //负责整个用户输入的命令处理 int do_co ...
- iptables 分析(1)
原文:http://blog.chinaunix.net/uid-24207747-id-2622900.html iptables 是用户空间中用于管理包过滤及NAT 等的工具应用程序.它设置防火墙 ...
- 转:openwrt 框架分析
本文是本人对OpenWrt的Makefile的理解,并非转载.OpenWrt是一个典型的嵌入式Linux工程,了解OpenWrt的Makefile的工作过程对提高嵌入式Linux工程的开发能力有极其重 ...
- openwrt procd分析
procd源码中有很多个main入口,有点懵,不知道procd之外的其他程序是干嘛的.先找资料大概了解了一下procd是什么,然后是守护进程,再然后是openwrt启动流程等等. openwrt启动流 ...
- openwrt<转载--openwrt框架分析 >
这次讲讲openwrt的结构. 1. 代码上来看有几个重要目录package, target, build_root, bin, dl.... ---build_dir/host目录是建立工具链时的临 ...
- 【转载】openwrt框架分析
文章出处:http://blog.csdn.net/kingvenll/article/details/27545221 这次讲讲openwrt的结构. 1. 代码上来看有几个重要目录package, ...
- 2-12-配置squid代理服务器加快网站访问速度
本节所讲内容: squid服务器常见概念 squid服务器安装及相关配置文件 实战:配置squid正向代理服务器 实战:配置透明squid代理提升访问速度 实战:配置squid反向代理加速度内网web ...
- insmod内核模块时提示Failed to find the folder holding the modules怎么办?
答:笔者通过重新编译内核和根文件系统解决了此问题 (笔者使用的是openwrt系统) 分析: 1. ’Failed to find the folder holding the modules‘这句l ...
随机推荐
- Java基础知识学习(七)
线程(续) 线程同步 当两个或两个以上的线程需要共享资源,它们需要某种方法来确定资源在某一刻仅被一个线程占用.达到此目的的过程叫做同步(synchronization) 可以用两种方法同步化代码.两者 ...
- 微信企业号开发之-如何获取secret 序列号
最近有项目基于微信企业号开发,简单记录下如何查看企业号secert 工具/原料 微信企业号 方法/步骤 用管理员的帐号登录后,选择[设置]-[权限管理]进入管理组设置界面 在左边点击[ ...
- 深入解析Windows操作系统笔记——CH1概念和术语
1.概念和工具 本章主要介绍Windows操作系统的关键概念和术语 1.概念和工具 1.1操作系统版本 1.2基础概念和术语 1.2.1Windows API 1.2.2 服务.函数和例程 1.2.3 ...
- plsql 查询结果窗口 不正常
今天发现了一个很有趣的现象,一个查询语句查出来的结果窗口只显示一部分. 是因为查询语句中有全角的字符或者空格: 如果是sqlServer的话直接就报错了,而plsql不报错,显示如下
- Spring,hibernate,struts的面试笔试题及答案
Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation ...
- flume架构初接触
flume优点 1.存储数据到任何中央数据库 2.进入数据速率大于写出速率,可以起到缓存作用,保证流的平稳 3.提供文本式路由 4.支持事务 5.可靠.容错.可伸缩.可定制.可管理 put的缺点 1. ...
- iOS沙盒路径变化的说明详解
最近用沙盒存储文件的时候发现了一个奇怪的现象,由于业务需要,我会将保存的文件绝对路径保存以便下次读取. 于是发现一个找不到的现象,即上一次保存下的绝对路径,再第二次打开app去查找的时候,发现找不到. ...
- iOS MJRefresh下拉刷新(上拉加载)使用详解
下拉刷新控件目前比较火的有好几种,本人用过MJRefresh 和 SVPullToRefresh,相对而言,前者比后者可定制化.拓展新都更高一点. 因此本文着重讲一下MJRefresh的简单用法. 导 ...
- Linux文件和目录
access() //检查是否调用进程有Access这个文件的权限,如果文件是一个符号链接,会将它解引用,成功返回0,失败返回-1设errno #include <unistd.h> in ...
- STM32的USART
转载自:http://www.cnblogs.com/TrueElement/archive/2012/09/14/2684298.html 几个问题: 1.状态寄存器(USART_SR)中的TC(T ...