centos: firewalld 一

原文地址:http://www.excelib.com/article/287/show Centos7中默認將原來的防火牆iptables升級爲了firewalld,firewalld跟iptables比起來至少有兩大好處: 一、firewalld能夠動態修改單條規則,而不須要像iptables那樣,在修改了規則後必須得所有刷新才能夠生效; 二、firewalld在使用上要比iptables人性化不少,即便不明白「五張表五條鏈」並且對TCP/IP協議也不理解也能夠實現大部分功能。java

iptables實際包含五張表linux

大部分iptables的資料都介紹說iptables包含四張表、五條鏈,不過實際上iptables還有第五張表——security表,但 是這張表須要和selinux結合使用,而selinux雖然已經發布了十多年了可是直到如今還有不少人對他的理解不夠透徹,甚至有不少人會將其關閉!spring

其實selinux的設計理念在安全上來講是很是優秀的,並且理解了其設計理念以後再去使用也沒那麼複雜,只不過其內置的規則是很是複雜的,如今還回到iptables的五張表,他們分別是filter、nat、mangle、raw和 security。安全

filter表就是咱們最常使用的過濾表;nat表主要用於數據包轉發,好比局域網的電腦若是想鏈接互聯網,那麼就可使用nat給轉發一 下;mangle表的規則能夠對數據包進行修改,好比修改ttl值等;raw表主要是爲了提升效率使用的,raw自己的含義是指「原生的」、「未通過加工 的」,符合raw表所對應規則的數據包將會跳過一些檢查,這樣就能夠提升效率,固然,raw表的優先級也是最高的;security是跟selinux相 關的MAC模式的安全過濾。服務器

firewalld && iptables firewalld自身並不具有防火牆的功能,而是和iptables同樣須要經過內核的netfilter來實現,也就是說firewalld和 iptables同樣,他們的做用都是用於維護規則,而真正使用規則幹活的是內核的netfilter,只不過firewalld和iptables的結 構以及使用方法不同罷了。框架

firewalld結構 咱們這裏所說的結構並非firewalld軟件的結構,而是配置文件的結構。 在具體介紹firewalld配置文件結構以前先來給你們介紹一下firewalld的配置模式,firewalld的配置模式設計的很是巧妙,並且這種設計思路也很是值得咱們借鑑和學習。ssh

firewalld配置模式 firewalld的配置文件以xml格式爲主(主配置文件firewalld.conf例外),他們有兩個存儲位置tcp

一、/etc/firewalld/ide

二、/usr/lib/firewalld/工具

使用時的規則是這樣的:當須要一個文件時firewalld會首先到第一個目錄中去查找,若是能夠找到,那麼就直接使用,不然會繼續到第二個目錄中查找。

firewalld的這種配置文件結構的主要做用是這樣的:在第二個目錄中存放的是firewalld給提供的通用配置文件,若是咱們想修改配置, 那麼能夠copy一份到第一個目錄中,而後再進行修改。這麼作有兩個好處:首先咱們往後能夠很是清晰地看到都有哪些文件是咱們本身建立或者修改過的,其 次,若是想恢復firewalld給提供的默認配置,只須要將本身在第一個目錄中的配置文件刪除便可,很是簡單,而不須要像其餘不少軟件那樣在修改以前還 得先備份一下,並且時間長了還有可能忘掉以前備份的是什麼版本。

固然,這種配置模式也並非firewalld的獨創,在其餘不少地方也都有用到,好比java中用於記錄日誌的logback也是這種模式,他在 查找配置文件時會首先在根目錄下找logback-test.xml文件,若是能夠找到就直接使用,若是找不到就會接着找logback.xml文件,如 果還找不到就會使用本身包裏邊自帶的配置文件,這樣使用起來就很是方便了,好比咱們能夠把logback-test.xml和logback.xml兩個 文件都建立出來,在開發機上使用logback-test.xml文件,而後在往服務器部署的時候直接將其刪掉就能夠了!固然還有不少產品也使用了這種配 置模式,spring的不少子框架也使用的是這種模式,好比spring MVC中的組件配置也是這樣,若是沒有配置的話就會使用默認的配置,固然,咱們這裏不是在講Spring MVC因此就不展開了,若是想了解更多細節你們能夠參考學生編寫的《看透Spring MVC:源代碼分析與實踐》一書。

配置文件結構 firewalld的配置文件結構很是簡單,主要有兩個文件和三個目錄:

文件:firewalld.conf、lockdown-whitelist.xml

目錄:zones、services、icmptypes

另外,若是使用到direct,還會有一個direct.xml文件。咱們要注意,在保存默認配置的目錄「/usr/lib/firewalld/」中只有咱們這裏所說的目錄,而沒有firewalld.conf、lockdown-whitelist.xml和direct.xml這三個文件,也就是說這三個文件只存在於「/etc/firewalld/」目錄中。

下面分別來給你們介紹一下這些文件和目錄的做用

firewalld.conf:firewalld的主配置文件,是鍵值對的格式,不過很是簡單,只有五個配置項

    DefaultZone:默認使用的zone,關於zone學生稍後給你們詳細介紹,默認值爲public;

    MinimalMark: 標記的最小值,linux內核會對每一個進入的數據包都進行標記,目的固然是爲了對他們進行區分,好比學生在前面給你們補充iptables五張表相關的內 容時候介紹說符合raw表規則的數據包能夠跳過一些檢查,那麼是怎麼跳過的呢?這裏其實就是使用的標記,固然對數據包的標記還有不少做用。這裏所設置的 MinimalMark值就是標記的最小值,默認值爲100,通常狀況下咱們不須要對其進行修改,可是若是咱們有特殊須要的時候就能夠經過對其進行修改來 告訴linux所使用標記的最小值了,好比咱們須要給符合某條件的數據包標記爲123,這時候爲了防止混淆就須要將MinimalMark設置爲一個大於 123的值了;

    CleanupOnExit:這個配置項很是容易理解,他表示當退出firewalld後是否清除防火牆規則,默認值爲yes;

    Lockdown: 這個選項跟D-BUS接口操做firewalld有關,firewalld可讓別的程序經過D-BUS接口直接操做,當Lockdown設置爲yes的 時候就能夠經過lockdown-whitelist.xml文件來限制都有哪些程序能夠對其進行操做,而當設置爲no的時候就沒有限制了,默認值爲 no;

    IPv6_rpfilter:其功能相似於rp_filter,只不過是針對ipv6版的,其做用是判斷所接受到的包是不是僞造的,檢查方式主要是經過路由表中的路由條目實現的,更多詳細的信息你們能夠搜索uRPF相關的資料,這裏的默認值爲yes。

lockdown-whitelist.xml:當Lockdown爲yes的時候用來限制能夠經過D-BUS接口操做firewalld的程序

direct.xml:經過這個文件能夠直接使用防火牆的過濾規則,這對於熟悉iptables的用戶來講會很是順手,另外也對從原來的iptables到firewalld的遷移提供了一條綠色通道

zones:保存zone配置文件

services:保存service配置文件

icmptypes:保存和icmp類型相關的配置文件

zone firewalld默認提供了九個zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,他們都保存在「/usr/lib /firewalld/zones/」目錄下。這些zone之間是什麼關係?他們分別適用用哪些場景呢?

爲了弄明白這些問題你們須要先明白zone的本質含義。學生在上一節給你們介紹防火牆時說過防火牆就至關於一個門衛,門衛對具體某個來訪的人判斷是否應該放行是依靠規則來判斷的,而咱們這裏的zone其實就是一套規則集,或者說是一套判斷的方案。

理解了這層含義firewalld就容易了,好比上面的九個zone其實就是九種方案,並且起決定做用的實際上是每一個xml文件所包含的內容,而不是 文件名,因此你們不須要對每種zone(每一個文件名)的含義花費過多的精力,好比trusted這個zone會信任全部的數據包,也就是說全部數據包都會 放行,可是public這個zone只會放行其中所配置的服務,其餘的一概不予放行,其實咱們若是將這兩個文件中的內容互換一下他們的規則就換過來了,也 就是public這個zone會放行全部的數據包,下面咱們來看一下這兩個文件的內容

public.xml

<?xml version="1.0" encoding="utf-8"?>

<zone> <short>Public</short> <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description> <service name="ssh"/> <service name="dhcpv6-client"/> </zone>

trust.xml

<?xml version="1.0" encoding="utf-8"?>

<zone target="ACCEPT"> <short>Trusted</short> <description>All network connections are accepted.</description> </zone>

咱們要特別注意trusted.xml中zone的target,就是由於他設置爲了ACCEPT,因此纔會放行全部的數據包,而 public.xml中的zone沒有target屬性,這樣就會默認拒絕經過,因此public這個zone(這種方案)只有其中配置過的服務才能夠通 過。

service service是firewalld中另一個很是重要的概念,不過其含義是很是簡單的。仍是拿門衛的例子來給你們作解釋,在iptables 的時代咱們給門衛下達規則時須要告訴他「全部到22號樓的人所有予以放行」、「全部到80號樓的人所有予以放行」等等,不過到了firewalld的時代 就不須要這樣了,而是能夠直接下達像「到銷售部的所有予以放行」這樣的命令,而後門衛再一查發現銷售部在80號樓,那麼全部到80號樓的人門衛就都會放行 了。咱們這裏的樓牌號和端口號相對應,部門名和服務名相對應,這樣你們應該就能夠理解service的做用了。

從端口號改成服務名主要有兩個好處:首先是使用服務名配置的語義清晰,不容易出錯;其次在對某個服務的端口號進行修改的時候只須要修改相應的 service文件就能夠了,而不須要再修改防火牆方案——zone。這其實跟DNS將ip地址和域名關聯了起來是同樣的道理。

service配置文件 service配置文件的命名規則是<服務名>.xml,好比ssh的配置文件是ssh.xml,http的配置文件是 http.xml等,他們默認保存在「/usr/lib/firewalld/services/」目錄下,常見的服務其中均可以找到,若是咱們想修改某 個服務的配置,那麼能夠複製一份到「/etc/firewalld/services/」目錄下而後進行修改就能夠了,要想恢復默認配置直接將咱們本身的 配置文件刪除就能夠了。咱們來看一下ssh服務的ssh.xml文件

<?xml version="1.0" encoding="utf-8"?>

<service> <short>SSH</short> <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description> <port protocol="tcp" port="22"/> </service> 能夠看到這裏配置了tcp的22號端口,因此將ssh服務配置到所使用的zone(默認public)中後tcp的22號端口就開放了。若是咱們想將ssh的端口修改成222,那麼只須要將ssh.xml複製一份到「/firewalld/services/」中,而後將端口號修改成222就能夠了。固然直接修改「/usr/lib/firewalld/services/」中的配置文件也能夠實現,可是強烈建議不要那麼作,緣由相信你們都明白。

明白原理以後使用起來就能夠很是靈活了,好比咱們將「/etc/firewalld/services/ssh.xml」文件複製一份到「/etc/firewalld/services/」中,而後將名字改成abc.xml,而且將abc這個服務配置到所使用的zone中,這時22端口就會開放。也就是說在zone中所配置的服務其實跟實際的服務並不存在直接聯繫,而是和相應配置文件中配置的內容有關係。 配置方法

firewalld的配置方法主要有三種:firewall-config、firewall-cmd和直接編輯xml文件,其中 firewall-config是圖形化工具,firewall-cmd是命令行工具,而對於linux來講你們應該更習慣使用命令行方式的操做,因此 firewall-config咱們就不給你們介紹了。

相關文章
相關標籤/搜索