1. 程式人生 > >Linux從入門到精通——firewalld和iptables

Linux從入門到精通——firewalld和iptables

pan xml文件 reload lin ron 啟用 state 包含 conf

####firewalld和iptables###

防火墻是內核上的一個插件

火墻有兩種:firewalld 和 iptables
都通過iptables往內核寫入數據
      技術分享圖片

一.firewalld

firewall域:
trusted home internal work public external dmz block drop
      技術分享圖片

1.關於iptables

yum install iptables
systemctl stop firewalld ##關閉火墻
systemctl mask firewalld.service ##凍結火墻

iptables -nL ##查看服務情況,顯示策略
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22

REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target prot opt source destination


2.火墻的使用



systemctl stop iptables.service    ##關閉iptables
systemctl mask iptables.service ##凍結iptables
systemctl unmask firewalld.service ##解凍firewalld
systemctl start firewalld.service ##開啟firewalld
      技術分享圖片

cmd命令:
firewall-cmd --state ##查看火墻運行狀態
firewall-cmd --get-active-zones ##查看正在使用的區域
firewall-cmd --get-default-zone ##查看當前默認區域
firewall-cmd --get-zones ##查看所有可使用區域
firewall-cmd --zone=public --list-all ##查看public域的允許的服務和開啟的端口以及地址偽裝功能的狀態,和一些策略
firewall-cmd --get-services ##查看所有能設定的服務
firewall-cmd --list-all-zones ##查看所有區域的所有服務和端口
firewall-cmd --set-default-zone=dmz ##設定當前默認區域為非軍事區
      技術分享圖片

      技術分享圖片

      技術分享圖片

      技術分享圖片

指定區域針對網段和設備進行操作:
firewall-cmd --permanent --zone=internal --add-source=172.25.254.110 ##指定110的默認域為internal,並永久保存
firewall-cmd --permanent --zone=internal --remove-source=172.25.254.110 ##將指定的110的域刪除
firewall-cmd --permanent --zone=internal --add-internal=eth0
##指定eth0這個端口的域為internal
firewall-cmd --permanent --zone=internal --change-public=eth0
##更改eth0這個端口的域為public
firewall-cmd --permanent --zone=internal --remove-interface=eth0
##刪除eth0這個端口的域
      技術分享圖片

      技術分享圖片

指定區域針對服務和端口域進行操作:
firewall-cmd --permanent --zone=public --add-service=http
##在publlic域中永久設定添加http服務
firewall-cmd --permanent --zone=public --remove-service=http
firewall-cmd --zone=public --list-ports
##列出public所有端口
firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --permanent --zone=public --remove-port=8080/tcp
      技術分享圖片

註意:加--permanent參數的要使設定生效需要重新加載火墻
firewall-cmd --reload


/etc/firewalld/zones
可以在該目錄中修改對應區域名.xml文件,來添加或刪除服務,編輯完後要重啟服務或重加載

/lib/firewalld/services
現在默認的firewalld域,系統會將etc下的默認域的文件,移動到lib下執行

想要更改或添加服務要在etc下的文件裏面改,這個是永久的;用命令添加的是暫時的,想要永久要加 --permanent,並且重啟服務

firewall-cmd --reload ##重新加載,但是如果有程序正在運行,也不會阻止程序運行
firewall-cmd --complete-reload ##比較強制重新加載,但是如果有程序正在運行,就會立即阻止程序運行

3.directory rules

通過firewall-cmd工具,可以使用--direct選項在運行時間裏增加或者移除鏈。
三表五鏈
訪問本機的數據,經過內核的數據filter
不經過本機內核的東西,數據轉換nat
包含所有數據(前兩個所有數據)等到前兩個表格不夠用的時候才使用mangle

firewall-cmd --direct --get-all-rules ##獲取全部的鏈
firewall-cmd --direct --add-rule ipv4 filter INPUT 2 -s 172.25.254.110 -p tcp --dport 22 -j ACCEPT ##添加一條鏈在filter的INPUT的下面,設定源110訪問22端口時是允許的
firewall-cmd --direct --add-rule ipv4 filter INPUT 2 ! -s 172.25.254.110 -p tcp --dport 22 -j ACCEPT ##添加一條鏈在filter的INPUT的下面,設定除了源110以外的所有源訪問22端口時是允許的
firewall-cmd --direct --remove-rule ipv4 filter INPUT 2 -s 172.25.254.110 -p tcp --dport 22 -j ACCEPT
firewall-cmd --direct --remove-rule ipv4 filter INPUT 2 ! -s 172.25.254.110 -p tcp --dport 22 -j ACCEPT
      技術分享圖片

      技術分享圖片

4.icmp-block

用這個命令阻絕一個或者多個ICMP類型。ICMP類型是firewalld支持的ICMP類型之一。比如 ping 172.25.254.110 就是用的ICMP

firewall-cmd --get-icmptypes ##查看icmp含有的命令
firewall-cmd --add-icmp-block=destination-unreachale ##ping不通該主機的ip
firewall-cmd --add-icmp-block=echo-request ##ping不了
firewall-cmd --add-icmp-block=echo-request --timeout=5 ##剛開始ping不通,5秒以後就能ping通

5.地址偽裝與源地址轉換

firewall-cmd --add-masquerade ##開啟地址偽裝功能
      技術分享圖片

firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.10 ##所有通過22端口訪問110主機,都會被轉到10這個主機上面
      技術分享圖片

      技術分享圖片

firewall-cmd --add-rich-rule="rule family=ipv4 source address=172.25.254.100 masquerade" ##ip隱藏,比如說就是我的ip是10,我通過110這個主機的去連接100這臺主機,在100這臺主機上用 w -i 命令查看到的ip是110的,而不是10的
      技術分享圖片

6.路由器功能 masquerade

兩個在不同網絡區域內的電腦,比如192想要ping通172這個網段的,需要通過一個路由器做一次地址轉換

測試前:
(1)用desktop當作路由器
要開通地址偽裝功能,還需i要兩塊虛擬網卡,設定兩個虛擬網卡的ip,一個為192的,另一個為172的。
(2)用server當作測試主機
修改server的ip為192的,並修改網關為192的
systemctl restart network
route -n ##查看網關是否添加成功

測試:
(1)用server剛開始的時候ping 172是ping不通的
(2)在desktop裏面
firewall-cmd --permanent --add-masquerade ##開啟地址偽裝功能
sysctl -a | grep forward ##查看一些功能是否開啟
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
net.ipv4.ip_forward = 1
firewall-cmd --reload
      技術分享圖片

二.iptables

1.iptables的啟用
systemctl stop firewalld
systemctl mask firewalld ##凍結firewalld
systemctl start iptables ##如果顯示凍結,用unmask先打開
systemctl unmask iptables
systemctl start iptables
      技術分享圖片

2.iptables的應用
iptables -nL ##查看所有表的情況
iptables -t nat -nL ##查看nat表的情況
iptables -F ##刷新策略(僅清空鏈中規則)
iptables -N redhat ##添加自定義鏈名
iptables -D redhat ##刪除自定義鏈下的策略
iptables -X redhat ##刪除自定義鏈
iptables -E rehdat ##修改名稱
iptables --state ##查看狀態
iptables -i lo ##設置端口進來
iptables -o eth0 ##設置從網絡接口eth0出去
iptables -s ##source 來源
iptables -A ##增加
iptables -I ##插入 某一鏈表的第幾行
iptables -R ##替換
iptables -P ##修改默認

      技術分享圖片

3.重新寫入策略(數據優化)

(1)清空原有策略,並添加新的策略並保存
vim /etc/sysconfig/iptables ##策略存放的路徑
iptables -F ##(清空)刷新原有的策略
cat /etc/sysconfig/iptables ##查看後發現,原有策略被清空
      技術分享圖片

      技術分享圖片

(2)加入新的策略
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state new -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state new -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state new -p tcp --dport 53 -j ACCEPT
iptables -nL ##查看新添加的策略
service iptables save ##保存添加的策略
iptables -nL ##新策略添加成功
cat /etc/sysconfig/iptables ##查看策略

      技術分享圖片

      技術分享圖片

Linux從入門到精通——firewalld和iptables