七週四次課(1月25日)

七週四次課(1月25日)
10.15 iptables filter表案例
10.16/10.17/10.18 iptables nat表應用
shell

10.15 iptables filter表案例vim

iptables小案例bash

vi /usr/local/sbin/iptables.sh //加入以下內容網絡

#! /bin/bashless

ipt="/usr/sbin/iptables"tcp

$ipt -Foop

$ipt -P INPUT DROPpost

$ipt -P OUTPUT ACCEPT網站

$ipt -P FORWARD ACCEPTspa

$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 

$ipt -A INPUT -s 192.168.133.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 

icmp示例

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

iptables經常使用知識回顧點

  • iptables -I/-A/-D 後緊跟 鏈 ,能夠是INPUT,OUTPUT,FORWARD
  • iptables -P 用來指定鏈的默認策略 ——>最好不要直接操做,不然會形成遠程的終端斷開

iptables小案例

  • 需求:
    • 把80,22,21端口放行,但22端口指定一個IP段,只容許這個IP段的IP訪問的時候,纔可訪問到,其餘段的一律拒絕
  • 實現:(用一個腳原本實現)
    • RELATED狀態,這是一個邊緣的一個狀態
      • 好比:客戶端和服務端相互創建了通訊,創建完鏈接以後,還會有一些額外的連接出來,這時候狀態就變成了RELATED(若僅僅只有ESTABLISHED,而沒有RELATED,頗有可能致使其餘的通訊被禁掉,由於默認策略是INPUT DROP)
    • ESTABLISHED狀態, 保持鏈接
    • 有時,在沒有增長-m --state這條規則,致使增長了80或21端口,可是不能正常通訊,加這條規則的目的是爲了讓通訊更加順暢

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

#!/bin/bash

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.77.1/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

ipt="/usr/sbin/iptables"

//這裏ipt是定義個一個變量(寫腳本的時候,寫全局的路徑,就是絕對路徑,就是後面再加載它,用變量去代替,看着更加簡單)

$ipt -F

//清空以前的規則——>在沒有 -t 指定表的時候,默認的就是filter表

$ipt -P INPUT DROP

//把IPPUT的策略給扔掉

$ipt -P OUTPUT ACCEPT

//把OUTPUT放行

$ipt -P FORWARD ACCEPT

//把FORWARD放行

$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

//增長規則,-m --state 指定了狀態,並針對這些狀態放行(-m --state這種用法並很少見,可是這條規則必須寫進來,目的是讓相關的數據包放行)

$ipt -A INPUT -s 192.168.77.1/24 -p tcp --dport 22 -j ACCEPT

//把該網段的22端口數據包放行——>這裏的IP段根據本身的IP段來作實驗

$ipt -A INPUT -p tcp --dport 80 -j ACCEPT

//把80端口數據包放行

$ipt -A INPUT -p tcp --dport 21 -j ACCEPT

//把21端口數據包放行

使用sh命令執行寫好的shell腳本

[root@tianqi-01 sbin]# sh /usr/local/sbin/iptables.sh 

執行完腳本後使用iptables -nvL命令就能夠查看到添加上去的規則:

[root@tianqi-01 sbin]# iptables -nvL

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

  • 爲何要寫腳本?
  • 由於這裏有INPUT DROP,確定要把你的遠程鏈接給斷開,因此須要執行腳本把你的命令批量執行

icmp示例

1.iptables -I INPUT -p icmp --icmp-type 8 -j DROP 這個規則會產生一個效果,讓你ping外面的機器還能夠ping通,可是ping本機的時候,就不會通了

[root@tianqi-01 sbin]# iptables -I INPUT -p icmp --icmp-type 8 -j DROP

//會發現可ping通外面的網絡,但本身的虛擬機和物理機則沒法鏈接

[root@tianqi-01 sbin]# ping www.qq.com
PING www.qq.com (112.90.83.112) 56(84) bytes of data.
64 bytes from 112.90.83.112: icmp_seq=1 ttl=128 time=12.1 ms
64 bytes from 112.90.83.112: icmp_seq=2 ttl=128 time=192 ms
64 bytes from 112.90.83.112: icmp_seq=3 ttl=128 time=221 ms
^C
--- www.qq.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2013ms
rtt min/avg/max/mdev = 12.123/142.229/221.660/92.744 ms
[root@tianqi-01 sbin]# 

2.這時用本身的物理機去ping虛擬機,會發現沒法鏈接

3.這時,再來刪除這條命令

  • iptables -D INPUT -p icmp --icmp-type 8 -j DROP

[root@tianqi-01 sbin]# iptables -D INPUT -p icmp --icmp-type 8 -j DROP

4.service iptables restart 重啓iptables服務

[root@tianqi-02 ~]# service iptables restart    //重啓iptables服務
Redirecting to /bin/systemctl restart  iptables.service
[root@tianqi-02 ~]# 

[root@tianqi-01 ~]# iptables -nvL    //這裏會看到還沒禁掉以前的規則

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   29  1924 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 17 packets, 1492 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@tianqi-02 ~]# 

這裏--icmp-type選項要跟-p icmp一塊兒使用,後面指定類型編號。這個8指的是能在本機ping通其餘機器,而其它機器不能ping通本機,請牢記。

5.這裏物理機去ping虛擬機IP,會發現再次ping通

  • 這裏的物理機和虛擬機不通,並不指不能鏈接,這裏僅僅是作了一個禁ping而已(是能夠ping通外網的,但別人沒法ping通你)

10.16/10.17/10.18 iptables nat表應用

•nat表應用

• A機器兩塊網卡ens33(192.168.133.130)、ens37(192.168.100.1),ens33能夠上外網,ens37僅僅是內部網絡,B機器只有ens37(192.168.100.100),和A機器ens37能夠通訊互聯。

• 需求1:可讓B機器鏈接外網

• A機器上打開路由轉發 echo "1">/proc/sys/net/ipv4/ip_forward

• A上執行 iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE

• B上設置網關爲192.168.100.1

• 需求2:C機器只能和A通訊,讓C機器能夠直接連通B機器的22端口

• A上打開路由轉發echo "1">/ proc/sys/net/ipv4/ip_forward

•  A上執行iptables -t nat -A PREROUTING -d 192.168.133.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22

• A上執行iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.133.130

 B上設置網關爲192.168.100.1

nat表應用

  • A機器兩塊網卡ens33(192.168.202.130)、ens37(192.168.100.1),ens33能夠上外網,ens37僅僅是內部網絡,B機器只有ens37(192.168.100.100),和A機器ens37能夠通訊互聯。

需求1:可讓B機器鏈接外網

  • A機器上打開路由轉發 echo "1">/proc/sys/net/ipv4/ip_forward
  • A上執行 iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
  • B上設置網關爲192.168.100.1

需求:如今我有兩臺機器,A機器共有兩塊網卡,一塊是能夠鏈接外網的,一塊是能夠鏈接內網的。B機器則只有一個內網網卡,不能鏈接外網,只能鏈接內網。如今的需求就是想要B機器可以鏈接外網,說白了就是想作一個路由器的功能。

 1.首先作這個實驗須要兩個虛擬機,記得先拍攝一個快照,以避免在實驗過程當中出現問題沒法恢復:

2.給第一臺虛擬機添加一個網卡:

編輯虛擬機設置->選擇添加->選擇網絡適配器,下一步->完成。

此時出現網絡適配器2,選擇LAN區段,點擊LAN區段(s)->添加,自定義名字,肯定->在LAN區段(L)下選擇「自定義名字」,肯定。此時網絡適配器2已經選擇了「LAN區段」。

3.把另外一臺虛擬機的網卡禁止掉,而後添加一個新網卡,一樣指定剛剛添加的那個LAN區段:

點擊「添加」,選擇「網絡適配器」,下一步,完成。網絡適配器2右側點擊「LAN區段(L)」,選擇「自定義名字」,肯定。

4.將兩臺虛擬機啓動起來,而後給新網卡配置IP,先配置CentOS 7.4-1,使用ifconfig命令能夠看到新網卡的信息:

[root@tianqi-01 ~]# ifconfig -a
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.231.132  netmask 255.255.255.0  broadcast 192.168.231.255
        inet6 fe80::cdb4:62da:20:9c95  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:b3:30:b6  txqueuelen 1000  (Ethernet)
        RX packets 278  bytes 21177 (20.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 80  bytes 12260 (11.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.231.139  netmask 255.255.255.0  broadcast 192.168.231.255
        ether 00:0c:29:b3:30:b6  txqueuelen 1000  (Ethernet)

ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::e248:f90:634b:5b98  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:b3:30:c0  txqueuelen 1000  (Ethernet)
        RX packets 35  bytes 11970 (11.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 102  bytes 17988 (17.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 8  bytes 552 (552.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 552 (552.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@tianqi-01 ~]# 

接着使用ifconfig命令給新網卡配置一個IP,設置24網段:

[root@tianqi-01 ~]# ifconfig ens37 192.168.100.1/24

可是這種方式配置的IP重啓系統就沒有了,想要有永久有效就須要把網卡配置文件複製一份出來,將文件名稱改成該網卡的名稱,而後將裏面的配置信息改成這個網卡IP:

[root@tianqi-01 ~]# cd /etc/sysconfig/network-scripts/

[root@tianqi-01 network-scripts]# ls
ifcfg-ens33    ifdown-bnep  ifdown-isdn    ifdown-sit       ifup          ifup-ippp  ifup-plusb   ifup-sit       ifup-wireless
ifcfg-ens33:0  ifdown-eth   ifdown-post    ifdown-Team      ifup-aliases  ifup-ipv6  ifup-post    ifup-Team      init.ipv6-global
ifcfg-lo       ifdown-ippp  ifdown-ppp     ifdown-TeamPort  ifup-bnep     ifup-isdn  ifup-ppp     ifup-TeamPort  network-functions
ifdown         ifdown-ipv6  ifdown-routes  ifdown-tunnel    ifup-eth      ifup-plip  ifup-routes  ifup-tunnel    network-functions-ipv6

[root@tianqi-01 network-scripts]# cp ifcfg-ens33 ifcfg-ens37
[root@tianqi-01 network-scripts]# ls

ifcfg-ens33    ifdown-bnep  ifdown-post    ifdown-TeamPort  ifup-eth   ifup-plusb   ifup-Team         network-functions
ifcfg-ens33:0  ifdown-eth   ifdown-ppp     ifdown-tunnel    ifup-ippp  ifup-post    ifup-TeamPort     network-functions-ipv6

ifcfg-ens37    ifdown-ippp  ifdown-routes  ifup             ifup-ipv6  ifup-ppp     ifup-tunnel
ifcfg-lo       ifdown-ipv6  ifdown-sit     ifup-aliases     ifup-isdn  ifup-routes  ifup-wireless
ifdown         ifdown-isdn  ifdown-Team    ifup-bnep        ifup-plip  ifup-sit     init.ipv6-global

[root@tianqi-01 network-scripts]# vim ifcfg-ens37

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"

NAME="ens37"
UUID="a0a278f6-09ab-4b83-981b-6a5bf82223b4"
DEVICE="ens37"
ONBOOT="yes"
IPADDR=192.168.100.1
NETMASK=255.255.255.0

重啓網卡服務

[root@tianqi-01 network-scripts]# service network restart
Restarting network (via systemctl):                        [  OK  ]

5.配置另外一臺虛擬機的網卡IP:

因爲沒法遠程,在本機操做。

一樣的使用ifconfig命令配置IP

接着複製網卡文件,並修改成新網卡的信息:

修改完後重啓一下網卡服務,可是可能會重啓失敗,若是重啓失敗就重啓操做系統便可。

以上操做成功後就ping一下CentOS 7.4的IP看看是否能ping通:

若是沒法ping通證實有問題,須要去檢查一下,CentOS 7.4的IP是否存在,若是CentOS 7.4的IP存在的話,就檢查一下CentOS 7.2的IP是否存在,發現IP不存在的話就從新使用ifconfig命令配置一下便可。

若是出現屢次使用ifconfig命令配置IP以後,IP卻消失的狀況,就得查看這個網卡的網卡配置文件是否有問題。

6.準備工做都就緒以後,確保兩個網卡均可以互相ping以後,就開始完成需求1:讓CentOS 7.4clone能夠鏈接外網:

首先打開CentOS 7.4的nat路由中轉發,這一步須要修改一下內核參數,須要修改/proc/sys/net/ipv4/ip_forward文件,這個文件默認的值爲0,0表明沒有開啓轉發,因此咱們要將這個值改成1:

[root@tianqi-01 network-scripts]# cat /proc/sys/net/ipv4/ip_forward
0
[root@tianqi-01 network-scripts]# echo "1" > !$
echo "1" > /proc/sys/net/ipv4/ip_forward
[root@tianqi-01 network-scripts]# cat /proc/sys/net/ipv4/ip_forward
1
第二步,增長一條規則(有了這條規則就能夠上網):

[root@tianqi-01 network-scripts]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33-j MASQUERADE
[root@tianqi-01 network-scripts]# iptables -t nat -nvL

Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

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         
    0     0 MASQUERADE  all  --  *      ens33   192.168.100.0/24     0.0.0.0/0 

上面是可以鏈接外網網卡的名字。

這一步要注意的是,網卡的名稱看清楚得是能連接外網網卡的那個網卡名稱,搞錯了後續步驟就會失敗。

第三步,給CentOS 7.2設置默認網關:

設置了默認網關後可使用route -n查看一下,是否設置成功:

設置了默認網關後ping一下CentOS 7.4的外網網卡IP和虛擬機的網關地址看看能不能ping通:

 

能ping通以後,就表明能夠鏈接外網了,可是這時候還不可以ping網址,因此接下來咱們給CentOS 7.2設置一下DNS,看看可否鏈接網站:

而後ping一下DNS的地址看看是否能ping通:

wKiom1nlwzLARdyfAANFPhp60sE937.png

能ping的通就表明沒問題,這時候就能夠ping一下一些網站了:

wKioL1nlwH2SMLC3AANLzqslMnk667.png

能ping通網址的話,就表明這個臺內網的機器已經能夠經過CentOS 7.4的nat轉發來鏈接外網了,如今CentOS 7.4就至關於充當了一個路由器的角色,經過這臺機器就可讓內網的機器得以鏈接外網了。

需求2:如今使用Windows是不能鏈接CentOS 7.2的,因此如今的需求就是可以遠程鏈接CentOS 7.2。要實現這個需求須要經過CentOS 7.4進行一個跳轉,也就是所謂的端口映射,把CentOS 7.2的22端口映射到CentOS 7.4上。

• 需求2:C機器只能和A通訊,讓C機器能夠直接連通B機器的22端口

• A上打開路由轉發echo "1">/ proc/sys/net/ipv4/ip_forward

•  A上執行iptables -t nat -A PREROUTING -d 192.168.133.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22

• A上執行iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.133.130

• B上設置網關爲192.168.100.1

第一步,打開路由轉發:

[root@tianqi-01 network-scripts]# cat /proc/sys/net/ipv4/ip_forward
0
[root@tianqi-01 network-scripts]# echo "1" > !$
echo "1" > /proc/sys/net/ipv4/ip_forward
[root@tianqi-01 network-scripts]# cat /proc/sys/net/ipv4/ip_forward
1

 第二步,添加規則,由於以前添加了一條規則,如今先把那條規則刪掉以避免影響操做:

[root@tianqi-01 ~]# iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE 

如今nat表是一個空表,沒有任何規則

[root@tianqi-01 ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

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         
[root@tianqi-01 ~]# 

第一條,是發送過來的包:

[root@tianqi-01 ~]# iptables -t nat -A PREROUTING -d 192.168.11.136 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22

這條規則是把192.168.11.136的1122端口的數據包,轉發到192.168.100.100的22端口上去。

第二條,是反饋回去的包:

[root@tianqi-01 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.11.136

這條規則是把192.168.100.100返回的數據包,轉發到192.168.11.136上去,而後回到Windows上。

添加完規則檢查一下是否存在nat表裏:

[root@tianqi-01 ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 1 packets, 229 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.11.136       tcp dpt:1122 to:192.168.100.100:22

Chain INPUT (policy ACCEPT 1 packets, 229 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         
    0     0 SNAT       all  --  *      *       192.168.100.100      0.0.0.0/0            to:192.168.11.136
[root@tianqi-01 ~]# 

第三步,以上操做沒問題後,給CentOS 7.2設置默認網關:

完成以上操做以後,在XShell裏新建一個會話,鏈接192.168.11.136的1122端口:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

友情連接:阿銘Linux

相關文章
相關標籤/搜索