前提知識html
任何主機若要與非同網絡中的主機通訊,則必須將報文發送到默認網關;bash
對Linux而言,IP地址是屬於主機(內核中)的,不屬於網卡,只要屬於當前主機的IP地址間,均可直接響應,不稱爲轉發服務器
私有地址在路由器上是不容許被路由的網絡
防火牆的類型與做用的鏈架構
主機防火牆:通常使用INPUT,OUTPUT鏈來過濾進入和發出的報文tcp
網絡防火牆:通常使用PREROUTING,FORWARD,POSTROUTING鏈來轉發通過的報文ide
不一樣網絡間主機通訊的方式學習
路由:測試
對於Linux主機,設定/proc/sys/net/ipv4/ip_forward的值爲1,即開啓了路由功能,能夠做爲模擬路由器使用spa
注:但真實的路由器還應該存在生成路由表的機制,通常是基於路由協議(如RIP2,OSPF)動態學習的,在此不做討論
NAT:
工做於網絡層和傳輸層,也可分爲靜態NAT和動態NAT
Basic NAT:靜態NAT;NAT服務器上有一個外網地址池,內網鏈接時直接分配一個外網IP使用,很不靈活
NAPT:動態NAT,Network Address Port Translation,即網絡端口地址轉換,也可分爲SNAT和DNAT
iptables/netfilter基於SNAT和DNAT原理實現報文轉發
-j SNAT --to-source SIP
規則添加:在POSTROUTING鏈上
-j MASQUERADE
用於外網IP是ADSL撥號上網時生成的動態IP,MASQUERADE模式能自行查找能訪問互聯網的外網IP,並完成SNAT
-j DNAT --to-destination DIP[:Port]
支持端口映射
規則添加:在PREROUTING鏈上
實例:
# 將外網對172.16.100.7:22022的訪問轉發至內網的192.168.20.12.22 iptables -t nat -A PREROUTING -d 172.16.100.7 -p tcp --dport 22022 -j DNAT --to-destination 192.168.20.12.22
iptables/netfilter實戰解析
需求分析
架構設計
配置部署
DNS Server配置
網絡配置
# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" BOOTPROTO="static" NM_CONTROLLED="no" ONBOOT="yes" TYPE="Ethernet" IPADDR=172.16.251.178 NETMASK=255.255.0.0 GATEWAY=172.16.251.236
DNS主配置文件:/etc/named.conf
# named.conf中需修改的部分 listen-on port 53 { 127.0.0.1; 172.16.251.178;}; allow-query { any; }; recursion no; #zone "." IN { # type hint; # file "named.ca"; #};
DNS輔助配置文件:/etc/named.rfc1912.zones
acl inter_net { 172.16.251.0/24; }; view inter_net { match-clients { inter_net; }; zone "." IN { type hint; file "named.ca"; }; zone "jason.com" IN { type master; file "jason.com.inter_net"; }; }; view outer_net { match-clients { any; }; zone "jason.com" IN { type master; file "jason.com.outer_net"; }; };
區域數據文件:
# vi /var/named/jason.com.inter_net $TTL 1D jason.com. IN SOA dns.jason.com. admin.jason.com ( 2014032920 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ NS dns dns A 172.16.251.178 www A 172.16.251.182 # vi /var/named/jason.com.outer_net $TTL 1D jason.com. IN SOA dns.jason.com. admin.jason.com ( 2014032920 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ NS dns dns A 172.16.251.178 www A 3.3.3.1
啓動named服務
chown root.named jason.com.inter_net chown root.named jason.com.outer_net service named restart
Web Server配置
配置一個虛擬主機,監聽端口8080 在DocumentRoot目錄下建立一簡單的測試文件test.html,內容隨意,如 「Hello Mageedu」 啓動httpd服務便可
Firewall配置
網絡配置
# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" BOOTPROTO="static" NM_CONTROLLED="no" ONBOOT="yes" TYPE="Ethernet" IPADDR=172.16.251.236 NETMASK=255.255.0.0 GATEWAY=172.16.0.1 # vi /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE="eth1" BOOTPROTO="static" NM_CONTROLLED="no" ONBOOT="yes" TYPE="Ethernet" IPADDR=3.3.3.1 NETMASK=255.255.255.0 DNS1=3.3.3.1
注:由於3.3.3.1和3.3.3.3都是模擬的外網IP地址,故對應的網卡應處於同一信道內,且不能和內網的通訊信道一致,故在用虛擬機測試時,可將對應內網IP的網卡的網絡方式改成橋接,而對應外網IP的網卡的網絡方式改成自定義,如vmnet2
添加iptables規則
iptables -t nat -A PREROUTING -d 3.3.3.1/32 -p udp --dport 53 -j DNAT --to-destination 172.16.251.178 iptables -t nat -A PREROUTING -d 3.3.3.1/32 -p tcp --dport 8080 -j DNAT --to-destination 172.16.251.182
Inter Client配置
# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" BOOTPROTO="static" NM_CONTROLLED="no" ONBOOT="yes" TYPE="Ethernet" IPADDR=172.16.251.176 NETMASK=255.255.255.0 GATEWAY=172.16.251.236 DNS1=172.16.251.178 # vi /etc/resolv.conf nameserver 172.16.251.178
Outer Client配置
# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" BOOTPROTO="static" NM_CONTROLLED="no" ONBOOT="yes" TYPE="Ethernet" IPADDR=3.3.3.3 NETMASK=255.255.255.0 GATEWAY=3.3.3.1 DNS1=3.3.3.1 # vi /etc/resolv.conf nameserver 3.3.3.1
DNS解析測試
HTTP訪問測試
大功告成,哦也!
上一篇:iptables規則基本用法