免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2632 | 回复: 10
打印 上一主题 下一主题

[网络子系统] iptables配置根据端口可用行的策略 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-02-28 16:21 |只看该作者 |倒序浏览
例如我需要添加一条类似于一下的nat地址转换策略用作透明代理作用
iptables -t nat -A custom_chain -p tcp -dport 80 -j DNAT --to-destination 127.0.0.1:1234
但是我想让这条策略当端口不能连接(本地代理服务不可用)时不使用这条策略,这在iptables中可以通过配置实现吗?
我现在还没找到这种思路的配置

如果不能通过配置实现,则我想实现一个内核模块,在内核模块里判断代理进程是否存在(已实现),但还差检测来自这条规则的ip包,并且想跳过nat处理过程,类似于iptables中的-j RETURN
由于一些细节方面的原因,不能使用一些脚本语言(python、perl)等检测端口是否可用,然后删除iptables的策略

还请大家多多帮忙,或者有什么其他好思路!:wink:

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
2 [报告]
发表于 2013-03-01 08:07 |只看该作者
回复 1# liudonghua123
如果不能通过配置实现,则我想实现一个内核模块,在内核模块里判断代理进程是否存在(已实现),但还差检测来自这条规则的ip包,并且想跳过nat处理过程,类似于iptables中的-j RETURN


代理不可用的条件是什么?

如果只是根据进程是否存在判断的话,你所说的功能是比较容易实现的;如果需要进行业务层判断是否可用的话,就比较困难了。

论坛徽章:
0
3 [报告]
发表于 2013-03-01 11:07 |只看该作者
我想到一些方法
1. 实现一个内核模块,在nat的PREROUTING最后路由的过程中根据代理进程是否可用决定时FOWARD还是LOCAL_IN,从而跳过nat处理
2. 扩展netfilter/xtables,实现一个match或target,如
    iptables -t nat -A custom_chain -p tcp -dport 80 -m process_available --process_name some_process_name -j DNAT --to-destination 127.0.0.1:1234
    iptables -t nat -A custom_chain -p tcp -dport 80 -j SAFE_DNAT --to-destination 127.0.0.1:1234

大家之前如果做过类似的一些能不能在这里分享一下,大家共同提高

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
4 [报告]
发表于 2013-03-01 13:07 |只看该作者
回复 3# liudonghua123
2. 扩展netfilter/xtables,实现一个match或target,如
    iptables -t nat -A custom_chain -p tcp -dport 80 -m process_available --process_name some_process_name -j DNAT --to-destination 127.0.0.1:1234
    iptables -t nat -A custom_chain -p tcp -dport 80 -j SAFE_DNAT --to-destination 127.0.0.1:1234


通过判断进程是否存在决定是否DNAT的的话,上面两个方案实现都比较简单。

match方法:

         if(进程存在)
                return true;
        else
                return false;

整个match的代码,大约在100行(不包括应用层iptables match库)

target方法:

          if(进程存在)
                  nf_nat_setup_info();
          else
                  return NF_ACCEPT;

整个target的代码,也不会超过100行。

个人更倾向于使用match方法,而不是target方法。
   

论坛徽章:
0
5 [报告]
发表于 2013-03-01 13:55 |只看该作者
换一个思路,不能用脚本,那可以用用户态程序么?不都是一样的么?

论坛徽章:
0
6 [报告]
发表于 2013-03-01 21:35 |只看该作者
回复 4# 瀚海书香
多谢!我才刚开始学习netfilter/xtables.我从网上找了一个小例子(ipaddr),编译及insmod都没问题
只是在执行例如iptables -t nat -A custom_chain -m some_match_rules时会提示ipaddr没有此文件
在网上找了应该是需要在iptables中添加一些代码,如解析参数等等作用,这里应该就是对应你说的“应用层iptables match库”吧!


现在我有另外一个问题:为了程序的健壮,应该要考虑如果内核模块没有被加载或iptables中没有做相应修改的情况,这在netfilter/xtables有没有什么好方法可以判断是否支持此特性功能?
如执行“iptables --check_match_rules rule_name”根据返回值判断

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
7 [报告]
发表于 2013-03-02 09:14 |只看该作者
回复 6# liudonghua123
多谢!我才刚开始学习netfilter/xtables.我从网上找了一个小例子(ipaddr),编译及insmod都没问题
只是在执行例如iptables -t nat -A custom_chain -m some_match_rules时会提示ipaddr没有此文件
在网上找了应该是需要在iptables中添加一些代码,如解析参数等等作用,这里应该就是对应你说的“应用层iptables match库”吧!

是的

   

论坛徽章:
0
8 [报告]
发表于 2013-03-02 14:45 |只看该作者
本帖最后由 liudonghua123 于 2013-03-02 14:49 编辑

回复 7# 瀚海书香
我在网上找了一个例子(http://blog.csdn.net/xsckernel/article/details/8173340),编译内核模块及iptables都没有问题,插入内核模块也没有问题
但执行sudo ./iptables -I OUTPUT -m ipaddr --ipsrc i_addr_1 --ipdst  ip_addr_2 -j ACCEPT 系统就直接崩溃了
我使用ubuntu 12.04(linux 内核:3.2.0-36-generic),iptables使用官网最新版本(v1.4.17
这怎么定位或调试呀,除了打log之外还有没有什么其他方法?

   

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
9 [报告]
发表于 2013-03-04 08:04 |只看该作者
回复 8# liudonghua123
一共就那么几行代码,直接printk估计就足够调试的了。

或者安装crash kernel,panic后通过crash进行分析

   

论坛徽章:
4
酉鸡
日期:2014-03-21 23:19:50狮子座
日期:2014-08-01 22:11:40酉鸡
日期:2015-01-10 21:31:442015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2013-03-04 09:18 |只看该作者
用的哪个方法?
match还是target啊。。。
回复 7# 瀚海书香


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP