一、服務

>>>服務(Service)本質是進程,但是是運行在後台的,通常都會監聽某個端口,等待其他程序的請求,比如(mysql、sshd、防火牆等),因此我們又稱為守護進程。

 

 

服務工作過程:提供服務的一端叫服務端,服務啓動時需要開放對應的端口號。請求服務的一端叫客户端,客户端指定服務端的IP地址加端口號向服務端發起請求。服務端收到客户端的請求後分析數據包發現請求的端口是XX端口,內核根據哪個進程監聽此端口將數據包發給對應的進程處理。處理完後將數據返回給客户端。

 

 

常見服務:

tcp 20,21          ftp文件傳輸協議

tcp 22               ssh

tcp 23               telnet

tcp 25               smtp

tcp/udp 53       dns

udp 67,68         dhcp

tcp 80               http

tcp 3306           mysql

tcp 443             https

tcp 6379           redis

 

 

Linux服務分類:獨立守護進程、超級守護進程

獨立守護進程:

    該類進程啓動後就常駐內存,所以會一直佔用系統資源。其最大的優點就是它會一直啓動,當外界有要求時相應速度較快,像httpd,dns等進程。

 

超級守護進程:

    系統啓動時由一個統一的守護進程xinet來負責管理一些進程,當相應請求到來時需要通過xinet的轉接才可以喚醒被xinet管理的進程。這種進程的優 點是最初只有xinet這一守護進程佔有系統資源,其他的內部服務並不一直佔有系統資源,只有數據包到來時才會被xinet管理員來喚醒。並且我們還可以通過xinet來對它所管理的進程設置一些訪問權限,相當於多了一層管理機制。

 

 

管理服務命令:service、chkconfig、systemctl

 

>>>sercice:可以啓動、停止、重新啓動和關閉系統服務,還可以顯示所有系統服務的當前狀態。其本質為在/etc/init.d目錄下尋找相應的服務,進行開啓和關閉等操作。

#開啓關閉一個服務:
    service NAME start/stop
 
#查看系統服務的狀態:
    service --status-all

  

>>>chkconfig:是管理系統服務(service)的命令行工具。所謂系統服務(service),就是隨系統啓動而啓動,隨系統關閉而關閉的程序。chkconfig可以更新(啓動或停止)和查詢系統服務(service)運行級信息。更簡單一點,chkconfig是一個用於維護/etc/rc[0-6].d目錄的命令行工具。

 

#設置service開機是否啓動:
    chkconfig NAME on/off/reset
#on、off、reset用於改變service的啓動信息。on表示開啓,off表示關閉,reset表示重置。默認情況下,on和off開關只對運行級2,3,4,5有效,reset可以對所有運行級有效。
 
#設置service運行級別:
    chkconfig --level levels NAME on|off|reset
#該命令可以用來指定服務的運行級別,即指定運行級別2,3,4,5等。
 
#列出service啓動信息:
    chkconfig --list [name]
#如果不指定name,會列出所有services的信息。

 

>>>systemctl:是一個systemd工具,主要負責控制systemd系統和服務管理器。systemctl是RHEL 7 的服務管理工具中主要的工具,它融合之前service和chkconfig的功能於一體。可以使用它永久性或只在當前會話中啓用/禁用服務。所以systemctl命令是service命令和chkconfig命令的集合和代替。

#開啓關閉重啓服務和查詢狀態
    systemctl start|stop|restart|status NAME
    
#開機啓動服務:
    systemctl enable NAME
    
#開機不啓動服務:
    systemctl disable NAME

 

 

 

二、seLinux

>>>安全增強型 Linux(Security-Enhanced Linux)簡稱 SELinux,它是一個 Linux 內核模塊,也是 Linux 的一個安全子系統。SELinux 主要作用就是最大限度地減小系統中服務進程可訪問的資源(最小權限原則)。

 

 

 

DAC(自主訪問控制)& MAC(強制訪問機制)

DAC:在沒有使用 SELinux 的操作系統中,決定一個資源是否能被訪問的因素是某個資源是否擁有對應用户的權限(讀、寫、執行)。只要訪問這個資源的進程符合以上的條件就可以被訪問。而最致命問題是,root 用户不受任何管制,系統上任何資源都可以無限制地訪問。這種權限管理機制的主體是用户,也稱為自主訪問控制(DAC)。

MAC:在使用了 SELinux 的操作系統中,決定一個資源是否能被訪問的因素除了上述因素之外,還需要判斷每一類進程是否擁有對某一類資源的訪問權限。這種權限管理機制的主體是進程,也稱為強制訪問控制(MAC)。

 

二者區別:① DAC的主體是真實有效的用户和組ID,MAC的主體是安全上下文,兩者的UID是各自獨立的。② DAC的訪問控制模式是rwxrwxrwx,MAC的訪問控制模式是user:role:type。

 

 

 

SELinux 有三種工作模式,分別是:

1. enforcing:強制模式。違反 SELinux 規則的行為將被阻止並記錄到日誌中。

2. permissive:寬容模式。違反 SELinux 規則的行為只會記錄到日誌中。一般為調試用。

3. disabled:關閉 SELinux。

SELinux 工作模式可以在 /etc/selinux/config 中設定。

 

 

配置SELinux—SELinux是否啓用

設置SELinux模式及開關使用命令有3個:getenforce ;sestatus ;setenforce

 

>>>getenforce   #獲取selinux的當前狀態

[root@centos7-->14:47:57~]#getenforce 
Disabled                                    ##當前系統的selinux狀態為關閉

 

>>>sestatus    #查看selinux完整狀態

[root@centos7-->14:51:35~]#sestatus
SELinux status:                enabled            ##當前狀態
SELinuxfs mount:                /sys/fs/selinux    
SELinux root directory:        /etc/selinux
Loaded policy name:            targeted
Current mode:                  enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:    allowed
Max kernel policy version:      31

 

>>>setenforce  0|1   #開啓或關閉

[root@centos7-->14:51:59~]#setenforce 
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]
 
0:設置為permissive
1:設置為enforcing
注意:如果當前系統的SElinux狀態為Disabled時,使用setenforce  0或者1切換時,要想生效,必須reboot重啓系統。
如果是enforcing狀態和permissive切換時不需要重啓系統。

 

>>>修改配置文件:

 

/boot/grub/grub.conf在對應的kernel內核參數後面追加    (centos  6中)
                  selinux=1 (啓用)|   selinux=0(禁用)                          
              
                  /etc/selinux/config      |        /etc/sysconfig/selinux(鏈接)                             (centso 7  中)
                  SELINUX變量有3中參數:
                  SELINUX={disabled|enforcing|permissive}

 

 

安全上下文

安全上下文是一個簡單的、一致的訪問控制屬性,在SELinux中,類型標識符是安全上下文的主要組成部分,由於歷史原因,一個進程的類型通常被稱為一個域(domain),"域"和"域類型"意思都一樣,即都是安全上下文中的“TYPE”。

 

所有操作系統訪問控制都是以關聯的客體和主體的某種類型的訪問控制屬性為基礎的。在SELinux中,訪問控制屬性叫做安全上下文。所有客體(文件、進程間通訊通道、套接字、網絡主機等)和主體(進程)都有與其關聯的安全上下文,一個安全上下文由三部分組成:用户、角色和類型標識符。

 

 

常常用下面的格式指定或顯示安全上下文:

        USER:ROLE:TYPE[LEVEL[:CATEGORY]]

①  USER

1) useridentity:類似Linux系統中的UID,提供身份識別,用來記錄身份;安全上下文的一部分;

2) 三種常見的 user:

            • user_u :普通用户登錄系統後的預設;

            • system_u :開機過程中系統進程的預設;

            • root :root 登錄後的預設;

3) 在 targeted policy 中 users 不是很重要;

4) 在strict policy 中比較重要,所有預設的 SELinux Users 都是以 “_u” 結尾的,root 除外。

②  ROLE

1) 文件、目錄和設備的role:通常是 object_r;

2) 程序的role:通常是 system_r;

3) 用户的role:targeted policy為system_r; strict policy為sysadm_r、staff_r、user_r;用户的role,類似系統中的GID,不同角色具備不同的的權限;用户可以具備多個role;但是同一時間內只能使用一個role;        

4) 使用基於RBAC(Roles Based AccessControl) 的strict和mls策略中,用來存儲角色信息

③  TYPE

1) type:用來將主體(subject)和客體(object)劃分為不同的組,給每個主體和系統中的客體定義了一個類型;為進程運行提供最低的權限環境;

2) 當一個類型與執行中的進程相關聯時,其type也稱為domain;

3) type是SElinux security context 中最重要的部位,是 SELinux Type Enforcement 的心臟,預設值以_t結尾;

 

id -Z    顯示了你的shell的安全上下文
ps -Z    檢查進程的安全上下文
ls -Z    檢查文件、目錄的安全上下文

 

 

文件的Security Contex規則如下:

      • rpm包安裝的:會根據rpm包內記錄來生成安全上下文;

      • 手動創建的文件:會根據policy中規定的來設置安全上下文;

      • cp:會重新生成安全上下文;

      • mv:安全上下文則不變。

 

 

修改安全上下文:chcon、restorecon、semanage命令


>>>chcon:手動修改文件的SELinux安全上下文(臨時修改)

chcon [-R] [-t  type] [-u  user] [-r  role]  文件(絕對路徑)
chcom  [-R]  --reference=範例文件  文件

相關參數與選項:

-R:連同該目錄下的子目錄也同時修改

-t:後面接安全上下文的類型欄位。例如:httpd_sys_content_t

-u:後面接身份識別(不重要)。例如:system_u

-r:後面接角色(不重要)。例如:system_r

-v:若有變動成功,將變動的結果列出來

--reference:拿某個文件當範例來修改後續接的文件的類型

 

>>>restorecon:讓文件的SELinux類型恢復為默認的SELinux類型。默認的SELinux類型與semanage命令有關,就是參考semanage這個命令所查詢處的默認SELinux類型。

restorecon  [-Rv]  文件/目錄(絕對路徑)

相關參數:

-R:連同子目錄一起修改

-v:將過程顯示到屏幕

 

>>>semanage:查詢/修改/增加/刪除文件的默認SELinux類型(永久修改)

semanage  [login/user/port/interface/fcontext/translation]  -l
semanage  fcontext  -{a/d/m}  [-frst]  file_spec

相關參數與選項:

-l:查詢

fcontext:主要用在安全上下文方面的用途(常用的)

-a:增加的意思,你可以增加一些目錄的默認安全上下文類型設置

-m:修改的意思

-d:刪除的意思

 

 

相關案例見:

 

 

 

管理 SELinux 布爾值

>>>SELinux 布爾值是更改 SELinux 策略行為的開關。 SELinux 布爾值是可以啓用或禁用的規則。安全管理員可 以使用 SELinux 布爾值來調整策略 , 以有選擇地進行調整。許多軟件包都具有 man page *_selinux(8), 其中詳細説明了所使用的一些布爾值 ; man -k ‘_selinux’ 可以輕鬆地找到這些手冊。

 

getsebool 用於顯示布爾值 , setsebool 用於修改布爾值 
setsebool -P 修改 SELinux 策略 , 以永久保留修改。
semanage boolean -l   顯示布爾值是否永久

  

 

三、TCP_Wrappers

>>>TCP_Wrappers是一個工作在第四層(傳輸層)的的安全工具,對有狀態連接的特定服務進行安全檢測並實現訪問控制,凡是包含有libwrap.so庫文件的的程序就可以受TCP_Wrappers的安全控制。它的主要功能就是控制誰可以訪問,常見的程序有rpcbind、vsftpd、sshd,telnet。

 

 

工作原理:TCP_Wrappers有一個TCP的守護進程叫作tcpd。以ssh為例,每當有ssh的連接請求時,tcpd即會截獲請求,先讀取系統管理員所設置的訪問控制文件,符合要求,則會把這次連接原封不動的轉給真正的ssh進程,由ssh完成後續工作;如果這次連接發起的ip不符合訪問控制文件中的設置,則會中斷連接請求,拒絕提供ssh服務。

雲linux服務器 filesystem 顯示為overlay shm是何意思_訪問控制

TCP_Wrappers的使用主要是依靠兩個配置文件/etc/hosts.allow, /etc/hosts.deny,用於拒絕和接受具有TCP_Wrappers控制全的程序,詳細信息具體可以查看man幫助(man 5 hosts_access, man 5 hosts_options),不過在剛開始的時候,/etc/hosts.allow,/etc/hosts.deny什麼都沒有添加,此時沒有限制,是都可以連接的。

 

 

配置文件格式遵循如下規則:

daemon_list@host: client_list [:options :option…]

 

daemon_list: 是程序的列表,可以是多個,是多個時,使用,隔開

 

@host:可以沒有,是我們的限制的網卡訪問接口(自己的),設置允許或禁止他人從自己的那個網口進入。這一項不寫,就代表全部。

 

client_list:是訪問者的地址,如果需要控制的用户較多,可以使用空格或,隔開。也可以使用關鍵詞EXCEPT,篩出某些用户(在allow文件中被EXCEPT的用户即拒絕)格式如下:

    基於IP地址: 192.168.10.1 192.168.1.

    基於主機名: www.magedu.com .magedu.com 較少用

    基於網絡/掩碼: 192.168.0.0/255.255.255.0

    基於net/prefixlen: 192.168.1.0/24(CentOS7)

    基於網絡組(NIS 域): @mynetwork

    內置ACL: ALL, LOCAL, KNOWN, UNKNOWN,PARANOID

        ALL:所有主機 

        LOCAL:本地主機 

        KNOWN:主機名可解析成ip的 

        UNKNOWN:主機名無法解析成IP的 

        PARANOID:正向解析與反向解析不對應的主機

 

sshd@192.168.111.110:192.168.111.120
sshd:192.168.111. EXCEPT 192.168.111.120

 

[:options :option…]:選項如下:

    deny 主要用在/etc/hosts.allow定義“拒絕”規則

vsftpd: 172.16. :deny

    allow 主要用在/etc/hosts.deny定義“允許” 規則

vsftpd:172.16. :allow

 spawn 啓動一個外部程序完成執行的操作

    twist 實際動作是拒絕訪問,使用指定的操作替換當前服務,標準I/O和ERROR發送到客户端,默認至/dev/null

 

 

 

補充:查看sshd是否支持wrapper


ldd $(which sshd) | grep wrap

  

 

 

 

 

 

 

四、iptables

iptables並不是真正的防火牆,可以理解為一個客户端代理,用户通過iptables這個代理,將用户的安全設定執行到對應的安全框架中,這個安全框架才是真正的防火牆,這個框架的名字叫netfilter。netfilter位於內核空間,而iptables其實是一個命令行工具,位於用户空間。netfilter/iptables組成Linux平台下的包過濾防火牆。可以完成封包過濾、封包重定向和網絡地址轉換(NAT)等防火牆功能。

 

 

數據經過防火牆的流程

雲linux服務器 filesystem 顯示為overlay shm是何意思_ci_02


關鍵詞:鏈(chain)、表(table)、規則(rule)

 

 

 

>>>鏈

防火牆要達到防火的目的,需要在內核中設置關卡,所有進出的報文都要通過這些關卡,經過檢查後,符合放行條件的才能放行,符合阻攔條件的都被阻攔。在iptables中,這些關卡稱為鏈。之所以稱為鏈,是因為防火牆的作用在於對經過每一個關卡的報文匹配規則,然後執行動作,而這個關卡上可能不止一條規則,當我們把多條規則串在一個鏈條上時,就形成了鏈。

雲linux服務器 filesystem 顯示為overlay shm是何意思_ci_03

五個規則鏈

1.PREROUTING (路由前)

2.INPUT (數據包流入口)

3.FORWARD (轉發管卡)

4.OUTPUT(數據包出口)

5.POSTROUTING(路由後)

 

在某些常用場景中,報文的流向為

到本機某進程的報文:PREROUTING --> INPUT

由本機轉發的報文:PREROUTING -->  FORWARD -->POSTROUTING

由本機的某進程發出報文(通常為響應報文):OUTPUT --> POSTROUTING

 

 

>>>表

在iptables中,每條鏈上都放置了一串規則,有些規則是相似的,如A類規則都是對IP或者端口的過濾,B類規則是修改報文,因此可以將具有相同功能的規則放在一起,這種集合稱為“表”。每條鏈上的所有規則都分別屬於不同的表中。

 

4種表

filter表:負責過濾功能,防火牆;內核模塊:iptables_filter

nat表:網絡地址轉換功能;內核模塊:iptables_nat

mangle表:拆解報文,做出修改,並重新封裝的功能;內核模塊:iptables_mangle

raw表:關閉nat表上啓用的連接追蹤機制;內核模塊:iptables_raw

 

 

錶鏈關係

由於每條鏈所處位置不同,需要發揮的功能不同,包含的規則也不同。因此某些鏈並不會包含某些規則(表)。

每個鏈中含有的表(規則):

PREROUTING:raw表、mangle表、nat表

INPUT:mangle表、filter表 (Centos7中還有nat表,Centos6中沒有)

FORWARD:mangle表、filter表

OUTPUT:raw表、mangle表、nat表、filter表

POSTROUTING:mangle表、nat表

 

每個表可以被哪些鏈使用

雲linux服務器 filesystem 顯示為overlay shm是何意思_ci_04

 

每條鏈上不同表的匹配順序

數據包經過一個鏈時,會將當前鏈的所有規則都匹配一遍,匹配的時候根據匹配規則依次執行。

iptables定義的4張表執行的優先級為:

raw > mangle > nat > filter

 

 

>>>規則

根據指定的匹配條件來匹配每個流經此處的報文,一旦匹配成功,則由規則後面指定的處理動作進行處理。

 

匹配條件

匹配條件分為基本匹配條件與拓展匹配條件

基本匹配條件:

源地址Source IP ,目的地址Destination IP

拓展匹配條件

除了基本匹配條件其餘可用於匹配的條件稱為拓展匹配條件,這些拓展匹配條件在netfilter中以模塊的形式存在,如果想使用這些條件,則需要依賴對應的拓展模塊。

源端口Source Port,目的端口Destination Port

 

處理動作

ACCEPT:允許數據包通過

DROP:直接丟棄數據包,不給任何迴應信息。

REJECT:拒絕數據包通過,必要時會給數據發送端一個相應的信息,客户端剛請求就會收到拒絕的信息。

SNAT:源地址轉換,解決內網用户用同一個公網地址上網的問題

MASQUERADE:是SNAT的一種特殊形式,適用於動態的、臨時會變的IP 上。

DNAT:目標地址轉換

REDIRECT:在本機做端口映射。

LOG:在/var/log/messages文件中記錄日誌信息,然後將數據包傳遞給下一條規則。即除了記錄外不對數據包做任何其他操作,仍然讓下一條規則進行匹配。

 

 

 

數據包處理過程

雲linux服務器 filesystem 顯示為overlay shm是何意思_訪問控制_05

 

iptables設置

語法: iptables [-t TABLE] SUBCOMMAND CHAIN [!] CRITERIA -j TARGET

-t TABLE 如無則默認為filter表

SUBCOMMAND
    對鏈操作
        -F [CHAIN]     flush  清空所有鏈規則
        -P                   policy,定義鏈的默認動作
        -N                  new 自定義鏈
        -X                  刪除自定義鏈
        -Z                  zero,清空鏈上的統計信息
    對規則操作
        -A                  append追加規則到鏈最後
        -I                   insert,插入規則
        -D                 delete 刪除規則
        -R                  replace,替換規則
    查看
        -L                  列出table中的所有鏈的規則
            子選項
                -n        不做名稱解析
                -v        詳細信息
                -vv      更詳細
                -vvv    更更詳細
                --line-numbers        顯示規則編號

CRITERIA:檢查IP,TCP,UDP,ICMP首部,可以基於擴展機制進行額外的檢查
    通用匹配
        -s          source 源IP
        -d         destination 目的ip
        -p         protocol 協議  ip tcp udp icmp
        -i           input interface 入接口
        -o         output interface 出接口
    擴展匹配(-m MODULES)
        使用iptables的模塊實現擴展性的檢查機制
        隱式匹配
            如果在通用匹配上使用了-p選項指明協議,-m可有可無
            tcp
                --dport        目的端口
                --sport         源端口
                --tcp-flags LIST1 LIST2
                    LIST1 要檢查的標記位
                    LIST2 在LIST1中出現,且必須為1的標記位,其餘的必須為0
                    eg:  --tcp-flags syn,ack,fin,rst syn
                --syn  用來匹配tcp會話第一次握手
                    eg:iptables -A INPUT -p tcp -s 172.16.100.0/24  --dport 22  -j ACCEPT
            udp
                --sport
                --dport
            icmp
                -icmp
                    8             echo request
                    0             echo reply
                eg: iptables -A INPUT -s 10.1.1.1 -p icmp -icmp 0 -j ACCEPT
        顯式匹配
            必須指明擴展匹配機制
            用法:-m 模塊名稱            每個模塊包含多種擴展匹配機制
            multiport擴展
                定義多個離散的端口
                可用選項
                    --sports PORT [,PORT2...]
                    --dports PORT[,PORT2 ...]
                    --ports PORT[,PORT2 ...]
                eg: iptables -A INPUT -d 10.1.1.1 -p tcp -m multiport --dports 22,80,443 -j ACCEPT
            iprange擴展
                指定連續的IP地址範圍
                可用選項
                    --src-range IP[-IP2]
                    --dst-range IP[-IP2]
                eg: iptables -A INPUT -d 10.1.1.1 -p tcp --dport 22 -m iprange --src-range 192.168.1.1-192.168.1.100 -j ACCEPT
            time擴展
                基於時間的訪問控制
                --datestart YYYY [-MM][-DD] [hh[:mm[:ss]]]
                --datestop
                --timestart
                --timestop
                --weekdays DAY1[,DAY2...]
                eg
                    每天9點到19點不能訪問
                        iptables -A INPUT -p tcp --dport 80 -m time --timestart 9:00 --timestop 19:00 -j DROP
                    指定週一週二不能訪問
                        iptables -A INPUT -p tcp --dport 80 -m time --weekdays Mon,Tue -j DROP
            connlimit擴展
                基於連接次數限制,對於每個IP能發起的併發連接數限制
                可用選項
                    --connlimit-above N
                    eg:iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 6 -j REJECT     限制每個IP能打開5個連接                           
            limit擴展
                基於發包速率限制
                選項
                    --limit n/[minute|second|hour|day]
            state擴展
                基於連接追蹤模板(nf_conntrack),用於記錄各連接以及相關狀態,基於ip實現,與tcp協議無關
                記錄連接狀態
                    NEW
                        新建立的連接,連接追蹤模板無相應記錄,客户端第一次發出請求
                        iptables -A INPUT  -p tcp  -m state NEW,ESTABLISHED -j ACCEPT
                    ESTABLISHED
                        NEW狀態之後到模板中狀態被刪除之前的過程
                    RELATED
                        相關聯的連接,如ftp的被動模式(20,21)
                    INVALIED
                        無法識別的狀態
                可用選項
                    --state [NEW|ESTABLISHED|RELATED|INVALIED]

TARGET
    -j  TARGET  # jump
    內置目標
        ACCEPT
        DROP
        REJECT
    自定義鏈
    用於NAT
        -j SNAT  --to-source 192.168.1.1
        -j DNAT --to-destination 192.168.1.1
        FULLNAT

  

保存規則到文件

/etc/init.d/iptables save

關閉iptables

/etc/init.d/iptables stop

 

 

 

詳細見:http://www.zsythink.net/archives/tag/iptables/page/2/

 

 

 

 

五、firewall

firewalld(Dynamic Firewall Manager of Linux systems,Linux系統的動態防火牆管理器)服務是默認的防火牆配置管理工具,它擁有基於CLI(命令行界面)和基於GUI(圖形用户界面)的兩種管理方式。

相較於傳統的防火牆管理配置工具,firewalld支持動態更新技術並加入了區域(zone)的概念。簡單來説,區域就是firewalld預先準備了幾套防火牆策略集合(策略模板),用户可以根據生產場景的不同而選擇合適的策略集合,從而實現防火牆策略之間的快速切換。例如,我們有一台筆記本電腦,每天都要在辦公室、咖啡廳和家裏使用。按常理來講,這三者的安全性按照由高到低的順序來排列,應該是家庭、公司辦公室、咖啡廳。當前,我們希望為這枱筆記本電腦指定如下防火牆策略規則:在家中允許訪問所有服務;在辦公室內僅允許訪問文件共享服務;在咖啡廳僅允許上網瀏覽。在以往,我們需要頻繁地手動設置防火牆策略規則,而現在只需要預設好區域集合,然後只需輕點鼠標就可以自動切換了,從而極大地提升了防火牆策略的應用效率。

 

 

常見的區域

    trusted    允許所有的數據包

    home    拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh、mdns、ipp-client、amba-client與dhcpv6-client服務相關,則允許流量

    internal    等同於home區域

    work    拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh、ipp-client與dhcpv6-client服務相關,則允許流量

    public    拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh、dhcpv6-client服務相關,則允許流量

    external    拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh服務相關,則允許流量

    dmz    拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh服務相關,則允許流量

    block    拒絕流入的流量,除非與流出的流量相關

    drop    拒絕流入的流量,除非與流出的流量相關

 

 

使用方法

安裝

yum install firewalld

如果需要圖形界面的話,則再安裝

yum install firewall-config

 

systemctl start firewalld   # 啓動,

systemctl enable firewalld    # 開機啓動

systemctl stop firewalld    # 關閉

systemctl disable firewalld    # 取消開機啓動

 

 

 

終端管理工具firewall-cmd

參數

    --get-default-zone    查詢默認的區域名稱

    --set-default-zone=<區域名稱>    設置默認的區域,使其永久生效

    --get-zones    顯示可用的區域

    --get-services    顯示預先定義的服務

    --get-active-zones    顯示當前正在使用的區域與網卡名稱

    --add-source=    將源自此IP或子網的流量導向指定的區域

    --remove-source=    不再將源自此IP或子網的流量導向某個指定區域

    --add-interface=<網卡名稱>    將源自該網卡的所有流量都導向某個指定區域

    --change-interface=<網卡名稱>    將某個網卡與區域進行關聯

    --list-all    顯示當前區域的網卡配置參數、資源、端口以及服務等信息

    --list-all-zones    顯示所有區域的網卡配置參數、資源、端口以及服務等信息

    --add-service=<服務名>    設置默認區域允許該服務的流量

    --add-port=<端口號/協議>    設置默認區域允許該端口的流量

    --remove-service=<服務名>    設置默認區域不再允許該服務的流量

    --remove-port=<端口號/協議>    設置默認區域不再允許該端口的流量

    --reload    讓“永久生效”的配置規則立即生效,並覆蓋當前的配置規則

    --panic-on    開啓應急狀況模式

    --panic-off    關閉應急狀況模式

 

實例

    查看firewalld服務當前所使用的區域

        firewall-cmd --get-default-zone

    查詢eno16777728網卡在firewalld服務中的區域

        firewall-cmd --get-zone-of-interface=eno16777728

    把firewalld服務中eno16777728網卡的默認區域修改為external,並在系統重啓後生效。分別查看當前與永久模式下的區域名稱:

        firewall-cmd --permanent --zone=external --change-interface=eno16777728

        firewall-cmd --get-zone-of-interface=eno16777728

        firewall-cmd --permanent --get-zone-of-interface=eno16777728

    把firewalld服務的當前默認區域設置為public

        firewall-cmd --set-default-zone=public

 

    啓動/關閉firewalld防火牆服務的應急狀況模式,阻斷一切網絡連接(當遠程控制服務器時請慎用)

        firewall-cmd --panic-on

        firewall-cmd --panic-off

    查詢public區域是否允許請求SSH和HTTPS協議的流量

        firewall-cmd --zone=public --query-service=ssh

        firewall-cmd --zone=public --query-service=https

    把firewalld服務中請求HTTPS協議的流量設置為永久允許,並立即生效

        firewall-cmd --zone=public --add-service=https

        firewall-cmd --permanent --zone=public --add-service=https

        firewall-cmd --reload

    把firewalld服務中請求HTTP協議的流量設置為永久拒絕,並立即生效

 

 

    把在firewalld服務中訪問8080和8081端口的流量策略設置為允許,但僅限當前生效

        firewall-cmd --zone=public --add-port=8080-8081/tcp

 

    查看當前區域開放端口及服務

 

        firewall-cmd --zone=public --list-services

    端口轉發

        格式

            firewall-cmd --permanent --zone=<區域> --add-forward-port=port=<源端口號>:proto=<協議>:toport=<目標端口號>:toaddr=<目標IP地址>

        實例

            將80端口的流量轉發至8080

                firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080

            將80端口的流量轉發至192.168.0.1

                firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1

            將80端口的流量轉發至192.168.0.1的8080端口

                firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080

    NAT 轉發

        firewall-cmd --permanent --zone=public --add-masquerade

            啓用

            iptables -A POSTROUGING -o eth0 -j MASQUERADE

        firewall-cmd --zone=public --add-port=53/udp --permanent

            開放53端口

        firewall-cmd --query-masquerade

            查詢

        firewall-cmd --remove-masquerade

            禁止