1. 程式人生 > >netfilter的filter表案列與nat表應用

netfilter的filter表案列與nat表應用

dba tro 常見 war ges pac netfilter let vim

一、fileter表案例

需求:只針對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表應用