netfilter的filter表案列與nat表應用
阿新 • • 發佈:2018-01-25
dba tro 常見 war ges pac netfilter let vim 一、fileter表案例
現有條件:
A機器兩塊網卡ens33(192.168.204.128)、ens37(192.168.100.1),ens33可以上外網,ens37僅僅是內部網絡,B機器只有ens37(192.168.100.100),和A機器ens37可以通信互聯。
為達到實驗條件,先準備兩臺虛擬機:
1、在VMware克隆一下現有的虛擬機(A機器),並把克隆的虛擬機命名為zhulinux2(B機器);
2、對A機器的網卡進行增加,並且設置成LAN區段為“自定義區段”,表示內部網絡地址;
3、對B機器的網卡設置成ens37,IP地址192.168.100.100/24,並把網絡適配器改成LAN區段,與A機器一樣,如下圖所示:
4、設置A機器ens37網址;
5、設置B機器的ens37網址,先關閉ens33網卡,因為可以訪問外網:
需求:
1、可以讓B機器連接外網:
A機器操作:
需求:只針對filter表,預設策略INPUT鏈DROP,其他兩個鏈ACCEPT,然後針對192.168.204.0/24開通22端口,對所有網段開放80端口,對所有網段開放21端口。
這個需求不算復雜,但是因為有多條規則,所以最好寫成腳本的形式。腳本內容如下:
[root@zlinux ~]# cat /usr/local/sbin//iptables.sh cat: /usr/local/sbin//iptables.sh: 沒有那個文件或目錄 [root@zlinux ~]# vim !$ vim /usr/local/sbin//iptables.sh #! /bin/bash ipt="/sbin/iptables" $ipt -F //清空規則 $ipt -P INPUT DROP //指定INPUT鏈默認動作DROP $ipt -P OUTPUT ACCEPT //指定OUTPUT鏈默認動作ACCEPT $ipt -P FORWARD ACCEPT //指定OUTPUT鏈默認動作ACCEPT $ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT //指定狀態放行 $ipt -A INPUT -s 192.168.204.0/24 -p tcp --dport 22 -j ACCEPT //針對ip段開通22端口 $ipt -A INPUT -p tcp --dport 80 -j ACCEPT //對所有網段開通80端口 $ipt -A INPUT -p tcp --dport 21 -j ACCEPT //對所有網段開通21端口
然後執行腳本:
# sh /usr/local/sbin/iptables.sh
可以看到包的數量是在變化的。
關於icmp的包有一個比較常見的應用:
[root@zlinux ~]# iptables -I INPUT -p icmp --icmp-type 8 -j DROP
--icmp-type 這個選項是要跟-p icmp 一起使用的,後面指定類型編號。這個8指的是能在本機ping通其他機器,而其他機器不能ping通本機。這個有必要記一下。
二、nat表的應用
linux的iptables功能是十分強大的,只有想不到沒有做不到!也就是說只要你能夠想到的關於網絡的應用,linux都能幫你實現。在日常生活中相信你接觸過路由器吧,它的功能就是分享上網。本來一根網線過來(其實只有一個公網IP),通過路由器後,路由器分配了一個網段(私網IP),這樣連接路由器的多臺pc都能連接intnet而遠端的設備認為你的IP就是那個連接路由器的公網IP。這個路由器的功能其實就是由linux的iptables實現的,而iptables又是通過nat表作用而實現的這個功能。那麽直接來舉例說明:
A機器兩塊網卡ens33(192.168.204.128)、ens37(192.168.100.1),ens33可以上外網,ens37僅僅是內部網絡,B機器只有ens37(192.168.100.100),和A機器ens37可以通信互聯。
為達到實驗條件,先準備兩臺虛擬機:
1、在VMware克隆一下現有的虛擬機(A機器),並把克隆的虛擬機命名為zhulinux2(B機器);
2、對A機器的網卡進行增加,並且設置成LAN區段為“自定義區段”,表示內部網絡地址;
3、對B機器的網卡設置成ens37,IP地址192.168.100.100/24,並把網絡適配器改成LAN區段,與A機器一樣,如下圖所示:
4、設置A機器ens37網址;
5、設置B機器的ens37網址,先關閉ens33網卡,因為可以訪問外網:
需求:
1、可以讓B機器連接外網:
A機器操作:
[root@zlinux ~]# echo "1">/proc/sys/net/ipv4/ip_forward //打開路由轉發功能
[root@zlinux ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
B機器操作,設置默認網關,設置好之後就可以連接外網了:
這個ping百度,是因為設置了dns。
2、C機器只能和A通信,讓C機器可以直接連通B機器的22端口:
A機器操作:
[root@zlinux ~]# iptables -t nat -A PREROUTING -d 192.168.204.128 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22
[root@zlinux ~]# iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.204.128
[root@zlinux ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- * * 0.0.0.0/0 192.168.204.128 tcp dpt:1122 to:192.168.100.100:22
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
3 213 MASQUERADE all -- * ens33 192.168.100.0/24 0.0.0.0/0
0 0 SNAT all -- * * 192.168.100.100 0.0.0.0/0 to:192.168.204.128
至此,連接成功。
netfilter的filter表案列與nat表應用