Linux 筆記 - 第十三章 Linux 系統平常管理之(二)Linux 防火牆和任務計劃

博客地址:http://www.moonxy.comhtml

1、前言linux

Linux 下的的防火牆功能是很是豐富的,做爲 Linux 系統工程師有必要了解一下。防火牆通常分爲硬件防火牆和軟件防火牆。可是,不論是硬件仍是軟件防火牆,它們都須要使用硬件來做爲聯機介質,也須要使用軟件來設定安全規則。shell

2、Linux 的防火牆緩存

2.1 selinux安全

安全加強型 Linux(Security-Enhanced Linux)簡稱 SELinux,它是一個 Linux 內核模塊,也是 Linux 的一個安全子系統。SELinux 主要由美國國家安全局開發。2.6 及以上版本的 Linux 內核都已經集成了 SELinux 模塊。SELinux 的結構及配置很是複雜,並且有大量概念性的東西,要學精難度較大。不少 Linux 系統管理員嫌麻煩都把 SELinux 關閉了。bash

關閉 selinux 的方法爲修改 /etc/selinux/config 文件,將 SELINUX=disabled,默認爲 enforcing。網絡

[root@ryan ~]# cat /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

保存配置文件後,重啓 Linux 才能生效。臨時關閉 selinux 的命令爲:tcp

# setenforce 0wordpress

可使用 getenforce 命令得到當前 selinux 狀態:工具

# getenforce

[root@ryan ~]# getenforce
Disabled

2.2 iptables

iptables 是 Linux 上特有的防火牆 netfilter 的機制,iptables 實際上是 ip tables 的含義,也就是 IP 表的意思。iptables 是由4個表(table)和5個鏈(chain)組成。每一個表的用途都不同。在每一個表中,又定義了多個鏈,經過這些鏈能夠設置相應的規則和策略。

CentOS 7.x(RHEL7.x)以後,防火牆規則設置由 firewalld 服務進程默認管理,取代了 CentOS/RHEL 6.x 的 iptables 服務。

iptables 過濾流程圖,以下:

4表5鏈,每一個表所涉及到的鏈,以下:

4個表包括:

filter:數據包過濾,用於防火牆規則,最經常使用。

net:地址轉換,用於網關路由器。

mangle:數據包修改(QOS),用於實現服務質量。

raw:高級功能,如:網址過濾。

5個規則鏈名包括:

INPUT鏈:處理輸入數據包。

OUTPUT鏈:處理輸出數據包。

PORWARD鏈:處理轉發數據包。

PREROUTING鏈:用於目標地址轉換(DNAT)。

POSTOUTING鏈:用於源地址轉換(SNAT)。

動做包括:

accept:接收數據包。

DROP:丟棄數據包。

REDIRECT:重定向、映射、透明代理。

SNAT:源地址轉換。

DNAT:目標地址轉換。

MASQUERADE:IP假裝(NAT),用於ADSL。

LOG:日誌記錄。

實例

查看已添加的iptables規則

# iptables -nvL

默認查看filter表的規則,可使用 -t 選項表名,來指定查看具體表的規則。如:

# iptables -t nat -nvL

開放指定的端口

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT               #容許本地迴環接口(即運行本機訪問本機)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    #容許已創建的或相關連的通行
iptables -A OUTPUT -j ACCEPT         #容許全部本機向外的訪問
iptables -A INPUT -p tcp --dport 22 -j ACCEPT    #容許訪問22端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT    #容許訪問80端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT    #容許ftp服務的21端口
iptables -A INPUT -p tcp --dport 20 -j ACCEPT    #容許FTP服務的20端口
iptables -A INPUT -j reject       #禁止其餘未容許的規則訪問
iptables -A FORWARD -j REJECT     #禁止其餘未容許的規則訪問

好比經常使用的放行22端口:

# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

-A/-D:表示增長/刪除一條規則(向後追加)。

-I:表示插入一條規則,則是效果跟 -A 類型(想前插入第一條位置)。

-p:表示指定協議,能夠是 tcp、udp 或者 icmp。

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

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

-s:表示指定源 IP(能夠是一個 IP 段)。

-d:表示指定目的 IP(能夠是一個 IP 段)。

-j:後面跟動做,其中 ACCEPT 表示容許包,DROP 表示丟掉包,REJECT 表示拒絕包。

-i:表示指定網卡(不經常使用)。

屏蔽IP

iptables -I INPUT -s 123.45.6.7 -j DROP       #屏蔽單個IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP      #封整個段即從123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP    #封IP段即從123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP    #封IP段即從123.45.6.1到123.45.6.254的命令是

刪除已添加的iptables規則

將全部iptables以序號標記顯示,執行:

iptables -L -n --line-numbers

好比要刪除INPUT裏序號爲8的規則,執行:

iptables -D INPUT 8

3、Linux 系統的任務計劃

Linux 中有些管理工做能夠經過按期自動執行某一個腳原本完成,這就是 Linux 系統中的任務計劃 cron 功能。crontab 命令被用來提交和管理用戶的須要週期性執行的任務,與 Windows下的計劃任務相似,當安裝完成操做系統後,默認會安裝此服務工具,而且會自動啓動 crond 進程,crond 進程每分鐘會按期檢查是否有要執行的任務,若是有要執行的任務,則自動執行該任務。

格式爲:

crontab(選項)(參數)

Linux 任務計劃功能都是經過 crontab 命令來完成的,經常使用選項以下:

-e:編輯該用戶的計時器設置,編輯某個用戶的crontab文件內容。若是不指定用戶,則表示編輯當前用戶的crontab文件;

-l:列出該用戶的計時器設置,查看已經設定的任務計劃使用 crontab -l 命令,顯示某個用戶的 crontab 文件內容,若是不指定用戶,則表示顯示當前用戶的 crontab 文件內容。;

-r:刪除該用戶的計時器設置,從 /var/spool/cron 目錄中刪除某個用戶(username)的 crontab 文件,若是不指定用戶,則默認刪除當前用戶的 crontab文件;

-u<用戶名稱>:指定要設定計時器的用戶名稱。

參數:

crontab文件:指定包含待執行任務的 crontab 文件。

Linux下的任務調度分爲兩類:系統任務調度和用戶任務調度。

系統任務調度:系統週期性所要執行的工做,好比寫緩存數據到硬盤、日誌清理等。在/etc目錄下有一個crontab文件,這個就是系統任務調度的配置文件。

/etc/crontab 文件包括下面幾行:

[root@ryan ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

前四行是用來配置 crond 任務運行的環境變量,第一行 SHELL 變量指定了系統要使用哪一個 shell,這裏是bash,第二行PATH變量指定了系統執行命令的路徑,第三行 MAILTO 變量指定了 crond 的任務執行信息將經過電子郵件發送給 root 用戶,若是 MAILTO 變量的值爲空,則表示不發送任務執行信息給用戶,第四行的 HOME 變量指定了在執行命令或者腳本時使用的主目錄。

用戶任務調度:用戶按期要執行的工做,好比用戶數據備份、定時郵件提醒等。用戶可使用 crontab 工具來定製本身的計劃任務。全部用戶定義的 crontab 文件都被保存在 /var/spool/cron 目錄中。其文件名與用戶名一致,使用者權限文件以下:

/etc/cron.deny     該文件中所列用戶不容許使用crontab命令
/etc/cron.allow    該文件中所列用戶容許使用crontab命令
/var/spool/cron/   全部用戶crontab文件存放的目錄,以用戶名命名

crontab 文件的含義:用戶所創建的 crontab 文件中,每一行都表明一項任務,每行的每一個字段表明一項設置,它的格式共分爲六個字段,前五段是時間設定段,第六段是要執行的命令段,格式以下:

minute   hour   day   month   week   command     順序:分 時 日 月 周

其中:

minute: 表示分鐘,能夠是從0到59之間的任何整數。

hour:表示小時,能夠是從0到23之間的任何整數。

day:表示日期,能夠是從1到31之間的任何整數。

month:表示月份,能夠是從1到12之間的任何整數。

week:表示星期幾,能夠是從0到7之間的任何整數,這裏的0或7表明星期日。

command:要執行的命令,能夠是系統命令,也能夠是本身編寫的腳本文件。

在以上各個字段中,還可使用如下特殊字符:

星號(*):表明全部可能的值,例如month字段若是是星號,則表示在知足其它字段的制約條件後每個月都執行該命令操做。

逗號(,):能夠用逗號隔開的值指定一個列表範圍,例如,"1,2,5,7,8,9"

中槓(-):能夠用整數之間的中槓表示一個整數範圍,例如 "2-6" 表示 "2,3,4,5,6"

正斜線(/):能夠用正斜線指定時間的間隔頻率,至關於整除,例如 "0-23/2" 表示每兩小時執行一次。同時正斜線能夠和星號一塊兒使用,例如 */10,若是用在minute字段,表示每十分鐘執行一次。

crond 服務

/sbin/service crond start //啓動服務

/sbin/service crond stop //關閉服務

/sbin/service crond restart //重啓服務

/sbin/service crond reload //從新載入配置

/sbin/service crond status //查看crontab服務狀態

4、抓包工具

4.1 tcpdump 工具

tcpdump命令是一款 sniffer 工具,它能夠打印全部通過網絡接口的數據包的頭信息,也可使用 -w 選項將數據包保存到文件中,方便之後分析。

格式:

tcpdump(選項)

監視指定網絡接口的數據包

# tcpdump -nn -i eth0

-nn:直接以IP及port number顯示,而非主機名與服務名稱;

-c<數據包數目>:收到指定的數據包數目後,就中止進行傾倒操做;

-w<數據包文件>:把數據包數據寫入指定的文件。

例如:

[root@ryan ~]# tcpdump -nn -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
22:31:13.034947 IP 172.31.71.xx.22 > 124.89.91.xx.62990: Flags [P.], seq 223003822:223004030, ack 658294645, win 281, length 208
22:31:13.035049 IP 172.31.71.xx.22 > 124.89.91.xx.62990: Flags [P.], seq 208:400, ack 1, win 281, length 192
22:31:13.081450 IP 124.89.91.xx.62990 > 172.31.71.xx.22: Flags [.], ack 400, win 16695, length 0

-nn 選項的做用是讓第三列和第四列顯示成 "IP+端口號" 的形式,若是不加 -nn 選項則顯示爲 "主機名+服務名稱"。

監視指定主機和端口的數據包

# tcpdump -nn tcp and host xxx and port xxx -c 100 -w /tmp/1.cap

若是想要獲取主機 210.27.48.1 接收或發出的 telnet 包,使用以下命令:

# tcpdump tcp port 23 host 210.27.48.1

4.2 wireshark 工具

使用 wireshark 能夠分析數據包,能夠經過編輯過濾表達式來達到對數據的分析。須要使用的命令爲 tshark,它是一個網絡協議分析器。它容許您從實況網絡捕獲分組數據,或者從先前保存的捕獲文件讀取數據包,或者將這些分組的解碼形式打印到標準輸出或將數據包寫入文件。tshark 的本地捕獲文件格式是PCAP格式,它也是TCPDUMP和各類其餘工具使用的格式。

顯示訪問http請求的域名以及uri

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"

以下所示:

[root@ryan ~]# 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"
tshark: -R without -2 is deprecated. For single-pass filtering use -Y.
Running as user "root" and group "root". This could be dangerous.
Capturing on 'eth0'
"Jul  8, 2018 22:09:02.394273171 CST"   124.89.91.xx    www.moonxy.com  GET     /wordpress/350.html

其中:

"Jul  8, 2018 22:09:02.394273171 CST" 爲請求時間;

124.89.91.xx 爲源地址(訪問者 IP);

www.moonxy.com 爲請求的域名;

GET 爲 http 請求類型;

/wordpress/350.html 爲請求的路徑;

實時打印當前http請求的url(包括域名)

tshark -s 512 -i eth0 -n -f 'tcp dst port 80' -R 'http.host and http.request.uri' -T fields -e http.host -e http.request.uri -l | tr -d '\t'

以下所示:

[root@ryan ~]# tshark -s 512 -i eth0 -n -f 'tcp dst port 80' -R 'http.host and http.request.uri' -T fields -e http.host -e http.request.uri -l | tr -d '\t'
tshark: -R without -2 is deprecated. For single-pass filtering use -Y.
Running as user "root" and group "root". This could be dangerous.
Capturing on 'eth0'
7 www.moonxy.com/wordpress/319.html
www.moonxy.com/wordpress/wp-content/uploads/2018/04/20180422134436_87982.png
www.moonxy.com/wordpress/wp-content/uploads/2018/04/20180422134518_98463.png
www.moonxy.com/wordpress/wp-content/uploads/2018/04/20180422134718_91938.png
www.moonxy.com/wordpress/wp-content/uploads/2018/04/20180422134927_72555.png
www.moonxy.com/wordpress/wp-content/uploads/2018/04/20180422134946_41004.png
www.moonxy.com/wordpress/wp-content/uploads/2018/04/20180422134912_12773.png
8 www.moonxy.com/wordpress/303.html
10 www.moonxy.com/wordpress/wp-content/uploads/2018/04/20180422140632_57565.jpg
相關文章
相關標籤/搜索