Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1228358
  • 博文数量: 389
  • 博客积分: 2874
  • 博客等级: 少校
  • 技术积分: 3577
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 10:34
文章分类

全部博文(389)

文章存档

2020年(2)

2018年(39)

2017年(27)

2016年(3)

2015年(55)

2014年(92)

2013年(54)

2012年(53)

2011年(64)

分类: LINUX

2015-02-09 10:29:51

參考http://blog.twix.idv.tw/myblog/view/40

1.環境ubuntu 10.10,兩片網卡eth1,eth1

2.安裝bridge-utils套件

3.做成bridge的網路環境

sudo ifconfig eth0 0.0.0.0

sudo ifconfig eth1 0.0.0.0

sudo brctl addbr bri0

sudo brctl addif bri0 eth0

sudo brctl addif bri0 eth1

4.執行brctl show確認一下:

sudo brctl show

5.在上面設定IP,設定的方法有兩種,一種是設定(手動)Static IP,另一種是透過DHCP 取得IP,使用一種即可。

Static IP:(假設設為192.168.1.1,要依自己的網路環境設定)

sudo ifconfig bri0 192.168.1.1 netmask 255.255.255.0 up

DHCP Client:(不知道就設這個自動取得ip)

sudo  dhclient bri0

※以上的動作,一開機就還原,所以把它寫成一個shell script file,並讓它在開機時自動執行,

是放在/etc/rc.local,使用script執行,可以使用sudo

sudo gedit /etc/rc.local

6.允許 IP轉發(Allow IP forwarding)

sudo gedit /etc/sysctl.conf

找到下列句子(去掉前面的#字號),存檔

#net.ipv4.ip_forward = 1

7.測試看看

sudo sysctl –p

※到目前為止eth1和eth0兩邊的網路是相通的,而且沒有任何限制。bridge的功能是ok的。


※設定iptable的規則:

由於版本和設定較為繁複,所以這一部份是我亂試的。

若在RHEL5版本之前的作業環境,iptables並無力針對Bridge模式下的資料封包,從事任何的處理作為,但進入RHEL5世代,其 iptables當中便增加1個名為physdev的模組,俾使用戶能透過iptables -m physdev –h,進行必要的查驗動作,據此解決此一難題。

 

由 於 OpenVPN 在 Bridge 模式下會用到 tap 裝置 , 大部分若一台機器只跑一個 OpenVPN Server 可能會用 tap0 , 若有特殊需求可能會多開不同的 OpenVPN port 用到 tap1 tap2 … 等 , 所以我們要檔 NetBios 廣播出來的封包 , 只要去檔 tap 裝置即可 , 其實作法很簡單 , 下面的指令就可以擋了

iptables -A FORWARD -p tcp -m physdev --physdev-out tap+ --sport 137:139 -j DROP
iptables -A FORWARD -p udp -m physdev --physdev-out tap+ --sport 137:139 -j DROP

注意一下 , 上面有個 tap+ , 這個加號可以代表任何數字 , 因此 tap0 tap1 tap2 …. 都受用啦

雖然這兩道指令看起來簡單 , 但花了我不少時間去找資料 , 原因是我一開始以為下以下兩道指令就可以

iptables -A FORWARD -p tcp -o tap+ --sport 137:139 -j DROP
iptables -A FORWARD -p udp -o tap+ --sport 137:139 -j DROP

結果是沒作用 , 後來找了好久的資料才知道 Bridge 模式下要用 iptables 指定裝置要使用 -m physdev –physdev-out –physdev-in 的參數

好了 , 當 iptables 指令下完後 , 應該網芳不會再出現所有遠端的電腦名稱了 , 但仍可以用 \\xxx.xxx.xxx.xxx 的方式去存取電腦分享的目錄 , 因為我這個範例只檔 137 和 139 port , 而 138 port 沒檔 , 所以仍可以去存取遠端電腦的檔案

 

設定好後,以 servier network restart 重新啟動網路界面,應該就可以發現 br0 這個 bridge 界面了。很簡單吧,只要輕輕鬆鬆的幾行設定就可以讓 Linux 搖身一變成為 Bridge Firewall,只要你懂得如何調較,Linux 一點都不會輸給那些貴死人的企業級firewall。事實上,有很多企業級 firewall 其實骨子裡也是使用 Linux......。


設定防火牆需註意事項:
1.過濾條件要寫在 FORWARD Chain

2.要使用 physdev 模組來過濾特定界面的封包,例如:

iptables -A forward -m physdev --physdev-in eth0 -j DROP
(從 eth0 進來的封包都丟掉)

iptables -A forward -m physdev --physdev-out eth0 -j DROP
(從 eth0 進來的封包都丟掉)

iptables -A forward -m physdev --physdev-is-in DROP
(進入 bridge 界面的封包都丟掉)

iptables -A forward -m physdev --physdev-is-out DROP
(從 bridge 界面送出去的封包都丟掉)

PC A有架設tftp的server由PC B當client去接收
Bridge1 和 Bridge2是一樣的設定,只有ip不同
以下是我設定bridge的步驟

# ifconfig eth0 up
# ifconfig eth1 up
# brctl addbr br0
# brctl stp br0 off
# brctl addif br0 eth0
# brctl addif br0 eth1
# ifconfig br0 xxx.xxx.xxx.xxx up

設定好之後 PC A可以ping到PC B,PC B也可以收到PC A的檔案

但是當我在Bridge1和Bridge 2使用iptables的rules如下
# iptables -A FORWARD -i eth0 -j DROP
照理說,所有PC A和PC B互通的封包,都要DROP,
但是rule好像沒作用

若是我改用
# iptables -A FORWARD -i br0 -j DROP
就有作用,PC A和PC B就不能通了

但就我自己的需求,我需要Bridge內,從eth0進來和eth1進來的封包做不同的事情,
請問各位前輩,是不是哪邊還需要設定,還是iptables或bridge-utils在編譯的過程
還需要增加哪些參數

將command改成如下
# iptables -A FORWARD -m physdev --physdev-in eth0 -j DROP
就可以指定網路介面


zhuanzi:  ~pc/modules/tadnews/index.php?nsn=58
cankao:  
 






阅读(1208) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~