全部博文(389)
分类: 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
就可以指定網路介面