博客地址: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