1. 程式人生 > >32.filter表案例 nat表應用 (iptables)

32.filter表案例 nat表應用 (iptables)

10.16/10.17/10.18 iptables nat表應用

 

 

10.15 iptables filter表案例:

 

~1. 寫一個具體的iptables小案例,需求是把80埠、22埠、21 埠放行。但是,22埠我要指定一個IP段,只有這個IP段的IP能訪問到。其他段的一概拒絕。需要通過一個指令碼來指定(指令碼可理解為一個批量執行的命令)、

vim /usr/local/sbin/iptables.sh 加入以下內容

#! /bin/bash 通過指令碼來實現

ipt=“/usr/sbin/iptables” 首先定義ipt這個變數,下面頻繁用到,不至於那麼繁瑣(寫指令碼時儘量用絕對路徑)

$ipt -F 清空之前的規則 (我們沒有-t指定一個表。所以為filter表)

$ipt -P INPUT DROP 指定INPUT的預設規則為DORP(也是為什麼要用指令碼的原因,不至於不能遠端連線)

$ipt -P OUTPUT ACCEPT 指定OUTPUT的預設規則為ACCETP(也就是預設規則)

$ipt -P FORWARD ACCEPT 指定FORWARD的預設規則為ACCETP(也就是預設規則)

然後下面加一些規則出來

$ipt -A INPUT -m state --state RELATED(可理解為連結的其他連結),ESTABLISHED(即為保持連結) -j ACCEPT

必須要寫的

制定了一些狀態,把他們放行。這些不太常用,但是要寫進來。因為我們要滿足上面的需要,這些需要總有一個相互連結的過程,為的是讓他們更順利的連結

$ipt -A INPUT -s 192.168.30.0/24 -p tcp --dport 22 -j ACCEPT 以上需求,按照22埠的規則的資料包放行

$ipt -A INPUT -p tcp --dport 80 -j ACCEPT 以上需求,80埠的資料包放行

$ipt -A INPUT -p tcp --dport 21 -j ACCEPT 以上需求,21埠的資料包放行

儲存退出後,要連結他。sh /usr/local/iptables.sh

iptables -nvL可檢視

~2. icmp示例

iptables -I INPUT -p icmp --icmp-type 8 -j DROP

ping外面的機器可以ping通,ping本機就不ping(外面的也ping不通本機)

 

 

例項:

1.

[root@axinlinux-01 ~]# vim /usr/local/sbin/iptables.sh

ipt="/usr/sbin/iptables"
$ipt -F
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$ipt -A INPUT -s 192.168.164.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@axinlinux-01 ~]# sh /usr/local/sbin/iptables.sh

[root@axinlinux-01 ~]# iptables -nvL

Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    7   796 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  *      *       192.168.164.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 9 packets, 1104 bytes)
 pkts bytes target     prot opt in     out     source               destination 

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

 

10.16/10.17/10.18 iptables

 

 

~1. nat表應用

~2. A機器兩塊網絡卡ens33(192.168.30.134)、ens37(192.168.164.1),ens33可以上外網,ens37僅僅是內部網路,B機器只有ens37(192.168.164.100),和A機器ens37可以通訊互聯

~3. 需求1:可以讓B機器連線外網

說白了就是做個小路由器(A機器),小路由器可以上網,那麼電腦就可以上網

首先,我們需要兩臺機器。給01新增網絡卡 例項~3.

~4. A機器上開啟路由器轉發 echo "1">/proc/sys/net/ipv4/ip_forward

預設這個路徑檔案為0,即代表沒有開啟核心轉發。因為要使用nat的應用,必須要開啟nat的埠轉發

~5. A上執行iptables -t nat -A POSTROUTING -s 192.168.164.0/24 -o ens33 -j MASQUERADE

這條規則,就是想讓100.0這個網段可以上網

新增這條規則,就可以上網了

~6. B上設定閘道器為192.168..164.

設定閘道器的目的:試想一下,你的資料包過去,從A到B,從B到A,我怎麼到A呢?肯定的需要一個閘道器啊,預設閘道器給他設定好。寫法為:

route add default gw 192.168.100.1

執行完這個就可以與公網通訊了(也就是01的IP)。我們在設定一下dns(vi etc/resolv.conf),就可以與外網通訊了。

vi之後加上 nameserver 119.29.29.29 這個是dns的公共dns.詳見例項,~5.

其實到這,就會發現,A機器(01)就是個路由器。B機器(02)通過A機器(01)上網

~7. 需求2:C機器只能和A通訊,讓C機器可以直接連通B機器的22埠

意思是,遠端連線B機器。因為A機器可以遠端,通過A機器跳轉到B機器,達到遠端連線B的目的。而這個就叫做“埠對映”

把B機器的22埠映射出來。A機器的埠已經了吧,是可以遠端的。我們把他對映成其他的。也就是說,我們訪問這個其他的埠,實際上就是訪問的B機器的22埠。從而達到遠端B機器的目的。如圖:

~8. A上開啟路由器轉發echo "1">/proc/sys/net/ipv4/ip_forward

同樣的開啟埠轉發

~9. A上執行 iptables -t nat -A PREROUTING -d 192.168.30.134 -p tcp --dport 1122 -j DNAT --to 192.168.164.100:22

這個是進來的,我的是30.134,給他轉發到164.100的22埠

~9. A上執行 iptables -t nat -A POSTROUTING -s 192.168.164.100 -j SNAT --to 192.168.30.134

這是回來的包,回來的包也要做一個操作

就從100.100回來的包,經過這個A機器,給他在做一個SNAT操作,把目標地址改成30.134

~10. B上設定閘道器為192.168.164.1

要給B加上閘道器,一樣的操作

route add default gw 192.168.164.1

 

例項:

~3.

首先準備01 的需求

 

 

 

6.選擇網路介面卡2,點lan區段(相當於連到內網的交換機上,這個交換機windows機器是連不上的。我們這兩臺機器01和02我們連上同一個交換機就可以通訊了)

 

 

11.我們02也相同的連上同樣的lan區段(也就是連上同樣的交換機)

以上準備工作已完成,啟動機器(注意,此時我們遠端不上02,是因為改成了lan區段)

12.此時01上,ifconfig會出現新的網絡卡ens37,我們要修改他的配置IP、網段,可以手動命令列來設定

ifconfig ens37 192.168.164.1/24 (當然只是在記憶體中更改的,重啟就沒有了,想要永久生效,就要編輯配置檔案。需要cp ens33的,去修改好幾個地方)

[root@axinlinux-01 ~]# ifconfig ens37 192.168.164.1/24

這樣兩塊網絡卡就設定好了。外網(ens33)內網(ens37)

13.那再來設定02機器的需求

因任務需要,保險起見。我們可以先ifdown掉ens33.這樣02只跟01通訊

14.同樣的我們根據需求,可以用手動命令列來設定02的IP

小案例:阿鑫在具體修改ens37的時候,並沒有ens37這個網絡卡。重新添加了新的網絡卡,並且連線了同樣01的lan區段,才有的ens37這個網絡卡

ifconfig ens37 192.168.100.100/24

小案例:阿銘視訊中,ping 01是ping不通的,是因為01 ens37的IP莫名沒有了,有ifconfig設定了一下,就好了

以上,準備工作已全部完成(~2.的準備工作完成)

 

~4.

[root@axinlinux-01 ~]# cat /proc/sys/net/ipv4/ip_forward

0 預設0,沒有開啟核心轉發

[root@axinlinux-01 ~]# echo "1">/proc/sys/net/ipv4/ip_forward 修改引數

[root@axinlinux-01 ~]# cat /proc/sys/net/ipv4/ip_forward

1 已開啟

 

~5.

route -n檢視閘道器,顯示沒有閘道器。 route add default gw 192.168.100.1設定預設為這個閘道器

 

~6.

vi etc/resolv.conf

這個時候就可以ping通這個公共dns了。當然也可以ping通外網了。但是外網ping不同這個。