一、背景描述
Linux是一台網關服務器,內有3塊網卡
eth1綁定172.17.0.0/16的IP,該網段IP可以通過172.17.1.1上網
eth0綁定192.168.10.0/24的IP,該網段IP可以通過192.168.10.1上網
eth2綁定192.168.1.1,是內網用戶的網關
二、需求分析
內網用戶應該走172.17.1.1這個路由上網
但由於工作需要,部分用戶應該有訪問圖中“專用網絡”的權限
也就是說,應該走192.168.10.1這個路由
另外一點,所有人應該可以訪問FTP服務器,這個服務器的IP是192.168.10.96
也就是說,走172.17.1.1路由的人,也應該能訪問192.168.10.96,且可以上網。
三、解決方案
要解決這個問題,用到了一下幾個命令,具體使用方法需要另查資料。
ip route
ip rule
arp
注:關於ip命令的用法,請查閱ip中文手冊,www.google.com上有。
1、綁定IP
ifconfig eth1 172.17.3.x netmask 255.255.0.0
ifconfig eth0 192.168.10.2 netmask 255.255.255.0
ifconfig eth2 192.168.1.1 netmask 255.255.255.0
然後分別修改/etc/sysconfig/network-script/ifcfg-ethx文件,以使計算機啟動自動設置IP地址。
2、創建特殊路由表
vi /etc/iproute2/rt_table
代碼:
#
# reserved values
#
255 local
254 main
253 default
0 unspec
200 NET10
#
# local
#
#1 inr.ruhep
上面那個200 NET10為新添加,自定義編號為200,名字為NET10
3、向NET10路由中添加它自己的默認路由
代碼:
ip route add default via 192.168.10.1 table NET10
注意,這個table NET10一定不要忘了寫,否則寫到了主路由表中。
4、創建特殊路由規則
用ip rule可以看到計算機當前的路由規則。
引用:
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
可以看到,規則中走了3個路由表,local、main、default
我們平常用route看到的,實際是路由表main
這些規則是按序號大小順序走的,一個不同,則走下一個,知道通路或走完為止。
開始添加我們自己的路由NET10到路由表中。
代碼:
ip rule add from 192.168.1.222 pref 10000 table NET10
這個意思是說,如果來自IP地址為192.168.1.222的訪問,則啟用NET10的路由表中的路由規則。
而NET10的路由規則是什麼呢?上面已經設置了,走的是192.168.10.1的網段。
接下來,使LINUX可以NAT(這裡不再細說HOW TO了)。
5、讓所有人可以訪問192.168.10.xx(這個IP不便說出來)
因為其余人都走了172.17.1.1這個路由,所以他們是無法訪問192.168.10.xx的。
怎麼才能實現呢?再添加個策略就可以了!
代碼:
ip rule add to 192.168.10.xx pref 10001 table NET10
這句話的意思是說,所有人,如果目的IP是192.168.10.xx,則臨時使用NET10的路由表。
這樣做,安全會不會有安全問題呢?路由變了,他們會不會訪問到專用網絡呢?
不會的,因為路由規則是to 192.168.10.xx,也就是目標是96時,才該路由的,訪問別的網站還是走原來的路由。
如果說訪問到專用網絡的機器,也就只有10.xx這一台而已。
這裡,我們還可以做一個小技巧,不告訴別人192.168.10.xx的地址,只告訴他們網關192.168.1.1上有這個服務。
iptables -t nat -A PREROUTING -d 192.168.1.1/32 --dport 21 -j DNAT --to 192.168.10.xx:21
6、防止其他人篡改IP地址而獲得特殊權限
arp有個靜態功能CM,不是C,大家可能知道。
如果給一個IP地址強行綁定一個非他自己的MAC,會怎麼樣呢?雙方會話將會失敗!
好,我們來利用這一點!
首先,我寫了一個文件iproute.c
代碼:
#include <stdlib.h>
#include <stdio.h>
main ()
{
int i;
for(i=2;i<255;i++)
printf("192.168.1.%d\t\t00:00:00:00:00:00\n",i);
}
gcc iproute.c -o iproute
將編譯出一個可執行文件
注:不應該包括主機IP地址本身,所以從2循環到254(255是廣播)
其次,生成一個C的IP地址和全為00的MAC地址
代碼:
./iproute > /etc/ethers
再次,修改IP-MAC匹配列表
vi /etc/ethers
具體怎麼該我就不用細說了,相信大家都會
最後,做靜態IP-MAC綁定
arp -f
7、為了安全,建立防火牆,修改main路由表
默認的路由表應該有192.168.10.0/24和172.17.0.0/16網段的內容,為了安全,可以去掉。
另外,如果是AS3的話,還會有169.254.0.0/16的路由,具體為什麼我不知道,去掉。
然後寫一個防火牆腳本,利用iptables,把你的機器變得更加堅固!