日常運維【2】
一,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
- 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