Linux基礎(day 34)

10.15 iptables filter表案例

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@hanfeng-001 ~]# vim /usr/local/sbin/iptables.sh

添加如下內容

#! /bin/bash
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.202.130/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端口數據包放行

而後保存退出:wq
[root@hanfeng ~]# sh /usr/local/sbin/iptables.sh        //執行腳本
[root@hanfeng ~]# iptables -nvL
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   30  2148 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  *      *       192.168.202.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 18 packets, 1816 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@hanfeng ~]#
  • 爲何要寫腳本?
  • 由於這裏有INPUT DROP,確定要把你的遠程鏈接給斷開,因此須要執行腳本把你的命令批量執行

icmp示例

  1. iptables -I INPUT -p icmp --icmp-type 8 -j DROP 這個規則會產生一個效果,讓你ping外面的機器還能夠ping通,可是ping本機的時候,就不會通了
[root@hanfeng-001 ~]# iptables -I INPUT -p icmp --icmp-type 8 -j DROP    //會發現可ping通外面的網絡,但本身的虛擬機和物理機則沒法鏈接
[root@hanfeng-001 ~]# ping www.qq.com
PING www.qq.com (180.96.86.192) 56(84) bytes of data.
64 bytes from 180.96.86.192: icmp_seq=1 ttl=128 time=7.38 ms
64 bytes from 180.96.86.192: icmp_seq=2 ttl=128 time=6.16 ms
64 bytes from 180.96.86.192: icmp_seq=3 ttl=128 time=7.73 ms
^C
--- www.qq.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 6.166/7.092/7.731/0.677 ms
[root@hanfeng-001 ~]#
  1. 這時用本身的物理機去ping虛擬機,會發現沒法鏈接

輸入圖片說明

  1. 這時,再來刪除這條命令
  • iptables -D INPUT -p icmp --icmp-type 8 -j DROP
[root@hanfeng ~]# iptables -D INPUT -p icmp --icmp-type 8 -j DROP
iptables: Bad rule (does a matching rule exist in that chain?).
[root@hanfeng ~]#
  1. service iptables restart 重啓iptables服務
[root@hanfeng ~]# service iptables restart    //重啓iptables服務
Redirecting to /bin/systemctl restart  iptables.service
[root@hanfeng ~]# iptables -nvL    //這裏會看到還沒禁掉以前的規則
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   81  6996 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            
    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            
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            

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            

Chain OUTPUT (policy ACCEPT 61 packets, 6060 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@hanfeng ~]#
  1. 這裏物理機去ping虛擬機IP,會發現再次ping通

輸入圖片說明

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

10.16/10.17/10.18 iptables nat表應用

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

實現:

  1. 首先準備兩臺機器(如果怕實驗失敗,可先快照下)html

  2. 在虛擬機hf上在添加一塊網卡(已添加過一塊虛擬網卡)linux

    輸入圖片說明

  3. 而後默認的是NAT模式,而後點擊完成vim

    輸入圖片說明

  4. 在選擇添加的網卡,並在右側,選擇LAN區段windows

  • 選擇LAN區段,就至關於咱們給網卡鏈接到了內網的一個交換機上,這個交換機,用windows機器是沒法鏈接的,這樣這臺機器和那臺機器連上同一個內網的交換機,它們二者之間通訊便可。bash

    輸入圖片說明

  1. 而後選擇LAN區段中,剛設置的名稱爲「內網」網絡

    輸入圖片說明

  2. 最後點擊肯定tcp

  3. 選擇克隆的虛擬機hf-02,並添加網卡——>在這臺虛擬機上自己有一塊網卡,由於已經編輯過IP,因此咱們能夠直接禁掉這個網卡.net

    輸入圖片說明

  4. 而後hf-02添加一塊網卡,和hf添加網卡步驟同樣相同,並選擇LAN區段,中的「內網」,並確認命令行

  5. 重啓兩臺虛擬機rest

  • hf-02虛擬機中沒有了windows所能鏈接的IP,因此就沒法遠程鏈接hf-02
  1. 打開hf虛擬機,輸入ifconfig命令,會看到添加了一個網卡eno33554984

  2. 這裏會看到eno33554984網卡,並無IP,並設置IP(新建那個當私網IP,你能夠跟跟視頻中的同樣,也能夠本身設置)

  • 設定IP有兩種方法:
    • 1.能夠命令行添加IP
      • 命令行ifconfig ens36 192.168.100.1/24
    • 2.也能夠設置配置文件,設置配置文件和設置虛擬網卡同樣的步驟
      • 將eno16777736網卡配置文件複製成eno33554984,並修改裏面的IP和NETMASK便可其餘都不須要管
  1. 執行命令行ifconfig ens36 192.168.100.1/24,而後運行ifconfig命令,會看到eno33554984網卡有了IP
  • 手動命令行ifconfig ens36 192.168.100.1/24,設置IP

    ![輸入圖片說明](https://static.oschina.net/uploads/img/201712/01120906_md73.png "新增網卡eno3355498")
  1. 可是eno33554984網卡的IP,在虛擬機一重啓,那麼IP就會沒了——>若想永久生效,就去編輯配置文件,但默認配置文件是不存在的,須要拷貝eno16777736網卡的配置文件,而後更改其中的內容

  2. 由於hf-02虛擬機沒法遠程,因此只能在虛擬機上操做

  3. 用ifconfig命令查看hf-02虛擬機的網卡,會發現也沒有IP地址

  4. 這裏若想徹底禁掉eno16777736網卡,可執行ifdown eno16777736命令(這一步可省略,若一直失敗的話,只要在設置好IP,兩個私網IP互通便可)

    輸入圖片說明

    • 但有時會提示MAC地址不對,這時候進網卡配置文件中
      • 方法一:註釋掉HWADDR參數
      • 方法二:看是否存在DEVICE參數。若沒有,則增長上DEVICE參數——>(本身的是沒有的)
      • 方法三:直接刪除以前的網卡,新建虛擬網卡
  5. 給eno33554984網卡設置IP地址,命令行ifconfig ens36 192.168.100.100/24

  6. 而後用ifconfig命令,查看新建的網卡IP地址

    輸入圖片說明

  7. 這裏會看到hf-02虛擬機中的eno16777736網卡,可是是沒法ping通的——>若爲了保險這裏能夠執行命令ifdown eno16777736

  8. 而後給ens36網卡設置IP地址,命令行ifconfig ens36 192.168.100.100/24

  9. 這時候,兩臺虛擬機中新建網卡的IP互相嘗試互相ping通

    輸入圖片說明

    輸入圖片說明

  10. 這時hf機器上須要打開路由轉發 ——>想使用nat表,使用網絡的轉發,必須修改內核參數

    • 默認/proc/sys/net/ipv4/ip_forward這個文件爲0——>這個文件爲0,表示這個文件沒有開啓內核轉發
[root@hanfeng ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@hanfeng ~]#
  1. 將文件/proc/sys/net/ipv4/ip_forward默認改成1,打開端口轉發
    • 要想實現nat應用,必須打開端口轉發
[root@hanfeng ~]# echo "1" > !$
echo "1" > /proc/sys/net/ipv4/ip_forward
[root@hanfeng ~]# !cat
cat /proc/sys/net/ipv4/ip_forward
1
[root@hanfeng ~]#
  1. 在hf虛擬機上增長一條規則iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
[root@hanfeng ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
[root@hanfeng ~]#
  1. 實現100.0網段能夠上網,作一個欺騙

  2. 給hf-02設置網關(數據包過去,從hf到hf-02,從hf-02到hf,設置好默認網關)

    輸入圖片說明

  3. 而後hf-02嘗試是否能ping通192.168.202.130,這就意味着能夠和外網通訊了

    輸入圖片說明

  4. 設置DNS,在/etc/resolv.conf中設置,添加mameserver 119.29.29.29

輸入圖片說明

  1. 這時候就能夠ping通外網了——>但物理機仍是沒法ping通hf-02的虛擬機IP地址

如今只作到了機器互通,能夠訪問外網機器的IP,但不能鏈接外網

  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

擴展

  1. iptables應用在一個網段

  2. sant,dnat,masquerade

相關文章
相關標籤/搜索