首先要求電腦有兩塊網卡,一個連接到外網,一個連接到switch,而switch與內網其他電腦相連。
安裝linux操作系統,這裏選擇了debian stable版本(目前是sarge版)只需要安裝基本部分,不需要安裝x(比如xorg)和wm(比如fvwm)以及desktop environment(比如gnome,kde)
選擇eth0作爲主網卡(若eth0不能連接,則對調兩個網線,或着把eth1作爲對外網卡)
修改ip,不用
iface eth0 inet dhcp
並增加eth1的設置
vi /etc/network/interfaces
比如我這裏是
auto eth0 iface eth0 inet static address 202.38.68.148 netmask 255.255.255.128 network 202.38.68.0 broadcast 202.38.68.255 gateway 202.38.68.254 dns-nameservers 202.38.64.1 auto eth1 iface eth1 inet static address 192.168.2.1 netmask 255.255.255.0 network 192.168.2.0 broadcast 192.168.2.255
aptitude安裝resolvconf使得dns-nameservers有效。
aptitude安裝emacs,vim做編輯器,安裝lftp做ftp客戶工具,安裝ssh來遠程管理。
重啓網絡
/etc/init.d/network restart
配置iptables,在shell下執行
echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o eth3 -j SNAT --to-source 202.38.68.148
現在內網(設置好192.168.2.*等)就能夠上網了(ipv4)。當然這樣做比較麻煩,請看下面的dhcp自動分配ip服務的設置。
配置dhcp服務
如果子網內電腦很多,一個一個手動分配ip就給管理員帶來很大的麻煩的,dhcp服務可以給內網的電腦自動分配ip,可以大大減輕管理員的工作。
aptitude安裝dhcp這裏的dhcp是版本2,當然也可以選擇版本3,版本3叫做dhcp3-server不過dhcp3軟件包使用/etc/dhcp3/dhcpd.conf作爲其配置文件,而不像dhcp2使用/etc/dhcpd.conf
寫配置文件/etc/dhcpd.conf
subnet 192.168.2.0 netmask 255.255.255.0 { option routers 192.168.2.1; option subnet-mask 255.255.255.0; option domain-name "domain.org"; option domain-name-servers 202.38.64.1; option broadcast-address 192.168.2.255; option time-offset -18000; range 192.168.2.11 192.168.2.250; default-lease-time 216000; max-lease-time 432000; }
設置提供dhcp的網卡修改/etc/default/dhcp
INTERFACES="eth1"
重新啓動dhcp服務
/etc/init.d/dhcp restart
我自己的配置如下:
首先要內核支持iptables
配置內核可以參考網址:
http://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html#KERNELSETUP
內核配置
爲了運行iptables,需要在內核配置期間,選擇以下一些選項,不管你用make config或其他命令。
CONFIG_PACKET - 允許程序直接訪問網絡設備(譯者注:最常用的就是網卡了),象tcpdump 和 snort就要使用這個功能。
嚴格地說,iptables並不需要CONFIG_PACKET,但是它有很多用處(譯者注:其他程序需要),所以就選上了。當然,你不想要,不選就是了。(譯者注:建議還是選的爲好) |
CONFIG_NETFILTER - 允許計算機作爲網關或防火牆。這個是必需的,因爲整篇文章都要用到這個功能。我想你也需要這個,誰叫你學iptables呢:)
當然,你要給網絡設備安裝正確的驅動程序,比如,Ethernet 網卡, PPP 還有 SLIP 。 上面的選項,只是在內核中建立了一個框架,iptables確實已經可以運行,但不能做任何實質性的工作。我們需要更多的選項。以下給出內核2.4.9的選項和簡單的說明:
CONFIG_IP_NF_CONNTRACK - 連接跟蹤模塊,用於 NAT(網絡地址轉換) 和Masquerading(ip地址僞裝),當然,還有其他應用。如果你想把LAN中的一臺機子作爲防火牆,這個模塊你算選對了。腳本rc.firewall.txt 要想正常工作,就必需有它的存在。
CONFIG_IP_NF_FTP - 這個選項提供針對FTP連接進行連接跟蹤的功能。一般情況下,對FTP連接進行連接跟蹤是很困難的,要做到這一點,需要一個名爲helper的動態鏈接庫。此選項就是用來編譯helper的。如果沒有這個功能,就無法穿越防火牆或網關使用FTP。
CONFIG_IP_NF_IPTABLES - 有了它,你才能使用過濾、僞裝、NAT。它爲內核加入了iptables標識框架。沒有它,iptables毫無作用。
CONFIG_IP_NF_MATCH_LIMIT - 此模塊並不是十分必要,但我在例子rc.firewall.txt中用到了。它提供匹配LIMIT的功能,以便於使用一個適當的規則來控制每分鐘要匹配的數據包的數量。比如,-m limit --limit 3/minute 的作用是每分鐘最多匹配三個數據包。這個功能也可用來消除某種DoS攻擊。
CONFIG_IP_NF_MATCH_MAC - 選擇這個模塊,可以根據MAC地址匹配數據包。例如,我們想要阻塞使用了某些MAC地址的數據包,或阻塞某些計算機的通信,用這個很容易。因爲每個Ethernet網卡都有它自己的MAC地址,且幾乎從不會改變。但我在rc.firewall.txt中沒有用到這個功能,其他例子也未用到。(譯者注:這又一次說明了學習是爲將來打基礎:) )
CONFIG_IP_NF_MATCH_MARK - 這個選項用來標記數據包。對數據包做MARK(標記)操作,我們就可以在後面的表中用這個標記來匹配數據包。後文有詳細的說明。
CONFIG_IP_NF_MATCH_MULTIPORT - 選擇這個模塊我們可以使用端口範圍來匹配數據包,沒有它,是無法做到這一點的。
CONFIG_IP_NF_MATCH_TOS - 使我們可以設置數據包的TOS(Type Of Service 服務類型)。這個工作也可以用命令ip/tc完成,還可在mangle表中用某種規則設定。
CONFIG_IP_NF_MATCH_TCPMSS - 可以基於MSS匹配TCP數據包。
CONFIG_IP_NF_MATCH_STATE - 相比較ipchains這是最大的更新,有了它,我們可以對數據包做狀態匹配。比如,在某個TCP連接的兩個方向上已有通信,則這個連接上的數據包就被看作ESTABLISHED(已建立連接)狀態。在rc.firewall.txt 裏大量使用了此模塊的功能。
CONFIG_IP_NF_MATCH_UNCLEAN - 匹配那些不符合類型標準或無效的P、TCP、UDP、ICMP數據包(譯者注:之所以此模塊名爲UNCLEAN,可以這樣理解,凡不是正確模式的包都是髒的。這有些象操作系統內存管理中的“髒頁”,那這裏就可以稱作“髒包”了,自然也就UNCLEAN了)。我們一般丟棄這樣的包,但不知這樣做是否正確。另外要注意,這種匹配功能還在實驗階段,可能會有些問題。
CONFIG_IP_NF_MATCH_OWNER - 根據套接字的擁有者匹配數據包。比如,我們只允許root訪問Internet。在iptables中,這個模塊最初只是用一個例子來說明它的功能。同樣,這個模塊也處於實驗階段,還無法使用。
CONFIG_IP_NF_FILTER - 這個模塊爲iptables添加基本的過濾表,其中包含INPUT、FORWARD、OUTPUT鏈。通過過濾表可以做完全的IP過濾。只要想過濾數據包,不管是接收的還是發送的,也不管做何種過濾,都必需此模塊。
CONFIG_IP_NF_TARGET_REJECT - 這個操作使我們用ICMP錯誤信息來回應接收到的數據包,而不是簡單地丟棄它。有些情況必須要有迴應的,比如,相對於ICMP和UDP來說,要重置或拒絕TCP連接總是需要一個TCP RST包。
CONFIG_IP_NF_TARGET_MIRROR - 這個操作使數據包返回到發送它的計算機。例如,我們在INPUT鏈裏對目的端口爲HTTP的包設置了MIRROR操作,當有人訪問HTTP時,包就被髮送回原計算機,最後,他訪問的可能是他自己的主頁。(譯者注:應該不難理解爲什麼叫做MIRROR了)
CONFIG_IP_NF_NAT - 顧名思義,本模塊提供NAT功能。這個選項使我們有權訪問nat表。端口轉發和僞裝是必需此模塊的。當然,如果你的LAN裏的所有計算機都有唯一的有效的IP地址,那在做防火牆或僞裝時就無須這個選項了。rc.firewall.txt 是需要的:)
CONFIG_IP_NF_TARGET_MASQUERADE - 提供MASQUERADE(僞裝)操作。如果我們不知道連接Internet的IP,首選的方法就是使用MASQUERADE,而不是DNAT或SNAT。換句話說,就是如果我們使用PPP或SLIP等連入Internet,由DHCP或其他服務分配IP,使用這個比SNAT好。因爲MASQUERADE不需要預先知道連接Internet的IP,雖然對於計算機來說MASQUERADE要比NAT的負載稍微高一點。
CONFIG_IP_NF_TARGET_REDIRECT - 這個操作和代理程序一起使用是很有用的。它不會讓數據包直接通過,而是把包重新映射到本地主機,也就是完成透明代理。
CONFIG_IP_NF_TARGET_LOG - 爲iptables增加LOG(日誌)操作。通過它,可以使用系統日誌服務記錄某些數據包,這樣我們就能瞭解在包上發生了什麼。這對於我們做安全審查、調試腳本的幫助是無價的。
CONFIG_IP_NF_TARGET_TCPMSS - 這個選項可以對付一些阻塞ICMP分段信息的ISP(服務提供商)或服務。沒有ICMP分段信息,一些網頁、大郵件無法通過,雖然小郵件可以,還有,在握手完成之後,ssh可以但scp不能工作。我們可以用TCPMSS解決這個問題,就是使MSS(Maximum Segment Size)被鉗制於PMTU(Path Maximum Transmit Unit)。這個方法可以處理被Netfilter開發者們在內核配置幫助中稱作“criminally brain-dead ISPs or servers”的問題。
CONFIG_IP_NF_COMPAT_IPCHAINS - ipchains的,這只是爲內核從2.2轉換到2.4而使用的,它會在2.6中刪除。
CONFIG_IP_NF_COMPAT_IPFWADM - 同上,這只是ipfwadm的暫時使用的兼容模式。
上面,我簡要介紹了很多選項,但這只是內核2.4.9中的。要想看看更多的選項,建議你去Netfilter看看patch-o-matic。在那裏,有其他的一些選項。POM可能會被加到內核裏,當然現在還沒有。這有很多原因,比如,還不穩定,Linus Torvalds沒打算或沒堅持要把這些補丁放入主流的內核,因爲它們還在實驗。
把以下選項編譯進內核或編譯成模塊,rc.firewall.txt才能使用。
-
CONFIG_PACKET
-
CONFIG_NETFILTER
-
CONFIG_IP_NF_CONNTRACK
-
CONFIG_IP_NF_FTP
-
CONFIG_IP_NF_IRC
-
CONFIG_IP_NF_IPTABLES
-
CONFIG_IP_NF_FILTER
-
CONFIG_IP_NF_NAT
-
CONFIG_IP_NF_MATCH_STATE
-
CONFIG_IP_NF_TARGET_LOG
-
CONFIG_IP_NF_MATCH_LIMIT
-
CONFIG_IP_NF_TARGET_MASQUERADE
以上是爲保證 rc.firewall.txt正常工作而需要的最少的選項。其他腳本需要的選項,在相應的章節裏都有說明。目前,我們只需注意要學習的這個腳本。
內核配置並編譯好之後,剩下的就是修改兩個配置文件了。
vim /etc/network/interfaces
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
# Generated by rays-installer.
# The loopback interface
auto lo
iface lo inet loopback
auto eth3
iface eth3 inet static
address 202.201.13.65
netmask 255.255.255.0
network 202.201.13.0
broadcast 202.201.13.255
gateway 202.201.13.1
dns-nameservers 202.201.0.131
#auto eth3
#iface eth3 inet static
# address 192.168.2.247
# netmask 255.255.255.0
# network 192.168.2.0
# broadcast 192.168.2.255
# gateway 192.168.2.1
# dns-nameservers 202.201.0.131
#auto eth2
#iface eth2 inet static
# address 192.168.3.1
# netmask 255.255.255.0
# network 192.168.3.0
# broadcast 192.168.3.255
auto eth2
iface eth2 inet static
address 10.0.0.1
netmask 255.0.0.0
network 10.0.0.0
broadcast 10.255.255.255
安裝dhcp,即dhcp的版本爲2。(可以參考前面的)
vim /etc/dhcpd.conf
subnet 10.0.0.0 netmask 255.0.0.0 {
option routers 10.0.0.1;
option subnet-mask 255.0.0.0;
option domain-name "dslab lzu.edu.cn";
option domain-name-servers 202.201.0.131, 202.201.0.132;
option broadcast-address 10.255.255.255;
option time-offset -18000;
range 10.0.0.11 10.0.0.250;
default-lease-time 216000;
max-lease-time 432000;
}
最後執行
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth3 -j SNAT --to-source 202.201.13.65
上面這條命令配置的NAT屬於Port Restricted cone Nat型
關於iptables可以參考網址:
http://tldp.org/HOWTO/IP-Masquerade-HOWTO/firewall-examples.html
至此,配置完畢,可以使用了!