73.fileter表案例,NAT表的應用
要求如下:
只針對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@localhost /]# vim !$
vim /usr/local/sbin//iptables.sh
編輯上面的文件,把下面的內容添加進去
#! /bin/bash
$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 -p tcp --dport 80 -j ACCEPT //對所有網段開通80端口
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT //對所有網段開通21端口
[root@localhost /]# cat /usr/local/sbin/iptables.sh #查看文件內容
#! /bin/bash
ipt="/sbin/iptables"
$ipt -F
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD 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
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT
[root@localhost /]#
[root@localhost /]# sh /usr/local/sbin/iptables.sh #執行文件
root@localhost /]# iptables -nvL #查看規則
Chain INPUT (policy DROP 133 packets, 10525 bytes)
pkts bytes target prot opt in out source destination
271 20528 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT tcp -- 192.168.204.0/24 0.0.0.0/0 tcp dpt:22
0 0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 155 packets, 18392 bytes)
pkts bytes target prot opt in out source destination
Chain VL (0 references)
pkts bytes target prot opt in out source destination
[root@localhost /]#
註:關於icmp的包有一個比較常見的應用:
[root@zlinux ~]# iptables -I INPUT -p icmp --icmp-type 8 -j DROP
--icmp-type 這個選項是要跟-p icmp 一起使用的,後面指定類型編號。這個8指的是能在本機ping通其他機器,而其他機器不能ping通本機。這個有必要記一下。
NAT表應用
llinux的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機器ens37IP![]
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
至此,連接成功。
73.fileter表案例,NAT表的應用