歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> Linux文化

關於Firewall防火牆


1. 透明代理.
雖然理論上透明代理可以對任何協議通用, 目前能實現的主要有:
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 MPEG 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來實現.

相關鏈接: http://support.turbolinux.com.cn/article.php3?sid=20000317171343&mode=flat


Copyright © Linux教程網 All Rights Reserved