日常運維(二)

查看網絡狀態:

    使用netstat命令查看系統的網絡情況。日常運維經常用來打印網絡連接狀況和當前系統啓動了哪些端口,請務必記住以下兩種用法,其他的選項請man查閱。

    (1)打印網絡連接狀況:netstat -an

        image.png

    如果你所管理的服務器是一臺提供web服務(80端口)的服務器,那麼你就可以使用 netstat -an |grep 80 查看當前連接web服務的有哪些IP了。

    【統計所有網絡狀態總數】:netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}';  如果ESTABLISHED值很大,表示網絡很忙。

    image.png

    (2)打印當前系統啓動了哪些端口(你也可以加上參數-t:表示tcp,-u:表示udp)

        image.png

Linux下抓包:

    抓包工具:tcpdump、wireshark

    tcpdump工具的用法:

        tcpdump -nn

        tcpdump -nn -i ens33    抓指定網卡

        tcpdump -nn port 80     指定只抓端口80的包

        tcpdump -nn -i ens33 tcp and not port 22  指定抓tcp的包,但不要是22端口的  

        tcpdump -nn -i ens33 -c 100 -w /tmp/1.cap  指定抓包數量和存放位置

        tcpdump -r 1.cap   查看抓包數據

image.png

    如果沒有tcpdump 這個命令,需要用 yum install -y tcpdump 命令去安裝一下。上例中第三列和第四列顯示的信息爲哪一個IP+port在連接哪一個IP+port,後面的信息是該數據包的相關信息,如果不懂也沒有關係,畢竟我們不是專門搞網絡的,而這裏需要關注的只是第三列以及第四列。-i 選項後面跟設備名稱,如果你想抓eth1網卡的包,後面則要跟eth1。至於-nn選項的作用是讓第三列和第四列顯示成IP+端口號的形式,如果不加-nn則顯示的是主機名+服務名稱。

    wireshark工具:

        安裝yum install -y wireshark

    # tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"

    上面這條命令用於web服務器,會輸出類似訪問日誌的內容。

    # tshark -n -i ens33 -R 'mysql.query' -T fields -e "ip.src" -e "mysql.query"    抓取ens33網卡mysql的查詢都有哪些

    # tshark -i ens33 port 3307 -d tcp.port==3307,mysql -z "proto,colinfo,mysql.query,mysql.query"    當mysql不是默認3306端口時,使用這條命令查詢。 

Linux網絡相關:

    (1)ifconfig查看網卡ip

            直接輸入ifconfig,不加任何選項和參數只打印當前網卡的IP相關信息(子網掩碼、網關等)

            image.png

        如果想修改網卡信息的,如ip;則需要修改配置文件vim /etc/sysconfig/network-scripts/ifcfg-ens33,ens33是網卡名稱。

        重啓某個網卡:ifdown ens33 ; ifup ens33;

            ifdown 即停掉網卡,ifup即啓動網卡。有一點要提醒你的是,如果我們遠程登錄服務器,當使用ifdown eth33這個命令的時候,很有可能後面的命令ifup eth33不會被運行,這樣導致我們斷網而無法連接服務器,所以請儘量使用 service network restart 這個命令來重啓網卡。或者用ifdown ens33 && ifup ens33

    (2)給一個網卡設定多個IP

        image.png   

    之所以加反斜槓\,是因爲要把冒號:轉義,不然在Linux命令行下面無法識別。然後編輯ifcfg-ens33:1 這個配置文件,內容如下,一定要注意 DEVICE 這裏要寫成 "ens33:1"

其實就是改一下NAME,DEVICE,IPADDR,設置完畢重啓網卡,使用命令:ifdown ens33 && ifup ens33

        image.png

    重啓網絡後:ifconfig

        image.png

    (3)查看網絡連接狀態

        使用命令mii-tool ens33 查看網卡是否連接

        image.png

        只要看到 “link ok” 就說明網卡爲連接狀態,如果顯示 “no link” 說明網卡壞掉了或者沒有連接網線。

        也可以使用ethtool ens33命令查看:

        image.png

    (4)更改主機名

        當裝完系統後,默認主機名爲localhost,使用hostname就可以知道你的linux的主機名是什麼。

        臨時修改:hostname yourname; 重啓後失效。

        永久修改:hostnamectl set-hostname yourname;   或者直接修改配置文件/etc/hostname

    (5)設置DNS

        DNS是用來解析域名用的,平時我們訪問網站都是直接輸入一個網址,而dns把這個網址解析到一個IP。關於dns的概念,如果你很陌生的話,那就去網上查一下吧。在linux下面設置dns非常簡單,只要把dns地址寫到一個配置文件中即可。這個配置文件就是/etc/resolv.conf

        image.png

        resolv.conf有它固有的格式,一定要寫成 “nameserver IP” 的格式,上面那行以 ‘;’ 爲開頭的行是一行註釋,沒有實際意義,建議寫兩個或多個namserver ,默認會用第一個namserver去解析域名,當第一個解析不到時會使用第二個。在linux下面有一個特殊的文件/etc/hosts也能解析域名,不過是需要我們手動在裏面添加IP+域名這些內容,它的作用是臨時解析某個域名,非常有用。

        編輯配置文件/etc/hosts

        image.png

    image.png

    /etc/hosts 的格式很簡單,每一行作爲一條記錄,分成兩部分,第一部分是IP,第二部分是域名。關於hosts文件,有幾點需要你注意:

        1)一個IP後面可以跟多個域名,可以是幾十個甚至上百個;

        2)每行只能有一個IP,也就是說一個域名不能對應多個IP;

        3)如果有多行中出現相同的域名(前面IP不一樣),會按最前面出現的記錄來解析。

Linux的防火牆(firewalld和netfilter)

    (1)SELinux

            SELinux是Linux系統特有的安全機制,不過因爲限制太多,所以很少人使用,一般我們都是關閉SELinux。

            臨時關閉:setenforce 0;      永久關閉:編輯配置文件 vim /etc/selinux/config,找到SELINUX=enforcing 改成 SELINUX=disabled。重啓後生效!

            image.png

            可以使用genenforce命令獲得當前SELinux的狀態

    (2)netfilter

            CentOS 5和6 的防火牆是netfilter;主要是使用iptables工具實現防火牆。

        因爲現在我的系統是CentOS7的,在這裏我先關閉firewalld服務,使用CentOS6的netfilter演示。更換操作如下:

                systemctl stop firewalld   關閉firewalld服務

                systemctl disable firewalld  禁止firewalld服務開機啓動

                yum install -y iptables-services  安裝iptables-services

                systemctl enable iptables   讓它開機啓動

                systemctl start iptables    啓動iptables服務image.png

    (3)firewalld

            CentOS7 的防火牆使用firewalld,不是netfilter。

netfilter 5表5鏈介紹:

    5表:filter表、nat表、mangle表、raw表、security表

    5鏈:PEROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING

    下面介紹5表5鏈:

    filter表:主要用於過濾包,是系統預設的表。平時用的最多的表。該表內建3個鏈:IUPUT、OUTPUT、FORWARD,INPUT鏈作用進入本機的包,OUTPUT鏈作用於本機送出的包,FOEWARD作用於跟本機無關的包

    nat表:主要用於網絡地址轉換,它也有3個鏈。PREROUTING鏈的作用是在包剛剛到達防火牆時改變它的目的地址(非必須),OUTPUT鏈的作用是改變本地包的目的地址,POSTROUTING鏈的作用是在包即將離開防火牆時改變其源地址。偶爾用到!

    mangle表:主要用於給數據包做標記,然後根據標記去操作相應的包。(運維幾乎不用,網絡工程師用)

    raw表:可以實現不追蹤某些數據包,默認系統的數據都會被跟蹤。(也是幾乎不用)

    security表:CentOS6沒有的,它用於強制訪問控制(MAC)的網絡規則。(瞭解即可)

    PEROUTING:數據包進入路由表之前

    INPUT:通過路由表後目的地爲本機

    FORWARD:通過路由表後,目的地不爲本機

    OUTPUT:有本機產生,向外轉發

    POSTROUTING:發送到網卡接口之前

    iptables數據包流向:

    image.png

    表和鏈對應的關係:

    image.png

iptables語法:

    查看規則:iptables -t nat -nvL; 規則保存在/etc/sysconfig/iptables文件中;-t 指定表名;-nvL表示查看該表規則,-n表示不針對IP反解析主機名,-L表示列出,-v表示列出更加詳細。不加-t,默認打印filter表的相關信息。

    清空規則:iptables -F,臨時清空,重啓後會還原配置iptables文件的規則;

    保存規則:service iptables save

    包及流量計數器置零:iptables -Z

    增加/刪除一條規則,用法:iptables -A INPUT -s 192.168.128.1 -p tcp --sport 1234 -d 192.168.128.28 --dport 80 -j DROP

    各個選項的作用:

        -A/-D 表示增加/刪除一條規則

        -I 表示插入一條規則,其實效果跟-A一樣(執行順序不一樣)

        -p 表示指定協議,可以是tcp、udp或者icmp

        -P 後面跟鏈名,它表示預設策略;  如iptables -P INPUT DROP;  (使用這個選項是要小心,特別是遠程服務器)

        --dport:跟-p一起使用,表示指定目標端口

        --sport:跟-p一起使用,表示指定源端口

        -s 表示指定源IP(可以是一個IP段)

        -d 表示指定目標IP(可以是一個IP段)

        -j 後面跟動作,其中ACCEPT表示允許包,DROP表示丟棄包,REJECT表示拒絕包

        -i 表示指定網卡(不常用)

    舉例:

        ①插入一條規則,把來自2.2.2.2的所有數據包丟棄:iptables -I INPUT -s 2.2.2.2 -j DROP

        ②下面是刪除上面這條規則,注意刪除規則時,必須和插入的規則一致,也就是說兩條命令,除了-I和-D不一樣,其他地方都是一樣的:iptables -D INPUT -s 2.2.2.2 -j DROP

        ③把來自2.2.2.2並且是TCP協議到本機80端口的數據包丟棄:iptables -I INPUT -s 2.2.2.2 -p tcp --dport 80 -j DROP; 注意--dport/--sport必須和-p一起使用,否則會報錯。

        ④把發送到10.0.0.21的22端口的數據包丟棄:iptables -I OUTPUT -p tcp -dport 22 -d 10.0.0.21 -j DROP

    有時候服務器上iptables過多,你想刪除一條規則,但又忘記了創建是的規則,怎麼刪除呢?其實還有一種簡單的方法:

    iptables -nvL --line-numbers

image.png

    然後你想刪除某一條規則:iptables -D INPUT 1;  -D後面跟鏈名、規則num,這個num就是上圖的第一列的值。

iptables filter表案例:

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

ipt="/usr/sbin/iptables"
$ipt -F
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCPT
$ipt -P FORWARD ACCEPT
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$ipt -A INPUT -s 192.168.188.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

    這裏--icmp-type選項要跟-p icmp一起使用,後面指定類型編號。這個8指的是本機ping通其他機器,而其他機器不能ping通本機。

iptables 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

iptables規則備份和恢復:

    (1)保存規則在配置文件中(/etc/sysconfig/iptables):service iptables save

    (2)把iptables規則備份到my.ipt文件中:iptables-save > my.ipt

    (3)從文件中恢復備份的規則:iptables-restore < my.ipt

【到這裏netfilter就介紹完了,下面開始介紹firewalld】

    先關閉iptables,打開firewalld:systemctl disable iptables;    systemctl stop iptables;    systemctl enable firewalld;    systemctl start firewalld;

firewalld的9個zone:

    firewalld有兩個基礎概念,分別是zone和service;每個zone裏面有不同的iptables規則,默認一共9個zone;而CentOS7默認的zone爲public

    獲取系統中的所有zone:firewalld-cmd --get-zones

    查看系統默認的zone:firewalld-cmd --get-default-zone

下面介紹這9個zone:drop(丟棄)、block(限制)、public(公共)、external(外部)、dmz(非軍事區)、work(工作)、home(家庭)、internal(內部)、trusted(信任)

        image.png

firewalld關於zone的操作:   

     firewall-cmd --set-default-zone=work     //設定默認zone

     firewall-cmd --get-zone-of-interface=ens33  //查指定網卡

     firewall-cmd --zone=public --add-interface=lo  //給指定網卡設置zone 

     firewall-cmd --zone=dmz --change-interface=lo  //針對網卡更改zone

     firewall-cmd --zone=dmz  --remove-interface=lo   //針對網卡刪除zone 

     firewall-cmd --get-active-zones   //查看系統所有網卡所在的zone

firewalld關於service的操作:   

    之所以有9種zone,是因爲每個zone裏使用不同的service,而service是針對一個服務(端口)做的iptables規則。

     firewall-cmd --get-services  //查看所有的servies

     firewall-cmd --list-services  //查看當前zone下有哪些service

     firewall-cmd --zone=public --list-services  //查看指定zone下有哪些service

     firewall-cmd --zone=public --add-service=http //把http增加到public zone下面

     firewall-cmd --zone=public --remove-service=http

     ls /usr/lib/firewalld/zones/  //zone的配置文件模板

      ls /usr/lib/firewalld/services/  //service的配置文件模板

     firewall-cmd --zone=public --add-service=http --permanent //在zone永久增加service,之後會在/etc/firewalld/zones目錄下面生成配置文件

需求:ftp服務自定義端口1121,需要在work zone下面放行ftp

     cp /usr/lib/firewalld/services/ftp.xml /etc/firewalld/services

     vi /etc/firewalld/services/ftp.xml    //把21改爲1121

     cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/

     vi /etc/firewalld/zones/work.xml     //增加一行

     <service name="ftp"/>

     firewall-cmd --reload     //重新加載

     firewall-cmd --zone=work --list-services


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章