1. 程式人生 > 實用技巧 >linux的防火牆,linux系統的任務計劃,Linux系統服務管理

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。