環境:RedHat Linux9.0。Webmin version 1.38。Webmin是一款B/S結構的優秀的Linux系統管理軟體,利用其圖形化使用者介面,可以方便、高效的管理大多數Linux的服務、應用、網路和硬體設定。Webmin安裝後不用運行Apache伺服器,自己就提供Web服務,預設的連接埠是10000。
網卡:
eth0:外網卡,IP=10.0.0.118,255.255.255.0
eth1:內網卡,IP=192.168.0.118,255.255.255.0
在Linux下用ifconfig命令查看網卡配置的結果:
[root@mylinux root]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:03:FF:0B:21:81
inet addr:10.0.0.118 Bcast:10.0.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1447 errors:0 dropped:0 overruns:0 frame:0
TX packets:1257 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:134788 (131.6 Kb) TX bytes:131251 (128.1 Kb)
Interrupt:11 Base address:0x9000
eth1 Link encap:Ethernet HWaddr 00:03:FF:19:21:81
inet addr:192.168.0.118 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2133 errors:0 dropped:0 overruns:0 frame:0
TX packets:2082 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:160402 (156.6 Kb) TX bytes:156738 (153.0 Kb)
Interrupt:11 Base address:0xd000
/etc/sysconfig/network_scripts/ ifcfg-eth0檔案內容:
# Please read /usr/share/doc/initscripts-*/sysconfig.txt
# for the documentation of these parameters.
USERCTL=no
PEERDNS=yes
GATEWAY=10.0.0.2
TYPE=Ethernet
DEVICE=eth0
HWADDR=00:03:ff:0b:21:81
BOOTPROTO=none
NETMASK=255.255.255.0
ONBOOT=yes
IPADDR=10.0.0.118
NETWORK=10.0.0.0
BROADCAST=10.0.0.255
/etc/sysconfig/network_scripts/ ifcfg-eth1檔案內容:
# Please read /usr/share/doc/initscripts-*/sysconfig.txt
# for the documentation of these parameters.
USERCTL=no
PEERDNS=yes
TYPE=Ethernet
DEVICE=eth1
HWADDR=00:03:ff:19:21:81
BOOTPROTO=none
NETMASK=255.255.255.0
ONBOOT=yes
IPADDR=192.168.0.118
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
路由表:
[root@mylinux root]# gedit
[root@mylinux root]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 10.0.0.2 0.0.0.0 UG 0 0 0 eth0
配置:
開啟Webmin網址:http//10.0.0.2:10000,輸入root帳戶名稱和其密碼,選擇網路設定下的“Linux Firewall”:
開啟的介面,在“Showing Iptable”按鈕右邊預設選擇的是“Packet filtering(filter)”,可以進行防火牆的配置。如果原來已經設定啟用了中級或進階防火牆策略,那就必須注意在這裡配置轉寄(Forwarded packets (FORWARD))規則,允許NAT通訊的有關協議、連接埠的流量由內向外通過(注意方向不能搞錯,內網卡是input,外網卡是output),使NAT真正生效。實驗時,我們允許所有的通訊通過,規則如下:
Accept - If input interface is eth1 and output interface is eth0
並且注意規則的執行順序,是由上而下,最上面的先被匹配,只要找到匹配的規則,就直接跳出規則隊列。
為了配置NAT服務,需要選擇“Showing Iptable”按鈕右邊的“Network Address Translation(nat)”選項,然後點擊“Showing Iptable”按鈕,進入NAT配置介面。
按“Add Role”按鈕,開啟規則配置介面。
“Action to take”選“Source NAT”,“IPs and ports for SNAT”的“IP range”填10.0.0.118;Outgoing interface選等於(Equals)eth0,就是外網卡;別的選項選擇預設值。然後按“Save”按鈕儲存,再按“Apply Configuration”按鈕,使規則即可生效。
注意,配置到這裡,其實還是不能實現需要的功能,不知道是Webmin的功能欠缺還是別的什麼原因,我們還需要配置Linux實現“IP轉寄”功能,才能最後完成所有任務。
配置Linux“IP轉寄”,有的資料上說必須在/etc/sysconfig/network檔案末加FORWARD_IPV4=yes語句:
/etc/sysconfig/network:
NETWORKING=yes
HOSTNAME=myLinux
GATEWAY=10.0.0.2
FORWARD_IPV4=yes
同時再執行echo 1 > /proc/sys/net/ipv4/ip_forward語句。但是我發現在Redhat Linux9.0下只要執行後一條語句就夠了,不知道別的Linux發行版是不是與此相同。
為了使語句echo 1 > /proc/sys/net/ipv4/ip_forward語句在開機後自動執行,我們把它加到/etc/rc.d/rc.local檔案末尾就可以了。
用Webmin配置防火牆和NAT服務,本質上是編輯和操作/etc/sysconfig/iptables檔案,所有配置結果都儲存在該檔案中,/etc/sysconfig/iptables內容:
# Firewall configuration written by lokkit
# Manual customization of this file is not recommended.
# Note: ifup-post will punch the current nameservers through the
# firewall; such entries will *not* be listed here.
*filter
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:RH-Lokkit-0-50-INPUT - [0:0]
:OUTPUT ACCEPT [0:0]
:My-test-Chain - [0:0]
-A INPUT -p tcp -m tcp -i eth0 --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp -i eth0 --dport 137:139 -j ACCEPT
-A RH-Lokkit-0-50-INPUT -i lo -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 0:1023 -j REJECT --syn
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 2049 -j REJECT --syn
-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 0:1023 -j REJECT
-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 2049 -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 6000:6009 -j REJECT --syn
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 7100 -j REJECT --syn
-A My-test-Chain -p icmp -d 10.0.0.118 -i eth0 -j DROP
-A INPUT -j RH-Lokkit-0-50-INPUT
-A FORWARD -j RH-Lokkit-0-50-INPUT
-A OUTPUT -o eth0 -j ACCEPT
# Not ping 10.0.0.118
-A INPUT -p icmp -d 10.0.0.118 -i eth0
-A FORWARD -i eth1 -o eth0 -j ACCEPT
COMMIT
# Generated by webmin
*mangle
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed
# Generated by webmin
*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -j SNAT --to-source 10.0.0.118
COMMIT
# Completed
其實,核心配置語句就是一句:
-A POSTROUTING -o eth0 -j SNAT --to-source 10.0.0.118
本文來自“十萬個為什麼”電腦學習網 http://www.why100000.com
http://www.why100000.com/_Linux/doc/RHLinux_Webmin_Nat.swf
作者:張慶(網眼)2008-1-21