LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 6399|回复: 23

shorewall防火墙、共享上网(屏蔽BT、电驴、QQ)、Ntop流量监控、PPTP VPN拔入

[复制链接]
发表于 2007-8-1 17:09:47 | 显示全部楼层 |阅读模式
本文章是在2006-7-30发布在自己 BBS里的,今天看到论坛里有这么一贴

新人请教,gentoo做软路由,服务器,能做到什么程度

想到可能有一些朋友需要这样的文章,因此转载。
这是我实践记录下来的,希望各位有用,谢谢。


实现目标:防火墙、共享上网(屏蔽BT、电驴、QQ)、流量监控、VPN拔入。

方案说明:为了考虑维护方便以及与WINDOWS的兼容性,我采用了自己最熟悉的Gentoo作为基础系统。由于IPtable配制相对复杂,我采用了基于IPtable基础开发Shorewall作为防火墙,共享上网 技术上不应该单独列出来。因为防火墙增加一条规则即可实现,流量分析,我采用了图形化比较丰富的NTOP,VPN为了兼容WINDOWS,或者说为了偷懒,我采用了PPTP。

硬件配制:PII233、256M、8G

相关URL:
http://www.shorewall.net/

http://www.webmin.com/

http://www.ntop.org/

http://pptpclient.sourceforge.net/

非常基础的东西这里将不在介绍,直入主题。
#emerge gentoo-sources
内核配制部份:

  1. Networking ---->
  2. ----Networking support
  3.      Networking options ---->
  4.      [*] Network packet filtering (replaces  ipchains)    //注:选中并进入


  5. --- Network packet filtering (replaces ipchains)
  6. [*] Network packet filtering debugging
  7.      Core Netfilter Configuration  --->
  8.      IP: Netfilter Configuration --->
复制代码

注:Core Netfilter Configuration  和  IP: Netfilter Configuration 里面的内容全部编译进内核,如果你喜欢碰盯子,也可以选择需要的进行编译,这里见意你全部选
  • 注:非模块[M]。

    仅管你喜欢碰盯子,但我还是要提醒您:其中 Core Netfilter Configuration和IP: Netfilter Configuration 里面的下面几项 必需选中。

    1. --- Core Netfilter Configuration


    2. <  >Netfilter netlink interface
    3. <*> Netfilter Xtables support (required for ip_tables)

    复制代码

    注:许多子项,保持默认选中状态,如果这项没选中,下面IP tables support (required for filtering/masq/NAT)
    你会找不到的。因此这是一个盯子。

    1. --- IP: Netfilter Configuration



    2. <*> Connection tracking (required for masq/NAT)
    3. [*] IP tables support (required for filtering/masq/NAT)

    复制代码

    1. Cryptographic options --->


    2. Cryptographic API                          
    3. [*]   HMAC support                           
    4. <M>   Null algorithms                          
    5. <M>   MD4 digest algorithm                    
    6. <M>   MD5 digest algorithm                    
    7. ---   SHA1 digest algorithm                    
    8. <M>   SHA256 digest algorithm                  
    9. <M>   SHA384 and SHA512 digest algorithms      
    10. <M>   Whirlpool digest algorithms              
    11. <M>   Tiger digest algorithms                  
    12. <M>   DES and Triple DES EDE cipher algorithms
    13. <M>   Blowfish cipher algorithm               
    14. <M>   Twofish cipher algorithm               
    15. <M>   Serpent cipher algorithm               
    16. <M>   AES cipher algorithms                    
    17. <M>   AES cipher algorithms (i586)            
    18. <M>   CAST5 (CAST-128) cipher algorithm        
    19. <M>   CAST6 (CAST-256) cipher algorithm        
    20. <M>   TEA, XTEA and XETA cipher algorithms   
    21. ---   ARC4 cipher algorithm                    
    22. <M>   Khazad cipher algorithm                  
    23. <M>   Anubis cipher algorithm                  
    24. <M>   Deflate compression algorithm            
    25. <M>   Michael MIC keyed digest algorithm      
    26. <M>   CRC32c CRC algorithm                    
    27. <M>   Testing module

    复制代码

    注意:下面部份请根据需要选择,因为我需要做PPTP VPN服务,因此需要选中。

    1. Device Drivers --->
    2.     Network device support --->
    3.         <*> PPP (point-to-point protocol) support
    4.         [*]      PPP multilink support (EXPERIMENTAL)
    5.         [*]      PPP filtering
    6.         <*>    PPP support for async serial ports
    7.         <*>    PPP support for sync tty ports
    8.         <*>    PPP Deflate compression
    9.         <*>    PPP BSD-Compress compression
    10.         <*>    PPP MPPE compression (encryption) (EXPERIMENTAL)
    11.         <*>    PPP over Ethernet (EXPERIMENTAL)
    12.        <  > SLIP (serial line) support

    复制代码

    注:内核配制完成,其他部份还要根据实际情况调整,如你的网卡驱动,主板芯片,CPU状况,所用的文件系统,因为这里主要讨论Shorewall and PPTP 所需要内核状况,因此假设您已经会配制常用的内核。

    说明:我当前的内核是2.6.16-r12

    1. #make
    2. #make install
    3. #make modules_install
    4. #emerge syslog-ng
    5. #rc-update add syslog-ng default
    6. #emerge shorewall  
    复制代码

    注:Shorewall 配制后面会讲到。

    1. # emerge -pv ppp pptpd
    2. [ebuild  N    ] net-dialup/ppp-2.4.2-r15  -activefilter -atm -dhcp -ipv6 -mppe-mppc +pam -radius 0 kB
    3. [ebuild  N    ] net-dialup/pptpd-1.2.3-r1  +tcpd 0 kB
    复制代码

    注:请注意没有打开mppe-mppc 支持。

    1. #USE="-gtk" emerge ppp pptpd
    2. #echo "net-analyzer/ntop ~x86" >>/etc/portage/package.keywords
    3. #emerge  ntop
    4. #/usr/bin/ntop -P /var/ntop -u ntop -A
    5. #emerge webmin
    6. #/usr/libexec/webmin/changepass.pl /etc/webmin/ root passwd  
    复制代码

    修改webmin的默认密码。

    http://ip:10000  (进入WebMin管理)

    http://ip:3000 (进入ntop流量监控页面)

    下面开始PPTP的配制。
    #nano /etc/pptpd.conf


    1. # (Recommended)
    2. localip 100.100.100.249
    3. remoteip 100.100.100.210-240
    4. # or
    5. #localip 192.168.0.234-238,192.168.0.245
    6. #remoteip 192.168.1.234-238,192.168.1.245

    复制代码

    1. #nano /etc/ppp/options.pptpd
    复制代码


    1. #  The name is pretty arbitrary, but it must match the entry in your chap-secrets
    2. name pptpd
    3. #  These are really unsecure methods, so they're disabled
    4. refuse-pap
    5. refuse-chap
    6. refuse-mschap
    7. #  This is the most secure handshake method
    8. require-mschap-v2
    9. #  We want to force 128 bit encryption for the session
    10. require-mppe-128
    11. #  Enable a lot of debugging to the syslog (comment it out once everything works)
    12. debug
    13. #  Make a lock file while the connection is open
    14. lock
    15. #  Disable compression (it's not available with your module)
    16. nobsdcomp
    17. #  Don't log to your terminal window
    18. nologfd
    复制代码

    注:这个配制文件其实保留默认即可,Gentoo默认已经兼容PPTP VPN。

    1. #nano /etc/ppp/chap-secrets
    复制代码

    1. # client        server  secret                  IP addresses
    2.   th       pptpd   mypassword              *
    3.   office   pptpd   pass         218.22.2.0/19
    复制代码

    这里主要添加VPN帐号的,我这里添加了两个帐号,第二个帐户仅在指定的IP范围内拔入才有效。


    VPN配制完成了

    下面开始Shorewall防火墙的配制

    1. #nano /etc/shorewall/zones
    复制代码

    1. #ZONE TYPE  OPTIONS  IN   OUT
    2. #     OPTIONS   OPTIONS
    3. fw firewall
    4. net     ipv4
    5. local   ipv4
    6. vpn     ipv4
    7. #LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE
    复制代码

    1. #nano /etc/shorewall/interfaces
    复制代码

    1. #ZONE   INTERFACE       BROADCAST       OPTIONS
    2. local    eth0          100.100.100.255
    3. net      eth1          detect
    4. vpn      ppp+
    5. #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
    复制代码

    1. #nano /etc/shorewall/policy
    复制代码

    1. ###############################################################################
    2. #SOURCE  DEST  POLICY  LOG  LIMIT:BURST
    3. #      LEVEL
    4. fw              net             ACCEPT
    5. fw              local           ACCEPT
    6. fw              vpn             ACCEPT
    7. local           fw              ACCEPT
    8. local           net             ACCEPT
    9. local           vpn             ACCEPT
    10. vpn             fw              ACCEPT
    11. vpn             net             ACCEPT
    12. vpn  local  ACCEPT
    13. net             all             DROP
    14. all             all             REJECT
    15. #LAST LINE -- DO NOT REMOVE
    复制代码

    1. #nano /etc/shorewall/rules
    复制代码

    1. #SECTION ESTABLISHED
    2. #SECTION RELATED
    3. ACCEPT net fw tcp 22,443,1723,3000,10000
    4. #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
    复制代码

    注:这里是对外开放的端口,请根据需要选择,因为我只做了SSH、VPN、NTOP、WEBMIN,所以只需要开放以上端口即可,如果你还做了WEB服务,请自己增加80端口。

    1. #nano /etc/shorewall/masq
    复制代码

    1. #INTERFACE  SUBNET  ADDRESS  PROTO PORT(S) IPSEC
    2. eth1 eth0
    3. #LAST LINE -- ADD YOUR ENTRIES ABOVE THIS LINE -- DO NOT REMOVE

    复制代码

    注:这条规则就是实现了共享上网的功能。


    说明:在参考我的规则时,请注意到:我eth1是代表外网的,eth0才是内网,所以请不要搞错。


    我需要VPN,所以我还继续添加VPN规则
    1. #nano /etc/shorewall/tunnels
    复制代码

    1. #TYPE   ZONE GATEWAY  GATEWAY
    2. #      ZONE
    3. pptpserver vpn 100.100.100.249
    4. #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
    复制代码

    这里是指这台主机的内网IP,也就是VPN的主机IP。


    好了,到这里防火墙配制完了,用以下这条命令检查一下配制是否正常。
    1. # shorewall check
    复制代码

    如果这里没有错误的话就可以启动了,在启动前你还需要配制一下Shorewall.conf,因为默认是不充许启动的。
    1. nano /etc/shorewall/shorewall.conf
    复制代码
    1. STARTUP_ENABLED=Yes
    复制代码

    1. # /etc/init.d/shorewall start
    2. # rc-update add shorewall default

    3. # /etc/init.d/pptpd start
    4. # rc-update add pptpd default
    复制代码

    OK,所有配制完成。如果你很小心,也许你已经发现一个小小问题,我并没有将webmin加到默认启动项中。嗯,没错,我觉的没有这个必要,如果你需要webmin可以ssh登陆后手动启动他。请永远记住,服务越少,服务器越安全。


    作者:TH
    日期:2006/7/30

    感谢您阅读本文章,写的不好,请谅解!:cool:
  •  楼主| 发表于 2007-8-1 17:16:17 | 显示全部楼层

    过滤BT、QQ、电驴等PNP及即时聊天程序

    1. [/CODE]过滤BT、QQ、电驴等PNP及即时聊天程序,这里介绍Layer7的使用方法。
    2. [CODE]
    3. #echo "net-misc/l7-protocols ~x86" >> /etc/portage/package.keywords
    4. #emerge  l7-protocols
    复制代码

    重新配置核心,选取以下部份,用来支持Layer 7。

    1. --- IP: Netfilter Configuration
    2. <*> Connection tracking (required for masq/NAT)
    3. [*]   Connection tracking flow accounting
    4. ..........................................
    5. <*> Layer 7 match support (EXPERIMANTAL)
    复制代码

    1. #echo "net-firewall/iptables extensions" >> /etc/portage/package.use
    2. #emerge iptables
    复制代码

    先emerge l7-protocols 然后重新编译一次iptables,emerge iptables
               安装L7-protocols后,如果没有重新编译iptables,会出现该库不能找到错误“lib/iptables/libipt_layer7.so”

    #nano /etc/shorewall/rules

    添加屏蔽规则,如下内容:

    1. #SECTION RELATED
    2. ACCEPT  net     fw      tcp     22,443,1723,3000,10000
    3. BitTorrent/DROP local   net
    4. Edonkey/DROP    local   net
    5. ICQ/DROP        local   net
    6. #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
    复制代码

    1. #shorewall check
    2. #shorewall restart
    复制代码

    通过以上方法屏蔽,实际测试中,效果并不好,因此我改用iptables直接过滤,效果很棒。

    1. #iptables -t mangle -I POSTROUTING -m layer7 --l7proto qq -j DROP
    2. #iptables -t mangle -I POSTROUTING -m layer7 --l7proto bittorrent -j DROP
    3. #iptables -t mangle -I POSTROUTING -m layer7  --l7proto edonkey -j DROP
    复制代码

    把以上三条规则保存为/root/layer.sh,并加入开机自动启动。

    1. echo "/root/layer.sh" >> /etc/conf.d/local.start
    复制代码

         通过以上方法即可屏蔽QQ及BT协议,还有电驴,如果您想屏蔽更多其他协议通信,请根据/etc/l7-protocols/protocols目录下的协议类型自己调整iptables语句。

    关于NTOP的两个载图,希望让未使用过NTOP的朋友,对他有点认识



    :thank
    回复 支持 反对

    使用道具 举报

    发表于 2007-8-1 19:09:46 | 显示全部楼层
    楼主,不瞒你说,我就是在这个论坛的某个讨论iptables和gentoo搭配的帖子的第二页里看到了你给出的文章链接,才找到这里学习gentoo的

    不过你能不能介绍一下用shorewall和iptables比起来有什么好处吗,iptables确实挺复杂的……

    另外请教楼主一个问题,这个问题我自己没想明白,如果我用这台路由机上网,那么这台路由机的上网应用受不受诸如流量监控,p2p限制等作用?
    回复 支持 反对

    使用道具 举报

    发表于 2007-8-1 19:42:31 | 显示全部楼层
    abcbuzhiming抛砖引玉,众兄弟获益匪浅:)
    Post by abcbuzhiming
    不过你能不能介绍一下用shorewall和iptables比起来有什么好处吗,iptables确实挺复杂的……

    eix shorewall
    net-firewall/shorewall
         Available versions:  3.0.8 3.2.9 (~)3.2.10 (~)3.4.3 (~)3.4.5 {doc}
         Installed versions:  3.4.5(08时30分48秒 2007年07月20日)(-doc)
         Homepage:            http://www.shorewall.net/
         Description:         Shoreline Firewall is an [color="Red"]iptables-based firewall for Linux.
    回复 支持 反对

    使用道具 举报

    发表于 2007-8-1 19:45:39 | 显示全部楼层
    Post by zhou3345
    abcbuzhiming抛砖引玉,众兄弟获益匪浅:)

    eix shorewall
    net-firewall/shorewall
         Available versions:  3.0.8 3.2.9 (~)3.2.10 (~)3.4.3 (~)3.4.5 {doc}
         Installed versions:  3.4.5(08时30分48秒 2007年07月20日)(-doc)
         Homepage:            http://www.shorewall.net/
         Description:         Shoreline Firewall is an [color="Red"]iptables-based firewall for Linux.


    我知道Shoreline Firewall是基于iptables开发的,不过我就是想知道这东西相对iptables来说有些什么特点,iptables自己也能配成防火墙,比较复杂就是了,如果Shoreline Firewall 能简化配置过程,并且能达到iptables的高度自定义特性,倒是的确是个很好的选择。
    回复 支持 反对

    使用道具 举报

    发表于 2007-8-1 19:52:49 | 显示全部楼层
    我知道Shoreline Firewall是基于iptables开发的,不过我就是想知道这东西相对iptables来说有些什么特点,iptables自己也能配成防火墙,比较复杂就是了,如果Shoreline Firewall 能简化配置过程,并且能达到iptables的高度自定义特性,倒是的确是个很好的选择。
    shorewall就是一个方便我们配置iptables的工具,自己并没有什么多余的代码。
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2007-8-1 20:53:27 | 显示全部楼层
    Post by abcbuzhiming
    如果我用这台路由机上网,那么这台路由机的上网应用受不受诸如流量监控,p2p限制等作用?


    流量监控、P2P限制,是当数据包通过XX网卡时产生的数据进行分析,然后开始采取一定的规则。显然在NAT的环境下,这块网卡是内网IP的,因此内网用户请求发包时,被这类管理软件所跟踪,然后开始做一些规则。那么在路由器本机上网,是直接通过公网IP所在网卡出去的,因此我认为是不会产生限制规则的。


    shorewall与iptable怎么理解?
    shorewall你可以简单的理解为C语言,Iptable是汇编语言。;)
    回复 支持 反对

    使用道具 举报

    发表于 2007-8-1 23:11:14 | 显示全部楼层
    这个shorewall,外边扫描的时候,对方会知道这个主机在线(这个我不喜欢),而我记得好像用iptable配置好的话,扫描的时候,如果没有发现开放的端口,会说机器不在线。
    回复 支持 反对

    使用道具 举报

    发表于 2007-8-2 04:05:20 | 显示全部楼层
    用L7,过滤BT、QQ、电驴等PNP及即时聊天程序的网络性能应该不太好吧
    还有如果BT,和电驴启用了加密协议,应该没用
    回复 支持 反对

    使用道具 举报

    发表于 2007-8-2 10:25:23 | 显示全部楼层
    多谢楼主,好贴,收藏先
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    快速回复 返回顶部 返回列表