顯示具有 系統操作::網路設定 標籤的文章。 顯示所有文章
顯示具有 系統操作::網路設定 標籤的文章。 顯示所有文章

2015年12月17日 星期四

RHEL7 防火牆設定

firewalld 服務概觀
  • RHEL7 預設使用 firewalld 服務管理主機層級的防火牆服務

  • firewalld 管理核心的 netfilter 功能,下轄三個指令與服務:
    • iptables
    • ip6tables
    • ebtables

    ※PS:以上三種服務會互相干擾,須要使用 systemctl mask 指令來隔開!

  • firewalld 區分所有的流量進到 zone (區域)裡面,而每個 zone 裡面,均有不同的 rule (規則)!

  • firewalld 區分進來的封包該進到哪一個 zone,其運作邏輯如下列順序:
    1. 若進來的封包,其來源位址符合某一 zone 內的某一針對來源位址所設定的規則,則該封包將被繞送經過該 zone !
    2. 若接受封包進來的介面符合某一 zone 內所設定的過濾器,則使用該 zone 進行封包過濾!
    3. 其他狀況,使用 Default Zone !! 通常 Default Zone 名為 public ,但管理者可指定其他的 zone 為 Default Zone!

  • firewalld 預設的 zone:
    名稱 預設內容
    trusted 允許所有進入的流量
    home 退回進入的流量!除了與出去的流量相關封包,或是 ssh, mdns, ipp-client, samba-client, 或者 dhcpv6-client 等預設的服務!
    internal 退回進入的流量!除了與出去的流量相關封包,或是 ssh, mdns, ipp-client, samba-client, 或者 dhcpv6-client 等預設的服務!(預設值與home相同!)
    work 退回進入的流量!除了與出去的流量相關封包,或是 ssh, ipp-client, 或者 dhcpv6-client 等預設的服務!
    public 退回進入的流量!除了與出去的流量相關封包,或是 ssh, 或者 dhcpv6-client 等預設的服務!為所有新增網路卡介面的 Default Zone!
    external 退回進入的流量!除了與出去的流量相關封包,或是 ssh 等預設的服務!要出去的 IPv4 流量封包被轉到這裡,將會進行 IP 來源位置的偽裝!
    dmz 退回進入的流量!除了與出去的流量相關封包,或是 ssh 等預設的服務!
    block 退回所有進入的流量!除了與出去的流量相關封包!
    drop 排除所有進入的流量!除了與出去的流量相關封包!

管理 firewalld 服務
  • 管理 firewalld 有下列三種方式:
    1. 使用 firewall-cmd 文字指令!
    2. 使用 firewall-config 圖形介面!
    3. 使用 /etc/firewalld/ 目錄下的檔案!

  • 當 firewalld 套件被安裝好之後, firewall-cmd 即已經存在!

  • 參數使用須知:
    • 使用的參數中,如未指定 --permanent,則預設會是 runtime 狀態!如未指定 zone 名稱,則所有規則,將用在 public zone 上!
    • 如果使用 --permanent 參數後,要立即生效,則必須下 firewall-cmd --reload 指令,重新導入規則內容!
    • 如果只是暫時使用的規則,可以設定 --timeout= 參數!時間到,自動移除!

  • 常用參數列表:
    參數名稱 內容說明
    --get-default-zone
    --set-default-zone=
    --get-zones 列出所有的 zone !!
    --get-services 列出所有預設的服務!
    --get-active-zones 列出所有正在使用中的 zone ,連同介面以及來源資訊!
    --add-source= [--zone=] 繞送由該 IP address 或 network/netmask 進來的封包,進入指定的 zone !!
    --remove-source= [--zone=] 移除由上項新增的規則!
    --add-interface= [--zone=] 繞送由該介面進來的封包,進入指定的 zone !!
    --change-interface= [--zone=] 將上項新增的規則,更換指定的 zone !!
    --list-all [--zone=] 列出某一 zone 內所有的介面、來源設定、服務設定以及 ports 的設定!
    --list-all-zones 列出所有 zone 內所有的介面、來源設定、服務設定以及 ports 的設定!
    --add-service= [--zone=] 允許流量進入該服務
    --remove-service= [--zone=] 移除由上項新增的規則!
    --add-port= [--zone=] 允許流量進入該埠!協定可以是 tcp、udp、icmp 等等
    --remove-port= [--zone=] 移除由上項新增的規則!

  • 範例:
    • # firewall-cmd --set-default-zone=dmz
    • # firewall-cmd --permanent --zone=internal --add-source=192.168.0.0/24
    • # firewall-cmd --permanent --zone=internal --add-service=mysql
    • # firewall-cmd --reload

  • firewalld 設定目錄:
    • /etc/firewalld
    • /usr/lib/firewalld
    • 若兩目錄內有相同檔案名稱,將只使用 /etc/firewalld 目錄內的檔案!

使用 firewalld 客製化規則

  • 管理員還有其他兩項方式,可以滿足管理防火牆的需求:direct rules 以及 rich rules !!

  • Direct Rules
    • 允許管理員直接手動寫 {ip,ip6,eb}tables 規則到 firewalld 所管理的防火牆內容中!
    • 但當強力的規則無法出現在規則列表中,這些規則將很難管理!
    • Direct Rules 的使用彈性比起標準的規則或是 Rich Rules,都是比較差的!
    • Direct Rules 只要不是嵌入在 zone 內,就會在 firewalld 規則之前被導入引用!
    • 範例:
      # firewall-cmd --direct --permanent --add-chain ipv4 raw blacklist
      # firewall-cmd --direct --permanent --add-rule ipv4 raw PREROUTING 0 -s 192.168.1.0/24 -j blacklist
      # firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 0 -m limit --limit 1/min -j LOG --log-prefix "blacklisted "
      # firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 1 -j DROP

  • Rich Rules
    • Rich Rules 給予管理員一種撰寫防火牆規則的方式!而該方式是無法用基本防火牆的語法來達成。
    • 語法上,不僅可以使用基本的允許/拒絕功能,還可以使用記錄、製作port 轉向、IP 偽裝、或是速率上的限制!
    • 基本語法:
      rule
        [source] 
        [destination]
        service|port|protocol|icmp-block|masquerade|forward-port
        [log]
        [audit]
        [accept|reject|drop]

    • 設定格式:rule option=value
      • family=ipv4 | ipv6
      • source | destination address=<CIDR>
      • service name=http | ftp ...| <SERVICE_NAME>
      • port port=<PORT NUMBER>
      • protocol=tcp | udp |...

    • 規則判斷順序:每個 zone 內的判斷順序均相同!
      1. 為該 zone 所設定的任何 port 轉換與偽裝規則!
      2. 針對該 zone 所設定的記錄規則!
      3. 為該 zone 所設定的允許規則!
      4. 為該 zone 所設定的拒絕規則!
    • 如果有封包不符合任何 zone 內的任何規則,將該封包將會被拒絕!
    • Rich Rules 配合 firewall-cmd 指令的常用參數:
      參數名稱 內容說明
      --add-rich-rule='<RULE>' 新增<RULE>到指定的 zone 內!
      --remove-rich-rule='<RULE>' 移除指定 zone 內的<RULE>!
      --query-rich-rule='<RULE>' 查詢指定 zone 內的<RULE>!
      --list-rich-rule='<RULE>' 列出指定 zone 內的所有<RULE>!

    • 範例:
      # firewall-cmd --permanent --zone=classroom --add-rich-rule='rule family=ipv4 source address=192.168.1.111/32 reject'
      # firewall-cmd --add-rich-rule='rule service name=ftp limit value=2/m accept'
      # firewall-cmd --permanent --add-rich-rule='rule protocol value=esp drop'
      # firewall-cmd --permanent --zone=vnc --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=7900-7905 protocol=tcp accept

  • Rich Rule 的使用記錄
    • 使用 syslogd :
      # log [prefix="<PREFIX TEXT>"] [level=<LOGLEVEL>] [limit value="<RATE/DURATION>"]

    • 使用 auditd :

    • 可以做限制,避免檔案空間被塞滿!



使用 firewalld 網路 NAT 功能

  • 練習:把 4321 port 轉到 80 port (只針對 192.168.1.0/24 網段)
    # firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.1.0/24 forward-port port=4321 protocol=tcp to-port=80'

管理 SELinux Port 標籤

2015年12月3日 星期四

RHEL7 網路指令

RHEL 7 的網路設定:使用 NetworkManager 套件

  • 網路卡名稱:
    1. 網卡類型:
      • en : Ethernet 網路卡
      • wl : Wireless (WiFi)網路卡
      • ww : Wireless WAN 網路卡(3G、4G LTE) 
    2. 插槽名稱:
      • o : on-board 網路卡
      • s : 可熱抽拔插槽 (slot)
      • p : PCI 插槽配置位置 
    3. 順序號碼:
      • 通常從 0 開始數起,但是嵌在主機板上的 on-board 裝置則是從 1 開始!
  • 例1: enp0s2 : 在第一個 PCI 位置上第三個插槽上的乙太網路卡!
    例2: eno1 : 第一個on-board 的網路卡
    ※PS:如有安裝 biosdevname 套件,或是設定 udev 客製化名字,可改變網路卡名稱!

  • 網路設定相關檔案:
    1. 網路設定檔儲放目錄:/etc/sysconfig/network-scripts
    2. 設定檔 ifcfg-xxxx
      • BOOTPROTO=none | static | dhcp
      • IPADDR0=192.168.1.5
      • PREFIX0=24
      • GATEWAY0=192.168.1.254
      • DEFROUTE=yes
      • DNS1=8.8.8.8
      • DEVICE=eth0
      • NAME="System eth0"

  • 網路設定相關指令:
    1. Gnome 圖形介面設定:
    2. nmtui 指令:文字模式下的選單操作介面
    3. nmcli 指令:標準文字操作指令
      <顯示、查詢方式>
      • #nmcli con show :顯示所有網路介面清單!
        --active :只顯示活(啟)動中的網路介面!
        "enp0s2" :顯示指定介面所有相關的設定參數!
      • #nmcli dev status :顯示網路介面卡硬體連線狀態!
        "enp0s2" :顯示指定介面所有相關的硬體設定參數!

      <新增網路連結方式>
      例:新增一個網路連結(需要先有網路卡)
      1. #nmcli con add con-name "default" type ethernet ifname eth0
        表示新增一網路連結,名為:"default",使用 eth0 乙太網路卡,IP 位址使用DHCP模式!

      2. #nmcli con add con-name "static" ifname eth0 autoconnect no type ethernet ip4 192.168.1.10/24 gw4 192.168.1.254
        表示新增一網路連結,名為:"static",使用 eth0 乙太網路卡自動連結網路!IP 位址是 192.168.1.10,預設閘道為 192.168.1.254,不使用DHCP模式!

      3. #nmcli con up "default" :表示啟動 "default" 這個網路連結!(會進行 DHCP 運作)

      4. #nmcli con up "static" :表示啟動 "static" 這個網路連結!

      ※PS:在相同介面下,如果靜態連結啟動失敗,則將會轉換成自動連結狀態!如果想取消這種運作模式,請使用 #nmcli dev disconnect eth0!
      ※PS:查詢相關參數方式 #nmcli con add help !

    4. <修改網路連結方式>
      1. #nmcli con mod "static" connection.autoconnect no
        關閉自動連結!
      2. #nmcli con mod "static" ipv4.dns 192.168.1.10
        指定 DNS Server!
      3. #nmcli con mod "static" +ipv4.dns 192.168.1.100
        利用+/- 符號來增加、減少設定!
      4. #nmcli con mod "static" ipv4.addresses "192.168.1.5/24 8.8.8.8"
        取代原來的IP、Gateway 設定值!
      5. #nmcli con mod "static" +ipv4.addresses 10.1.1.1
        追加一個新的 IP位址,但沒有設定 Gateway !!
      ※PS:記得修改完後,請使用 #nmcli con up "static"

    <nmcli 指令總結>
    指令名稱說 明
    nmcli dev status
    nmcli con show
    nmcli con up "connection ID"
    nmcli con down "connection ID"
    nmcli dev dis "device name"
    nmcli net off
    nmcli con add ...
    nmcli con mod "connection ID"
    nmcli con del "connection ID"

  • 網路測試相關指令:
    1. ip 指令
      • #ip address show eth0:顯示網卡 eth0 的 IP 位址。
      • #ip -s link show eth0:顯示網卡 eth0 MAC層的相關資料,並統計傳送(Tx)與接收(Rx)封包數量、大小等相關訊息。
      • #ip route:顯示目前網路的路由設定。

    2. ping 指令
      • #ping -c3 192.168.1.5 :表示要送 ICMP 封包三次給指定的 IP!

    3. traceroute、tracepath 指令
      • #tracepath access.redhat.com :表示要追踪到指定站台之間,所經過的IP或是介面名稱!
        -I:指定用 ICMP 封包送!
        -T:指定用 TCP 封包送!
        不指定,表示使用 UDP 封包!

    4. ss 指令:類似 netstat 指令
      • #ss -ta :表示顯示本機 socket 的統計!可顯示、統計網路 IP 位址與對應 port 的連線情形!
        參 數說明
        -n 以數字來取代介面名稱與 port 號!
        -t 顯示使用 TCP 的 socket !
        -u 顯示使用 UDP 的 socket !
        -l 只顯示監聽中的 socket !
        -a 顯示所有的 socket !
        -p 顯示 socket 執行序的 ID 號碼!

2015年11月10日 星期二

網路設定方式

RHEL 7 網路設定方式:
  1. 圖形介面
    •  應用程式-->系統工具-->設定值-->網路
  2. 文字介面
    •  # nmtui-edit
  3. 檔案設定
    •  /etc/hostname
      • test.example.com
    •  /etc/resolv.conf
      • nameserver 168.95.1.1
    •  /etc/sysconfig/network-scripts/ifcfg-XXXX
      • IPADDR=192.168.1.10
      • GATEWAY=192.168.1.254
      • PREFIX=24