Linux 版 (精华区)

发信人: NightOwl (蜕变中...), 信区: Linux
标  题: [ZZ]关于Firewall
发信站: 紫 丁 香 (Sun Dec 12 03:15:07 1999), 转信

网络工作室--知识库 : Linux操作系统 : 网络 :

                          关于Firewall

Samuel Leo <samuel@szonline.net>
. 透明代理.
    虽然理论上透明代理可以对任何协议通用, 目前能实现的主要有:
    DNS, sendmail relay, 和 HTTP.
    1). DNS, sendmail relay服务本身与目标地址无关, 因此只需简
        单的重定向一下端口.
        ipchains -A input -d 0/0 53 -p tcp -j REDIRECT
        ipchains -A input -d 0/0 53 -p udp -j REDIRECT
        ipchains -A input -d 0/0 25 -p tcp -j REDIRECT
    2). HTTP服务(也可以用于proxy服务). 有两种方法, 各有优缺点:
        (1) 使用专用的转换进程httpd_transp.c, 这种方法是用专
            用进程在定向后的端口上读取http请求, 用getsockname
            获得目标地址, 再把连接转换到http proxy server上.
            这种方法需要专用的进程处理, 消费系统资源, 但可以
            使用其它机上的proxy, 而且兼容非HTTP/1.1请求.
        (2) squid的透明代理功能. 此方法比较方便, 它使用HTTP
            协议固有的功能,但不适合与不带host请求标志的连接.
            (现在的标准浏览器都支持host标志). 还有, squid必须
            装在firewall主机上. 方法:
        ipchains -A input -d 0/0 80   -p tcp -j REDIRECT 3128
        ipchains -A input -d 0/0 8080 -p tcp -j REDIRECT 3128
        ipchains -A input -d 0/0 3128 -p tcp -j REDIRECT
        在squid.conf里加上
          httpd_accel_with_proxy on
          httpd_accel virtual 80
        后面两条ipchains用于定向对外的代理访问统统限制在本地
        代理上, 由于squid本身不会通过getsockname来确定目标地址,
        这种方法只能对80段口的http有效.
 2. 端口重定向(服务定向,平衡).
    目前linux核心支持两种途径实现服务重定向和服务平衡
  1). IP portfw. 这是比较老的实行方法.对2.0.36的核心也实用.
    ipmasqadm portfw -a -p tcp -L 1.1.1.1 80 -R 10.1.1.1 80
    这里的1.1.1.1是firewall的地址, 防火墙内的10.1.1.1实际地址
    在这里,可以对同一服务加多条规则. 实现服务平衡, 如:
   ipmasqadm portfw -a -p tcp -L 1.1.1.1 80 -R 10.1.1.1 80 -P 1
   ipmasqadm portfw -a -p tcp -L 1.1.1.1 80 -R 10.1.1.2 80 -P 2
    这里, 该服务将以1:2分配到10.1.1.1/10.1.1.2两台机上
  2). ip mark fw. 这是较新的一种方式, 比较灵活. 如果不是历史
    原因, 建议使用这种方式
    ipmasqadm mfw -A -m mark -r raddr [rport] [-p pref]
    这里的-r相当于portfw的-R, -p相当于portfw的-P. 这里的rport
    可以不声明, 表明使用源数据的端口. 如:
    ipchains -A input -p tcp -d 0/0 137:139 -m 1 -j ACCEPT
    ipchains -A input -p udp -d 0/0 137:139 -m 1 -j ACCEPT
    ipchains -A input -p tcp -d 0/0 80 -m 1 -j ACCEPT
    ipchains -A input -p tcp -d 0/0 81 -m 2 -j ACCEPT
    ipmasqadm mfw -A -m 1 -r 10.1.1.1
    ipmasqadm mfw -A -m 2 -r 10.1.1.2 80
    这里, 把netbios, 和http(80)定向到10.1.1.1机上
    而把81上的http定向到10.1.1.2机上.
  3). 以上两种方式用于ftp时,都只能提供普通的port ftp方式,对于
    passive的ftp方式, 要加载一个类似ip_masq_ftp的模块, 如果有
    需要, 请注明核心版本, 与我联系. (由于此patch是历史之作,目
    前我已经没有继续维护了).
  4). 以此相关的autofw可以实现一些独占服务的访问(masq). 如SGI  MediaBase MPE
G Player.
    ipmasqadm autofw -A -r udp 7000 7000 -c udp 6311
    把firewall内player的设为proxy方式,端口7000即可
 3. MAC/IP地址问题? 你能给出更清楚的需求吗? 现在就大概谈一下.
   1) 获取本地IP地址和interface清单. 使用
      struct ifreq ifr[32];
      struct ifconf ifc;
      int num, i;
      int sock = socket( AF_INET, SOCK_DGRAM, 0 );
      ifc.ifc_len = sizeof ifr;
      ifc.ifc_req = ifr;
      num = ioctl( sock, SIOCGIFCONF, &ifc );
      for( i = 0; i < num/sizeof(struct ifreq); i++){
          /* process each ifr[i] */
      }
   2) 获取interface的IP/MAC地址.
      struct ifreq ifr;
      int sock = socket( AF_INET, SOCK_DGRAM, 0 );
      ioctl( sock, SIOCGIFHWADDR, &ifr );
      此外, 还有SIOCGIFFLAGS, SIOCGIFDSTADDR, SIOCGIFBRDADDR...
   3) 读取arp cache的内容. 直接打开/proc/net/arp文件.
      或者通过ioctl/SIOCGARP来实现.
admin@studio.openunix.org
[Append to This Answer]
Previous:  什么是NFS文件系统
Next:  [FAQ] 关於 NAT
This document is: http://studio.openunix.org/cgi-bin/fom?file=284
 [Search] [Appearance]
讨论组 网络工作室

--
       @@@@           @@@@
     @@@@@ @@   N   @@ @@@@@
   \ @@@@ @ @@  i  @@ @ @@@@ /
      @@@  @@   g   @@  @@@
        @@@     h     @@@
      \         t         /

※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.179.51]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.376毫秒