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不同這個。