Linux防火牆配置(iptables, firewalld)


Linux中的防火牆

RHEL中有幾種防火牆共存:

  • iptables
  • firewalld
  • ip6tables
  • ebtables

這些軟件本身其實並不具備防火牆功能,他們的作用都是在用戶空間中管理和維護規則,只不過規則結構和使用方法不一樣罷了,真正利用規則進行過濾是由內核的netfilter完成的

擴展:整個linux內部結構可以分為三部分,從最底層到最上層依次是:硬件-->內核空間-->用戶空間。

 

CentOS7默認采用的是firewalld管理netfilter子系統,底層調用的仍然是iptables命令。不同的防火牆軟件相互間存在沖突,使用某個時應禁用其他的。

systemctl start/stop/enable/disable/status/is-active xxxx    //systemctl服務管理命令

 

Netfilter 

  netfilter是Linux 2.4內核引入的全新的包過濾引擎。由一些數據包過濾表組成,這些表包含內核用來控制信息包過濾的規則集。iptables等等都是在用戶空間修改過濾表規則的便捷工具。

  netfilter在數據包必須經過且可以讀取規則的位置,共設有5個控制關卡。這5個關卡處的檢查規則分別放在5個規則鏈中(有的叫鈎子函數(hook functions)。也就是說5條鏈對應着數據包傳輸路徑中的5個控制關卡,鏈中的規則會在對應的關卡檢查和處理。任何一個數據包,只要經過本機,必然經過5個鏈中的某個或某幾個。

  • PREROUTING      數據包剛進入網絡接口之后,路由之前,
  • INPUT                數據包從內核流入用戶空間。
  • FORWARD         在內核空間中,從一個網絡接口進入,到另一個網絡接口去。轉發過濾。
  • OUTPUT             數據包從用戶空間流出到內核空間。
  • POSTROUTING   路由后,數據包離開網絡接口前。

  鏈其實就是包含眾多規則的檢查清單,每一條鏈中包含很多規則。當一個數據包到達一個鏈時,系統就會從鏈中第一條規則開始檢查,看該數據包是否滿足規則所定義的條件。如果滿足,系統就會根據該條規則所定義的方法處理該數據包;否則就繼續檢查下一條規則,如果該數據包不符合鏈中任一條規則,系統就會根據該鏈預先定義的默認策略來處理數據包。

 

數據包的傳輸過程

  1. 當一個數據包進入網卡時,它首先進入PREROUTING鏈,內核根據數據包目的IP判斷是否需要轉送出去。
  2. 如果數據包就是進入本機的,它就會沿着圖向下移動,到達INPUT鏈。數據包到了INPUT鏈后,任何進程都會收到它。本機上運行的程序可以發送數據包,這些數據包會經過OUTPUT鏈,然后到達POSTROUTING鏈輸出。
  3. 如果數據包是要轉發出去的,且內核允許轉發,數據包就會如圖所示向右移動,經過FORWARD鏈,然后到達POSTROUTING鏈輸出。

 

  可以看出,剛從網絡接口進入的數據包尚未進行路由決策,還不知道數據要走向哪里,所以進出口處沒辦法實現數據過濾,需要在內核空間設置轉發關卡、進入用戶空間關卡和離開用戶空間關卡。

 

iptables

參考文檔:http://drops.wooyun.org/tips/1424

起源於freeBSD的ipfirewall(內核1.x時代),所有規則都在內核中;2.0x后更名為ipchains,可以定義多條規則並串用;現在叫iptables,使用表組織規則鏈。

iptablses按照用途和使用場合,將5條鏈各自切分到五張不同的表中。也就是說每張表中可以按需要單獨為某些鏈配置規則。例如,mangle表和filter表中都能為INPUT鏈配置規則,當數據包流經INPUT位置(進入用戶空間),這兩個表中INPUT鏈的規則都會用來做過濾檢查。

五張表,每張表側重於不同的功能

  • filter        數據包過濾功能。只涉及INPUT, FORWARD, OUTPUT三條鏈。是iptables命令默認操縱的表。
  • nat          地址轉換功能。NAT轉換只涉及PREROUTING, OUTPUT, POSTOUTING三條鏈。可通過轉發讓局域網機器連接互聯網
  • mangle     數據包修改功能。每條鏈上都可以做修改操作。修改報文元數據,做防火牆標記等。
  • raw          快速通道功能。為了提高效率,優先級最高,符合raw表規則的數據包會跳過一些檢查。
  • security    需要和selinux結合使用,內置規則比較復雜,通常都會被關閉

  iptables還支持自定義規則鏈。自定義的鏈必須和某個特定的鏈關聯起來。可在某個鏈中設定規則,滿足一定條件的數據包跳轉到某個目標鏈處理,目標鏈處理完成后返回當前鏈中繼續處理后續規則。

  因為鏈中規則是從頭到尾依次檢查的,所以規則的次序是非常重要的。越嚴格的規則應該越靠前。

 

iptablse服務管理

service --status-all

復制代碼
service iptables start|stop|restart|status
service iptables save   //定義的所有內容,在重啟時都會失效。調用save命令可以把規則保存到文件/etc/sysconfig/iptables中。 iptables-save //保存規則 iptables-restore //加載規則。開機的時候,會自動加載/etc/sysconfig/iptables iptables-restore < /etc/sysconfig/iptables2 //加載自定義的規則文件 //iptables服務配置文件: /etc/sysconfig/iptables-config //iptables規則文件: /etc/sysconfig/iptables echo "1">/proc/sys/net/ipv4/ip_forward //打開iptables轉發: 
復制代碼

 

iptables命令參考

iptables [-t TABLE] COMMAND [CHAIN] [CRETIRIA]...  [-j  ACTION]

省缺表名為filter。命令中用到的序號(RULENUM)都基於1。

 

COMMAND 命令選項

復制代碼
-A|--append  CHAIN                                 //鏈尾添加新規則 -D|--delete CHAIN [RULENUM] //刪除鏈中規則,按需序號或內容確定要刪除的規則 -I|--insert CHAIN [RULENUM] //在鏈中插入一條新的規則,默認插在開頭 -R|--replace CHAIN RULENUM //替換、修改一條規則,按序號或內容確定 -L|--list [CHAIN [RULENUM]] //列出指定鏈或所有鏈中指定規則或所有規則 -S|--list-urles [CHAIN [RULENUM]] //顯示鏈中規則 -F|--flush [CHAIN] //清空指定鏈或所有鏈中規則 -Z|--zero [CHAIN [RULENUM]] //重置指定鏈或所有鏈的計數器(匹配的數據包數和流量字節數) -N|--new-chain CHAIN //新建自定義規則鏈 -X|--delete-cahin [CHAIN] //刪除指定表中用戶自定義的規則鏈 -E|--rename-chain OLDCHAIN NEWCHAIN //重命名鏈,移動任何引用 -P|-policy CHAIN TARGET //設置鏈的默認策略,數據包未匹配任意一條規則就按此策略處理
復制代碼

 

CRETIRIA 條件匹配  

分為基本匹配和擴展匹配,擴展匹配又分為隱式匹配和顯示匹配

基本匹配

復制代碼
-p|--proto  PROTO                      //按協議匹配,如tcp、udp、icmp,all表示所有協議。 (/etc/protocols中的協議名) -s|--source ADDRESS[/mask]... //按數據包的源地址匹配,可使用IP地址、網絡地址、主機名、域名 -d|--destination ADDRESS[/mask]... //按目標地址匹配,可使用IP地址、網絡地址、主機名、域名 -i|--in-interface INPUTNAME[ +] //按入站接口(網卡)名匹配,+用於通配。如 eth0, eth+ 。一般用在INPUT和PREROUTING鏈 -o|--out-interface OUTPUTNAME[+] //按出站接口(網卡)名匹配,+用於通配。如 eth0, eth+ 。一般用在OUTPUT和POSTROUTING鏈

可使用 ! 可以否定一個子句,如-p !tcp
復制代碼

 

擴展匹配

-m|--match MATCHTYPE  EXTENSIONMATCH...    //擴展匹配,可能加載extension

如: -p tcp  -m tcp  --dport 80

 

隱式擴展匹配(對-p PROTO的擴展,或者說是-p PROTO的附加匹配條件)

-m PROTO 可以省略,所以叫隱式

復制代碼
-m tcp   //-p tcp的擴展     --sport [!]N[:M] //源端口, 服務名、端口、端口范圍。     --dport [!]N[:M] //目標端口,服務名、端口、端口范圍     --tcp-flags CHECKFLAGS FLAGSOFTRUE //TCP標志位:SYN(同步),ACK(應答),RST(重置),FIN(結束),URG(緊急),PSH(強迫推送)。多個標志位逗號分隔。
                         //CHECKFLAGS為要檢查的標志位,FLAGSOFTRUE為必須為1的標志位(其余的應該為0)     --syn //第一次握手。 等效於 --tcpflags syn,ack,fin,rst syn 四個標志中只有syn為1 -m udp //-p udp的擴展     --sport N[-M]     --dport N[-M] -m icmp //隱含條件為-p icmp     --icmp-type N //8:echo-request 0:echo-reply
復制代碼

顯示擴展匹配

復制代碼
-m state
    --state    //連接狀態檢測,NEW,ESTABLISHED,RELATED,INVALID -m multiport     --source-ports PORT[,PORT]...|N:M //多個源端口,多個端口用逗號分隔,     --destination-ports PORT[,PORT]...|N:M //多個目的端口     --ports                      //多個端口,每個包的源端口和目的端口相同才會匹配 -m limit     --limit N/UNIT //速率,如3/minute, 1/s, n/second , n/day     --limit-burst N //峰值速率,如100,表示最大不能超過100個數據包 -m connlimit     --connlimit-above N //多於n個,前面加!取反 -m iprange     --src-range IP-IP     --dst-range IP-IP -m mac     --mac-source //mac地址限制,不能用在OUTPUT和POSTROUTING規則鏈上,因為封包要送到網卡后,才能由網卡驅動程序透過ARP 通訊協議查出目的地的MAC 地址 -m string     --algo [bm|kmp] //匹配算法     --string "PATTERN" //匹配字符模式 -m recent     --name //設定列表名稱,默認為DEFAULT     --rsource //源地址     --rdest //目的地址     --set //添加源地址的包到列表中     --update //每次建立連接都更新列表     --rcheck //檢查地址是否在列表     --seconds //指定時間。必須與--rcheck或--update配合使用     --hitcount //命中次數。必須和--rcheck或--update配合使用     --remove //在列表中刪除地址
-m time
    --timestart h:mm
    --timestop hh:mm
    --days DAYS //Mon,Tue,Wed,Thu,Fri,Sat,Sun; 逗號分隔
-m mark
    --mark N //是否包含標記號N
-m owner
    --uid-owner 500 //用來匹配來自本機的封包,是否為某特定使用者所產生的,可以避免服務器使用root或其它身分將敏感數據傳送出
    --gid-owner O //用來匹配來自本機的封包,是否為某特定使用者群組所產生的
    --pid-owner 78 //用來匹配來自本機的封包,是否為某特定進程所產生的
    --sid-owner 100 //用來匹配來自本機的封包,是否為某特定連接(Session ID)的響應封包
復制代碼

 

ACTION 目標策略(TARGET)

-j|--jump TARGET                //跳轉到目標規則,可能加載target extension -g|--goto CHAIN //跳轉到指定鏈,不再返回
  • ACCEPT             規則驗證通過,不再檢查當前鏈的后續規則,直接跳到下一個規則鏈。
  • DROP                直接丟棄數據包,不給任何回應。中斷過濾。
  • REJECT             拒絕數據包通過,會返回響應信息。中斷過濾。
    • --reject-with  tcp-reset|port-unreachable|echo-reply
  • LOG                  在/var/log/messages文件中記錄日志,然后將數據包傳遞給下一條規則。詳細位置可查看/etc/syslog.conf配置文件
    • --log-prefix "INPUT packets"
  • ULOG                更廣范圍的日志記錄信息
  • QUEUE              防火牆將數據包移交到用戶空間,通過一個內核模塊把包交給本地用戶程序。中斷過濾。
  • RETURN            防火牆停止執行當前鏈中的后續規則,並返回到調用鏈。主要用在自定義鏈中。
  • custom_chain    轉向自定義規則鏈
  • DNAT                目標地址轉換,改變數據包的目標地址。外網訪問內網資源,主要用在PREROUTING。完成后跳到下一個規則鏈
    • --to-destination ADDRESS[-ADDRESS][:PORT[-PORT]]
  • SNAT                源地址轉換,改變數據包的源地址。內網訪問外網資源。主機的IP地址必須是靜態的,主要用在POSTROUTING。完成后跳到下一個規則鏈。
    • --to-source ADDRESS[-ADDRESS][:PORT[-PORT]]
  • MASQUERADE   源地址偽裝,用於主機IP是ISP動態分配的情況,會從網卡讀取主機IP。直接跳到下一個規則鏈。
    • --to-ports 1024-31000
  • REDIRECT        數據包重定向,主要是端口重定向,把包分流。處理完成后繼續匹配其他規則。能會用這個功能來迫使站點上的所有Web流量都通過一個Web高速緩存,比如Squid。
    • --to-ports 8080
  • MARK                 打防火牆標記。繼續匹配規則。
    • --set-mark 2
  • MIRROR           發送包之前交換IP源和目的地址,將數據包返回。中斷過濾。

 

輔助選項

復制代碼
-t|--table TABLE     //指定操作的表,默認的表為filter -n|--numeric //用數字形式顯示地址和端口,顯示主機IP地址而不是主機名 -x|--exact //計數器顯示精確值,不做單位換算 -v|--verbose (x3) //查看規則列表時,顯示更詳細的信息 -line-numbers //查看規則表時,顯示在鏈中的序號 -V|--version -h|--help 
[option] --help //查看特定選項的幫助,如iptables -p icmp --help --fragment -f //match second or further fragments only --modprobe=<command> //try to insert modules using this command --set-counters PKTS BYTES //set the counter during insert/append
復制代碼

 

state  TCP鏈接狀態

  • NEW                 第一次握手,要起始一個連接(重設連接或將連接重導向) 
  • ESTABLISHED   數據包屬於某個已經建立的連接。第二次和第三次握手   (ack=1)
  • INVALID           數據包的連接編號(Session ID)無法辨識或編號不正確。如SYN=1 ACK=1 RST=1   
  • RELATED          表示該封包是屬於某個已經建立的連接,所建立的新連接。如有些服務使用兩個相關的端口,如FTP,21和20端口一去一回,FTP數據傳輸(上傳/下載)還會使用特殊的端口

只允許NEW和ESTABLISHED進,只允許ESTABLISHED出可以阻止反彈式木馬。

 

使用示例

復制代碼
iptables -F           //刪除iptables現有規則 iptables -L [-v[vv] -n] //查看iptables規則 iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT //在INPUT鏈尾添加一條規則 iptables -I INPUT 2 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT //在INPUT鏈中插入為第2條規則 iptables -D INPUT 2 //刪除INPUT鏈中第2條規則 iptables -R INPUT 3 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT //替換修改第三條規則 iptables -P INPUT DROP //設置INPUT鏈的默認策略為DROP //允許遠程主機進行SSH連接 iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT //允許本地主機進行SSH連接 iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INTPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT //允許HTTP請求 iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT //限制ping 192.168.146.3主機的數據包數,平均2/s個,最多不能超過3個 iptables -A INPUT -i eth0 -d 192.168.146.3 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT //限制SSH連接速率(默認策略是DROP) iptables -I INPUT 1 -p tcp --dport 22 -d 192.168.146.3 -m state --state ESTABLISHED -j ACCEPT iptables -I INPUT 2 -p tcp --dport 22 -d 192.168.146.3 -m limit --limit 2/minute --limit-burst 2 -m state --state NEW -j ACCEPT //防止syn攻擊(限制syn的請求速度) iptables -N syn-flood iptables -A INPUT -p tcp --syn -j syn-flood iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN iptables -A syn-flood -j DROP //防止syn攻擊(限制單個ip的最大syn連接數) iptables –A INPUT –i eth0 –p tcp --syn -m connlimit --connlimit-above 15 -j DROP iptables -I INPUT -p tcp -dport 22 -m connlimit --connlimit-above 3 -j DROP //利用recent模塊抵御DOS攻擊 iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH //單個IP最多連接3個會話 Iptables -I INPUT -p tcp --dport 22 -m state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP //只要是新的連接請求,就把它加入到SSH列表中。5分鍾內你的嘗試次數達到3次,就拒絕提供SSH列表中的這個IP服務。被限制5分鍾后即可恢復訪問。  iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP //防止單個IP訪問量過大 iptables –A OUTPUT –m state --state NEW –j DROP //阻止反彈木馬 iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/m -j ACCEPT //防止ping攻擊 //只允許自己ping別人,不允許別人ping自己 iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT //對於127.0.0.1比較特殊,我們需要明確定義它 iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT //SNAT 基於原地址轉換。許多內網用戶通過一個外網 口上網的情況。將我們內網的地址轉換為一個外網的IP,共用外網IP訪問外網資源。 iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.1 //當外網地址不是固定的時候。將外網地址換成 MASQUERADE(動態偽裝):它可以實現自動讀取外網網卡獲取的IP地址。 iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE //DNAT 目標地址轉換。目標地址轉換要做在到達網卡之前進行轉換,所以要做在PREROUTING這個位置上 iptables -t nat -A PREROUTING -d 192.168.10.18 -p tcp --dport 80 -j DNAT --to-destination 172.16.100.2
復制代碼

 

 

 

firewalld

dynamic firewall daemon。支持ipv4和ipv6。Centos7中默認將防火牆從iptables升級為了firewalld。firewalld相對於iptables主要的優點有:

  • firewalld可以動態修改單條規則,而不需要像iptables那樣,在修改了規則后必須得全部刷新才可以生效;
  • firewalld在使用上要比iptables人性化很多,即使不明白“五張表五條鏈”而且對TCP/IP協議也不理解也可以實現大部分功能。  

1.firewalld的主要概念

1.1.過濾規則集合:zone

  • 一個zone就是一套過濾規則,數據包必須要經過某個zone才能入站或出站。不同zone中規則粒度粗細、安全強度都不盡相同。可以把zone看作是一個個出站或入站必須經過的安檢門,有的嚴格、有的寬松、有的檢查的細致、有的檢查的粗略。
  • 每個zone單獨對應一個xml配置文件,文件名為<zone名稱>.xml。自定義zone只需要添加一個<zone名稱>.xml文件,然后在其中添加過濾規則即可。
  • 每個zone都有一個默認的處理行為,包括:default(省缺),   ACCEPT,   %%REJECT%%,  DROP 
  • firewalld提供了9個zone:
    • drop        任何流入的包都被丟棄,不做任何響應。只允許流出的數據包。
    • block    任何流入的包都被拒絕,返回icmp-host-prohibited報文(ipv4)或icmp6-adm-prohibited報文(ipv6)。只允許由該系統初始化的網絡連接
    • public     默認的zone。部分公開,不信任網絡中其他計算機,只放行特定服務。 
    • external    只允許選中的服務通過,用在路由器等啟用偽裝的外部網絡。認為網路中其他計算器不可信。
    • dmz         允許隔離區(dmz)中的電腦有限的被外界網絡訪問,只允許選中的服務通過。
    • work          用在工作網絡。你信任網絡中的大多數計算機不會影響你的計算機,只允許選中的服務通過。
    • home        用在家庭網絡。信任網絡中的大多數計算機,只允許選中的服務通過。
    • internal     用在內部網絡。信任網絡中的大多數計算機,只允許選中的服務通過。
    • trusted     允許所有網絡連接,即使沒有開放任何服務,那么使用此zone的流量照樣通過(一路綠燈)。

  

zone配置文件示例:public.xml

復制代碼
<?xml version="1.0" encoding="utf-8"?> <zone target="default"> <short>Public</short> <description>For use in public areas...</description> <service name="ssh"/> <service name="dhcpv6-client"/> </zone>
復制代碼

 

1.2.service

  • 一個service中可以配置特定的端口(將端口和service的名字關聯)。zone中加入service規則就等效於直接加入了port規則,但是使用service更容易管理和理解。
  • 定義service的方式:添加<service名稱>.xml文件,在其中加入要關聯的端口即可。

service示例:ssh.xml

復制代碼
<?xml version="1.0" encoding="utf-8"?> <service> <short>SSH</short> <description>Secure Shell (SSH)...</description> <port protocol="tcp" port="22"/> </service>
復制代碼

 

1.3.過濾規則

  • source             根據數據包源地址過濾,相同的source只能在一個zone中配置。
  • interface          根據接收數據包的網卡過濾
  • service             根據服務名過濾(實際是查找服務關聯的端口,根據端口過濾),一個service可以配置到多個zone中。
  • port                 根據端口過濾
  • icmp-block        icmp報文過濾,可按照icmp類型設置
  • masquerade      ip地址偽裝,即將接收到的請求的源地址設置為轉發請求網卡的地址(路由器的工作原理)。
  • forward-port      端口轉發
  • rule                  自定義規則,與itables配置接近。rule結合--timeout可以實現一些有用的功能,比如可以寫個自動化腳本,發現異常連接時添加一條rule將相應地址drop掉,並使用--timeout設置時間段,過了之后再自動開放。

 

 1.4.過濾規則優先級

  1. source               源地址
  2. interface            接收請求的網卡
  3. firewalld.conf中配置的默認zone

 

2.firewalld配置文件

2.1.firewalld配置方式

  • firewall-config       GUI工具
  • firewall-cmd         命令行工具
  • 直接編輯xml文件    編輯后還需要reload才生效

 

2.2.firewall-cmd命令

復制代碼
firewall-cmd --version
firewall-cmd --help firewall-cmd --state //查看firewalld服務狀態 firewall-cmd --reload //修改配置文件后,動態加載,不會斷開連接。 firewall-cmd --complete-reload //完全重新加載看,會斷開連接。類似重啟。 firewall-cmd --panic-on/--panic-off/--query-panic //panic模式開啟/關閉/查詢。panic模式會丟棄所有出入站的數據包,一段時間后所有連接都會超時中斷。 firewall-cmd --get-active-zones //查看所有綁定了source, interface和默認的zone,以及各個zone的生效條件。 firewall-cmd --set-default-zone=ZONE //設置默認的zone,也可以修改firewalld.conf中的DefaultZone選項。 
firewall-cmd --zone=xxxx --list-all
//反向查詢: 根據source或interface查詢對應的zone firewall-cmd --get-zone-of-interface=interface firewall-cmd --get-zone-of-source=source[/mask]
//更多用法在后面列出......
復制代碼

 

部分命令共同的參數說明:

  • --zone=ZONE              指定命令作用的zone,省缺的話命令作用於默認zone
  • --permanent               有此參數表示命令只是修改配置文件,需要reload才能生效;無此參數則立即在當前運行的實例中生效,不過不會改動配置文件,重啟firewalld服務就沒效果了。
  • --timeout=seconds      表示命令效果持續時間,到期后自動移除,不能和--permanent同時使用。例如因調試的需要加了某項配置,到時間自動移除了,不需要再回來手動刪除。也可在出現異常情況時加入特定規則,過一段時間自動解除。    

 

2.3.配置文件存儲位置

firewalld的配置文件以xml為主(主配置文件firewalld.conf除外),有兩個存儲位置:

  • /etc/firewalld/              存放修改過的配置(優先查找,找不到再找默認的配置)
  • /usr/lib/firewalld/         默認的配置

修改配置的話只需要將/usr/lib/firewalld中的配置文件復制到/etc/firewalld中修改。恢復配置的話直接刪除/etc/firewalld中的配置文件即可。

 

2.4.配置文件結構

  • firewalld.conf                       主配置文件,鍵值對格式
    • DefaultZone         默認使用的zone,默認值為public
    • MinimalMark        標記的最小值,默認為100
    • CleanupOnExit     退出firewalld后是否清除防火牆規則,默認為yes
    • Lockdown            是否其他程序允許通過D-BUS接口操作,使用lockdown-whitelist.xml限制程序,默認為no
    • IPv6_rpfilter         類似rp_filter,判斷接收的包是否是偽造的(通過路由表中的路由條目,查找uRPF),默認為yes     
  • lockdown-whitelist.xml
  • direct.xml                           direct功能,直接使用防火牆的過濾規則,便於iptables的遷移
  • zones/                                zone配置文件
  • services/                             service配置文件
  • icmptypes/                          icmp類型相關的配置文件

 

2.5.zone文件中配置規則

復制代碼
<?xml version="1.0" encoding="utf-8"?> <zone target="default"> <!--target屬性為zone的默認處理行為,可選值:default(省缺), ACCEPT, %%REJECT%%, DROP --> <short>Demo</short> <description>demo...</description> <source address="address[/mask]"> <interface name="ifcfg-em1"/> <!--也可在網卡配置文件ifcfg-*中配置,只需要加入 ZONE=public --> <service name="ssh"/> <port port="portid[-portid]" protocol="tcp|udp"/> <icmp-block name="echo-request"/> <!--ping報文--> <masquerade/> <forward-port port="portid[-portid]" protocol="tcp|udp" [to-port="portid[-portid]"] [to-addr="ipv4address"]/> <rule [family="ipv4|ipv6"]> [ <source address="address[/mask]" [invert="bool"]/> ] [ <destination address="address[/mask]" [invert="bool"]/> ] [ <service name="string"/> | <port port="portid[-portid]" protocol="tcp|udp"/> | <protocol value="protocol"/> | <icmp-block name="icmptype"/> | <masquerade/> | <forward-port port="portid[-portid]" protocol="tcp|udp" [to-port="portid[-portid]"] [to-addr="address"]/> ] [ <log [prefix="prefixtext"] [level="emerg|alert|crit|err|warn|notice|info|debug"]/> [<limit value="rate/duration"/>] </log> ] [ <audit> [<limit value="rate/duration"/>] </audit> ] [ <accept/> | <reject [type="rejecttype"]/> | <drop/> ] </rule> </zone>
復制代碼

 

 

2.6.使用firewall-cmd配置規則

復制代碼
//zone的默認的行為 firewall-cmd --permanent [--zone=zone] --get-target firewall-cmd --permanent [--zone=zone] --set-target=target //配置source,相同的source只能在一個zone中配置,否則會提示Error: ZONE_CONFLICT  firewall-cmd [--permanent] [--zone=zone] --list-sources //顯示綁定的source firewall-cmd [--permanent] [--zone=zone] --query-source=source[/mask] //查詢是否綁定了source firewall-cmd [--permanent] [--zone=zone] --add-source=source[/mask] //綁定source,如果已有綁定則取消。 firewall-cmd [--zone=zone] --change-source=source[/mask] //修改source,如果原來未綁定則添加綁定。 firewall-cmd [--permanent] [--zone=zone] --remove-source=source[/mask] //刪除綁定 //interface 如eth0, 也可以在網卡配置文件ifcfg-*中加入 ZONE=ZONE名 firewall-cmd [--permanent] [--zone=zone] --list-interfaces firewall-cmd [--permanent] [--zone=zone] --add-interface=interface firewall-cmd [--zone=zone] --change-interface=interface firewall-cmd [--permanent] [--zone=zone] --query-interface=interface firewall-cmd [--permanent] [--zone=zone] --remove-interface=interface //service firewall-cmd [--permanent] [--zone=zone] --list-services firewall-cmd [--permanent] [--zone=zone] --add-service=service [--timeout=seconds] firewall-cmd [--permanent] [--zone=zone] --remove-service=service firewall-cmd [--permanent] [--zone=zone] --query-service=service //port firewall-cmd [--permanent] [--zone=zone] --list-ports firewall-cmd [--permanent] [--zone=zone] --add-port=portid[-portid]/protocol [--timeout=seconds] firewall-cmd [--permanent] [--zone=zone] --remove-port=portid[-portid]/protocol firewall-cmd [--permanent] [--zone=zone] --query-port=portid[-portid]/protocol //icmp-block, 默認允許所有ICMP通過
firewall-cmd --get-icmptypes //查看所有支持的ICMP類型:
                // destination-unreachable echo-reply echo-request parameter-problemr-solicitation source-quench time-exceeded
firewall-cmd [--permanent] [--zone=zone] --list-icmp-blocks firewall-cmd [--permanent] [--zone=zone] --add-icmp-block=icmptype [--timeout=seconds] firewall-cmd [--permanent] [--zone=zone] --remove-icmp-block=icmptype firewall-cmd [--permanent] [--zone=zone] --query-icmp-block=icmptype //masquerade firewall-cmd [--permanent] [--zone=zone] --add-masquerade [--timeout=seconds] firewall-cmd [--permanent] [--zone=zone] --remove-masquerade firewall-cmd [--permanent] [--zone=zone] --query-masquerade //端口轉發 firewall-cmd [--permanent] [--zone=zone] --list-forward-ports firewall-cmd [--permanent] [--zone=zone] --add-forward-port=port=PORT[-PORT]:proto=PROTOCAL[:toport=PORT[-PORT]][:toaddr=ADDRESS[/MASK]][--timeout=SECONDS] firewall-cmd [--permanent] [--zone=zone] --remove-forward-port=port=PORT[-PORT]:proto=PROTOCAL[:toport=PORT[-PORT]][:toaddr=ADDRESS[/MASK]] firewall-cmd [--permanent] [--zone=zone] --query-forward-port=port=PORT[-PORT]:proto=PROTOCAL[:toport=PORT[-PORT]][:toaddr=ADDRESS[/MASK]] //rule規則, 'rule'是將xml配置中的<和/>符號去掉后的字符串,如 'rule family="ipv4" source address="1.2.3.4" drop' firewall-cmd [--permanent] [--zone=zone] --list-rich-rules firewall-cmd [--permanent] [--zone=zone] --add-rich-rule='rule' [--timeout=seconds] firewall-cmd [--permanent] [--zone=zone] --remove-rich-rule='rule' firewall-cmd [--permanent] [--zone=zone] --query-rich-rule='rule'
復制代碼

 

 

 

參考文檔

http://drops.wooyun.org/tips/1424

http://blog.chinaunix.net/uid-26000296-id-4111127.html

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html#sec-Introduction_to_firewalld

http://blog.chinaunix.net/uid-26495963-id-3279216.html

http://www.linuxso.com/linuxpeixun/10332.html

http://www.cnblogs.com/excelib/p/5155951.html

http://www.cnblogs.com/excelib/p/5150647.html

http://www.cnblogs.com/Anker/p/3269106.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM