1. 程式人生 > >日常運維【2】

日常運維【2】

  • firewalld和netfilter
  • netfilter5表5鏈介紹
  • iptables語法
  • iptables filter表小案例
  • iptables nat表應用

 

一,firewalld和netfilter

SELinux防火牆

  • selinux臨時關閉 setenforce 0
  •  永久關閉selinux,可以編輯vi /etc/selinux/config。將SELINUX=enforceing,更改為SELINUX=disabled,重啟後即可生效永久關閉。

  • centos7之前使用netfilter防火牆
  •  centos7開始使用firewalld防火牆
  •  關閉firewalld開啟netfilter方法
  •  systemctl stop firewalld 服務關掉
  •  systemctl disable firewalled 關閉firewalled 不讓開機啟動
  • 命令yum install -y iptables-services ,安裝netfilter,系統預設是未安裝的。
  • 開機啟動iptables:systemctl enable iptables
  • 啟用iptables:systemctl start iptables
  • 檢視iptables規則:iptables -nvL

 

 

二,netfilter的5表5連結

netfilter的5個表:

  • filter:包過濾,用於防火牆規則。
  • ilter:該表主要用於過濾包,是系統預設的表。該表內建3個鏈:INPUT、OUTPUT、FORWARD。INPUT鏈作用於進入本機的包,OUTPUT鏈作用於本機送出的包,FORWARD作用於那些跟本機無關的包。
  • nat:地址轉換,用於閘道器路由器。
  • nat:該表主要用於網路地址轉換,它也有三個鏈。PREROUTING鏈的作用是在包剛剛到達防火牆時改變它的地址(如果需要的話),OUTPUT
    的鏈作用是改變本地產生的包的目的地,POSTROUTING鏈的作用是在包即將離開防火牆時改變其源地址。(該表使用率較低)
  • mangle:用於給資料包打標記,然後根據標記去操作那些表。(不常用)
  • 還有兩個不常用的表:raw和security,在此不多講述。
  • mangle:該表主要用於給資料包做標記,然後根據標記去操作相應的包。(使用率很低的一個表,網路相關的會使用較多)
    raw:該表可以實現不追蹤某些資料包,預設系統的資料包都會被追蹤,但追蹤勢必消耗一定的資源,所以可以使用raw表來指定某些埠的包不被追蹤。(也是使用率很低的一個表)
    security:該表在CentOS6中時沒有的,它用於強制訪問控制(MAC)的網路規則。(很少會用到的一個表)
     

規則鏈名

filter的三種鏈:

  • INPUT鏈:作用於輸入本機的資料包【通過路由表目的地為本機】。
  • OUTPUT鏈:作用於本機輸出的資料包。【由本機產生,向外轉發】
  • FORWARD鏈:作用於與本機無關的包。【通過路由表後,目的地不為本機】


nat的三種鏈:

  • PREROUTING鏈:作用是在包剛剛到達防火牆時改變它的目的地址,如果需要的話,【資料包進入路由表之前】
  • OUTPUT鏈:改變本地產生的包的目的地址。【由本機產生,向外轉發】
  • POSTROUTING鏈:在包離開防火牆之前改變其源地址。【傳送到網絡卡介面之前】

資料包流向圖:

  • 非本機:PREROUTING----------FORWARD-----------POSTROUTING
  • 本機:PREROUTING----------INPUT------------OUTPUT--------------POSTROUTING

 

 

三,netfiltre——iptables的基本語法

iptables命令是Linux上常用的防火牆軟體,是netfilter專案的一部分。可以直接配置,也可以通過許多前端和圖形介面配置

  • 重啟iptables:service iptables restart 。
  • 檢視預設規則:iptables -nvL  ,其中-n表示不針對IP反解析主機名,-L表示列出,-v表示列出的資訊更加詳細
  • 清空規則:iptables -F  該命令只會臨時清空規則,重啟後會被/etc/sysconfig/iptables(iptables的配置檔案)中的內容覆蓋。
  • 覆蓋並儲存:service iptables save 會儲存修改的規則到配置檔案中(永久生效)。
  • 指定檢視某一個表:iptables -t nat -nvL ,不使用-t選項時預設檢視的表就是filter表。
  • 計數器清理:iptables -Z  ,清空pkts(資料包)和bytes(多少大小)的資料。

 

  • iptables命令選項輸入順序:
  • iptables -t 表名 <-A/I/D/R> 規則鏈名 [規則號] <-i/o 網絡卡名> -p 協議名 <-s 源IP/源子網> --sport 源埠 <-d 目標IP/目標子網> --dport 目標埠 -j 動作
  • 新增規則舉例:iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP  
  • 說明: 增加一條規則,當IP~192.168.188.1、協議為tcp、埠為‘1234’的向IP~192.168.188.128、埠為80的機器傳送包時執行操作:drop(丟掉包)。
    注: 該命令也可以把-A換成-I,兩者的區別類似於排隊和插隊,兩種方法插入的規則優先順序不同。
  • 語法: iptables [options] [引數]
    Options:
    -n:不針對IP反解析主機名
    -v:顯示更詳細的資訊
    -t:指定表(iptables命令預設作用於filter表)
    -L:顯示資訊
    -F:清空所有規則
    -A/D:=add/delete,新增/刪除一條規則
    -I:插入一條規則
    -p:指定協議,可以是tcp,udp或icmp
    --sport:跟-p一起使用,指定源埠
    --dport:跟-p一起使用,指定目標埠
    -s:指定源IP(可以是一個IP段)
    -d:指定目的IP(可以是一個IP段)
    -j:後面跟動作(ACCEPT表示允許包;DROP表示丟掉包;REJECT表示拒絕包)
    -i:指定網絡卡
    -Z:把包以及流量計數器清零
    -P:=pre,預設策略

 

 

  • 插入一條規則:iptables -I INPUT  -p tcp --dport 80 -j DROP
  •    選項-I為將這條規則插入到最前面。(排序在前的規則優先匹配)
  • 顯示規則的序列號:iptables -nvL --line-number。可以根據序列號刪除對應的規則,例:iptables -D INPUT 1

 

 

四,iptables filter表小案例

需求:只針對filter表,預設策略INPUT鏈DROP,其他兩個鏈ACCEPT,然後針對192.168.188.0/24開通22埠,所有網段開放80埠,對所有網段開放21埠。

操作:因為規則較多,使用指令碼的形式達成最方便。步驟如下:

[[email protected] ~]# 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.133.0/24 -p tcp --dport 22 -j ACCEPT  #133網段的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包的一個常見的應用:iptables -I INPUT -p icmp --icmp-type 8 -j DROP  ,這裡--icmp-type選項和-p icmp要一起使用,後面指定型別編號。這個8指的時本機ping通其他機器,而其他機器不能ping本機。

 

 

五,netfilter——iptables nat表應用

 

A機器兩塊網絡卡ens33(192.168.229.128)、ens37(192.168.100.1),ens33可以上外網,ens37僅僅是內部網路,B機器只有ens37(192.168.100.100),和A機器ens33可以通訊互聯。

需求1:可以讓B機器連線外網。

操作步驟如下:

在虛擬機器上操作兩臺機器時,需在設定處新增一個新的網絡卡,並將兩臺機器新設定的網絡卡,均設定到同一個lan段,其中第一臺機器的ens33不做更改,第二臺機器的網絡卡ens33網絡卡斷開連結。如圖:


使用命令為A機器網絡卡ens33設定IP:ifconfig ens37 192.168.100.1/24 (臨時設定,重啟後會被配置檔案的內容覆蓋),再為B機器網絡卡ens37設定網絡卡:ifconfig ens37 192.168.100.100/24。
A機器上開啟路由轉發   echo "1" > /proc/sys/net/ipv4/ip_forward    (預設為關閉0,更改為1後即開啟)
設定轉發規則:iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
B機器設定閘道器:route add default gw 192.168.100.1
設定dns:vi /etc/resolv.conf
需求2:C機器只能和A通訊,讓C機器可以直接連通B機器的22埠

操作步驟如下:

A機器上開啟路由轉發   echo "1" > /proc/sys/net/ipv4/ip_forward    (預設為關閉0,更改為1後即開啟)

在A機器上新增規則:iptables -t nat -A PREROUTING -d 192.168.133.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22 (將進來的資料包由192.168.133.130轉發到B機器192.168.100.100:22)
繼續在A機器上新增規則:iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.133.130   (將發回來的資料包目標改為A機器的192.168.133.130)
在B機器設定閘道器:route add default wg 192.168.100.1