linux的防火牆,linux系統的任務計劃,Linux系統服務管理
13.4 linux的防火牆
13.4.1 SElinux
selinux是linux系統特有的安全機制,這種機制限制太多,配置繁瑣,安裝完系統,一般要關閉它。臨時關閉selinux的方法為:
如果想要永久關閉需要更改配置檔案/etc/selinux/config,需要把SELINUX=enforcing改成SELINUX=disabled。更改完該配置檔案重啟系統方可生效。可以使用getenforce命令獲得當前selinux的狀態。預設會輸出enforcing,臨時關閉selinux後在使用這個命令會輸出permissive
13.4.2 netfilter
之前的centos版本的防火牆為netfilter,centos7的防火牆為firewalld。關閉firewalld,開啟之前的iptables。
l 關閉firewalld服務
l 禁止firewalld服務開機啟動
l 安裝iptables-services,這樣就可以使用之前版本的iptables了
l 讓它開機啟動
l 啟動iptables服務
現在就可以使用之前版本的iptables了,centos上預設沒有iptables的規則,這個沒啥用,反倒有影響,所以我們先清除規則,然後把清除後的規則儲存一下。
-nvL表示檢視規則,-F表示清除當前規則(臨時清除),再使用service iptables save命令儲存一下規則。
1.netfilter的5個表
l filter表主要用於過濾包,該表內建三個鏈:INPUT,OUTPUT,FORWARD。INPUT作用於進入本機的包,OUTPUT鏈作用於本機送出的包,FOEWARD作用於跟本機無關的包。
l nat表主要用於網路地址轉換,有三個鏈:PREROUTING鏈的作用是在包剛剛到達防火牆時改變它的目的地址(如果需要),OUTPUT鏈改變本地產生的包的目的地址,POSTROUTING鏈是在包即將離開防火牆時改變其源地址。
l mangle表主要用於給資料包做標記,然後根據標記去操作相應的包。
l raw表可以實現不追蹤某些資料包
l security表用於強制訪問控制(MAC)的網路規則
2.netfilter的5個鏈
l PREROUTING:資料包進入路由表之前
l INPUT:通過路由表後目的地為本機
l FOREARDING:通過路由表後,目的地不為本機
l OUTPUT:由本機產生,向外轉發
l POSTROUTIONG:傳送到網絡卡介面之前
表和鏈對應關係如圖:
3.iptables基本語法
(1)檢視規則以及清除規則
-t:後面跟表名,如果不加,則列印filter表的相關資訊 |
-nvL:檢視該表的規則 |
-n:不針對ip反解析主機名 |
-L:表示列出 |
-v:表示列出的資訊更加詳細 |
-F:把所有規則全部刪除,如果不加-t指定表,預設只清除filter表的規則 |
-Z:表示把包以及流量計數器置零 |
(2)增加/刪除一條規則
-A/-D:表示增加/刪除一條規則 |
-I:插入一條規則,與-A一樣 |
-p:表示指定協議,可以是tcp,udp,icmp |
--dport:必須跟-p一起用,表示指定目標埠 |
--sport:必須跟-p一起用,表示指定源埠 |
-s:表示指定源ip(可以是一個ip段) |
-d:表示指定目的ip(可以是一個ip段) |
-j:後面跟動作,其中ACCEPT表示允許包,DROP表示丟掉包,REJECT表示拒絕包。 |
-i:表示指定網絡卡 |
插入一條規則,把來自1.1.1.1的所有資料包丟掉:
刪除剛剛插入的規則(刪除規則時,必須和插入的規則一致,只有-I和-D不一樣):
把來自2.2.2.2並且是tcp協議到本機80埠的資料包丟掉:
把傳送到10.0.1.14的22埠的資料包丟掉:
把來自192.168.1.0/24這個網段且作用在eth0上的包放行:
想刪除某條規則,但又不容易掌握建立時的規則,可以先檢視iptables規則:
然後刪除某一條規則,使用此命令:(-D後面依次跟鏈名,規則nmu號)
iptables -P表示預設策略,-P後面跟鏈名,策略內容或為DROP,或為ACCEPT(預設)。如果在連線遠端伺服器,執行這個命令會斷開。策略一旦設定後,只有使用命令iptables -P INPUT ACCEPT才能恢復成原始狀態。
#iptables -P INPUT DROP
如何設定iptables規則(例):
需求:只針對filter表,預設策略INPUT鏈DROP,其他兩個鏈ACCEPT,然後針對192.168.188.0/24開通22埠,對所有網段開放80埠,對所有網段開通21埠。
寫成指令碼形式:
1 #cat /usr/local/sbin/iptables.sh 2 #! /bin/bash 3 ipt=“/usr/sbin/iptables” 4 $ipt -F 5 $ipt -P INPUT DROP 6 $ipt -P OUTPUT ACCEPT 7 $ipt -P FORWARD ACCEPT 8 $ipt -A INPUT -s 192.168.188.0/24 -p tcp –dport 22 -j ACCEPT 9 $ipt -A INPUT -p tcp –dport 80 -j ACCEPT 10 $ipt -A INPUT -p tcp –dport 21 -j ACCEPT
完成指令碼編寫後,直接執行/bin/sh /usr/local/sbin/iptables.sh即可。
關於icmp的包有一個常見的應用:
這裡—icmp-type要跟-p icmp一起使用。這個8指的是能在本機ping通其他機器,二其他機器不能ping通本機。
4.nat表的應用
假設機器上有兩塊網絡卡eth0和eth1,其中eth0的ip為10.0.2.68,eth1的ip為192.168.1.1。eth0連線了因特網,eth1沒有連線。有另一臺機器(192.168.1.2)和eth1互通,如何設定才能讓連線eth1的這臺機器連線因特網,和10.0.2.68互通呢?
1 echo1 “1” > /proc/sys/net/ipv4/ip_forward //開啟路由轉發功能 2 3 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASOUERADE //對nat表做ip轉發,-o選項後跟裝置名,表示出口的網絡卡;MASOUERADE表示偽裝
5.儲存和備份iptables規則
咱們設定的防火牆規則只儲存在記憶體中,沒有儲存到某個檔案中,系統重啟後以前設定的規則就沒有了,所以設定好規則後要先儲存:
有時需要清除防火牆的所有規則,可以使用iptables -F,但最好還是停止防火牆服務,防火牆就失效了,但是一旦重新設定規則,防火牆服務會自動開啟,停止防火牆服務:
1 #service iptables stop
備份防火牆規則的方法:
1 #sh /usr/local/sbin/iptables.sh 2 3 #iptables-save > myipt.rule
先執行一下剛才的iptables指令碼,將它重定向到一個檔案裡。想要恢復這些規則,使用命令:
1 #iptables-restore < myipt.rule
13.4.3 firewalld
關閉iptables,開啟firewalld
firewalld有兩個基礎概念,分別是zone和service,每一個zone裡面有不同的iptables規則,預設有九個zone,centos7預設的zone為public。獲取系統所有的zone,命令如下:
檢視系統預設的zone:
9個zone:
l drop(丟棄):任何接收的網路資料包都被丟棄,沒有任何回覆。僅能有傳送出去的網路連線。
l block(限制):任何接收的網路連線都被IPv4的icmp-host-prohibited 資訊和IPv6的icmp6-adm-prohibited資訊所拒絕。
l public(公共):在公共區域內使用,不能相信網路內的其他計算機不會對你的計算機造成危害,只能接收經過選取的連線。
l external(外部):特別是為路由器啟用了偽裝功能的外部網。你不能信任來自網路的其他計算,不能相信它們不會對你的計算機造成危害,只能接收經過選擇的連線。
l dmz(非軍事區):用於你的非軍事區內的計算機,此區域內可公開訪問,可以有限地進入你的內部網路,僅僅接收經過選擇的連線。
l work(工作):用於工作區。你可以基本相信網路內的其他計算機不會危害你的計算機。僅僅接受經過選擇的連線。
l home(家庭):用於家庭網路。你可以基本信任網路內的其他計算機不會危害你的計算機。僅僅接收經過選擇的連線。
l internal (內部):用於內部網路。你可以基本上信任網路內的其他計算機不會威脅你的計算機。僅僅接受經過選擇的連線。
l trusted(信任):可接受所有的網路連線。
關於zone的命令:
設定預設的zone為work
檢視指定網絡卡所在的zone
給指定網絡卡設定zone
針對網絡卡更改zone
針對網絡卡刪除zone
檢視系統所有網絡卡所在的zone
其實,之所以有九種zone,是因為每一個zone裡面都使用了不同的service,service就是針對一個服務(埠)做的iptables規則。
列出當前系統所有的service:
這些service都是由一個個配置檔案定義的,配置檔案的模板在/usr/lib/firewalld/services/目錄下,真正生效的配置在/etc/firewalld/services目錄下面(預設為空)。
檢視當前zone下有哪些service
檢視指定zone下有哪些service
13.5 linux系統的任務計劃
13.5.1 命令crontab
crontab命令的常用選項:
l -u:表示指定某個使用者,不加-u則為當前使用者
l -e:表示指定計劃任務
l -l:表示列出計劃任務
l -r:表示刪除計劃任務
這裡使用crontab -e來編寫任務計劃,實際上是使用vim工具打開了crontab的配置檔案(/var/spool/cron/root,不能直接編輯此檔案),我在裡面編寫了01 10那一行的內容。
這一行表示在6月5日(這一天必須是星期三)的10點01分執行命令:echo “ok” > /root/cron.log
crontab配置檔案
基本格式: * * * * * command
分 時 日 月 周 命令
第一列表示分鐘1-59,每分鐘用*或者*/1表示
第二列表示小時1-23,0表示零點
第三列表示日期1-31
第四列表示月份1-12
第五列表示星期0-6,0表示星期天
第六列表示要執行的命令
crontab -l:檢視已經設定的任務計劃
crontab -r:刪除任務計劃(刪除全部),如果想只刪除一條計劃,可以使用-e選項進入crontab進行編輯
13.5.2 cron練習題
(1)每天22點28分清除/var/log/show.log這個檔案,配置並驗證:
(2)每週日3點執行/bin/sh /usr/local/sbin/backup.sh
(3)每月14日4點10分執行/bin/sh /usr/local/sbin/backup_month.sh
(4)每隔8小時執行ntpdate time.windows.com
(5)每天的1點,12點,18點執行/bin/sh /usr/local/sbin/test.sh
(6)每天的9點到18點執行/bin/sh /usr/local/sbin/test2.sh
每隔八小時就是用全部小時除以8,應該是0,8,16三個數。當遇到多個數時,需要用逗號隔開。時間段可以用n-m表示。
檢視crond服務是否啟動,啟動狀態顯示為active(running),未啟動顯示為inactive(dead):
13.6 Linux系統服務管理
13.6.1 chkconfig服務管理工具
使用命令chkconfig --list列出所有的服務及其每個級別的開啟狀態
其中0為shutdown動作,1為重啟至單使用者模式,6為重啟,2為無NFS支援的多使用者模式,3表示完全多使用者模式,4保留給使用者自定義,5表示圖形登陸方式。
更改某級別下的開啟狀態:
--level指定級別,後面是服務名,然後是off或on,--level後面可以指定多個級別,比如--level 345,還可以省略級別,預設是針對2,3,4,5操作的
chkconfig也可以把某個服務加入系統服務或者刪除,命令為“chkconfig –add/del 服務名”,此功能常用於把自定義的啟動指令碼加入到系統服務當中。
13.6.2 systemd服務管理
列出系統所有服務
與服務相關的命令
systemctl enable crond.service |
讓某個服務開機啟動(.service可以省略) |
systemctl disable crond.service |
不讓開機啟動 |
systemctl status crond.service |
檢視服務狀態 |
systemctl start crond.service |
啟動某個服務 |
systemctl stop crond.service |
停止某個服務 |
systemctl restart crond.service |
重啟某個服務 |
systemctl is-enabled crond |
檢視某個服務是否開機啟動 |
系統所有unit,分為以下型別:
l service:系統服務
l target:多個unit組成的組
l device:硬體裝置
l mount:檔案系統掛載點
l automount:自動掛載點
l path:檔案或路徑
l scope:不是由systemd啟動的外部程序
l slice:程序組
l snapshot:systemd快照
l socket:程序間通訊的套接字
l swap:swap檔案
l timer:定時器
以上每種型別的為檔案都為一個unit,這些unit組成了系統的各個資源。
與unit相關命令:
systemctl list-units |
列出正在執行的unit |
systemctl list-units --all |
列出所有的unit |
systemctl list-units --all --state=inactive |
列出所有inactive的unit |
systemctl list-units --all --type=service |
列出所有狀態的service |
systemctl list-units --type=service |
列出狀態為active的service |
systemctl is-active crond.service |
檢視某個unit是否active |
系統為了方便管理用target來管理unit,檢視當前系統所有的target:
檢視一個target包含的所有unit:
檢視系統預設的target:
設定預設的target:
service,unit,target之間的關係:
(1)一個service屬於一種unit
(2)多個unit一起組成了一個target
(3)一個target裡面包含了多個service,可以檢視檔案/usr.lib/systemd/system/sshd.service裡面【install】部分的內容,它就定義了該service屬於哪一個target。