iptables firewall

iptables防火牆應用

一、iptables防火牆基礎;

1.概述:保護內部主機和內部網絡的安全,通過過濾的方式對網絡層的ip地址和端口進行處理;
2.瞭解防火牆:
硬件防火牆:ASA
軟件防火牆:iptables(linux平臺)、ISA(windows自帶的)
3.iptables防火牆結構:
netfilter內核模塊、iptables用戶工具、firewall用戶工具
4.iptables的表:按照不同功能來劃分;
raw(狀態跟蹤)、mangle(標記)、nat(修改)、filter(過濾)
raw:主要是爲了提高效率使用的,raw本身的含義是指“原生的”、“未經過加工 的”,符合raw表所對應規則的數據包將會跳過一些檢查,這樣就可以提高效率;
mangle:mangle表的規則可以對數據包進行修改,比如修改ttl值等;
nat:進行源地址或目標地址修改轉換;
filter:通過過濾數據包的ip地址、mac地址、協議、端口,對數據包進行控制;
5.iptables規則鏈:根據不同時機來劃分鏈,在鏈中存放規則;
INPUT(入站)、OUTPUT(出站)、FORWARD(轉發)、PREROUTING(路由前)、POSTROUTING(路由後)
6.表中默認包含鏈:
raw:PREROUTING、OUTPUT
mangle:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
nat: PREROUTING、POSTROUTING、OUTPUT
filter:INPUT、FORWARD、OUTPUT
iptables firewall
總結:表相當於內核空間的一個容器,在表容器中又包含不同的鏈,在鏈中包含不同的規則;
7.iptables匹配流程:(根據數據流的方向確定匹配順序)
鏈:入站數據流向:PREROUTING、INPUT
出站數據流向:OUTPUT、POSTROUTING
轉發數據流向:PREROUTING、FORWARD、POSTROUTING
表:raw--mangle--nat--filter
總結:鏈內規則匹配順序:從上到下、匹配即停止、未匹配使用默認規則;
iptables firewall

二、編寫iptables規則:

語法:iptables -t 表名 選項 鏈名 條件 -j 動作
1.編寫規則語法注意:
省略表名,默認表示filter表,省略鏈名,表示表內所有鏈;
除非設置默認規則,否則必須設置匹配的規則;
選項、鏈名、動作必須大寫,其他小寫;
2.動作:對匹配的條件進行處理;
ACCEPT:允許
DROP:丟棄
REJECT:拒絕
LOG:日誌
3.選項:對鏈中的規則進行增刪改查操作;
a.增加:-A鏈的末尾添加、-I 鏈的指定位置添加,需要指定序號(若不指定,默認作爲第一條規則),例:-I INPUT 2
b.刪除:-D 刪除一條規則,-F清空鏈內所有規則,例:iptables -D 鏈名 2
c.查看:-L -n 查看規則,-L -n -v 查看更詳細的信息,-L -n --line-number顯示規則的序號(大寫爲選項,後邊小寫爲子選項, 子選項需要跟在鏈名的後邊)
d.設置默認規則:-P 鏈名 DROP或ACCEPT
4.匹配條件:
a.通用匹配條件:
-p 協議 ##常用的協議ICMP、TCP、UDP協議;
-s 源地址 ##控制源地址訪問,網段書寫格式:192.168.1.0/24
-d 目的地址 ##控制目的地址訪問
-i 入站網卡名稱 ##控制傳輸數據的入站網卡
-o 出站網卡名稱 ##控制傳輸數據的出站網卡
注:編寫規則時,需要判斷主機數據的流向,如INPUT鏈只能用-i入站網卡;
b.隱含匹配條件:
端口:-p 協議 --dport 目的端口
-p 協議 -sport 源端口
c.顯式匹配條件:
多端口:-m multiport -p tcp或udp --dports 端口號 ##指定多個端口,若連續端口11:22,若不連續端口11,22
mac地址:-m mac --mac-source MAC地址 ##MAC地址中間用:隔開,指定的mac地址爲源地址
ip地址範圍:-m iprange --src-range 192.168.1.1-192.168.1.10 ##指定的ip地址範圍是源地址
數據包的狀態:-m state --state NEW,ESTABLISHED,RELATED ##三個選項分別表示,新建,已經建立的連接,已經相關,例:默認規則爲DROP並且無允許ssh22號端口,但是允許已經建立的連接,ssh不會斷開,ss命令查看當前的連接;

三、實戰演練:

[root@lwh ~]# /etc/init.d/iptables stop                     ##清空防火牆規則;
iptables:將鏈設置爲政策 ACCEPT:filter                    [確定]
iptables:清除防火牆規則:                                 [確定]
iptables:正在卸載模塊:                                   [確定]
[root@lwh ~]# iptables -A INPUT -i lo -j ACCEPT     ##允許本地網卡所有訪問
[root@lwh ~]# iptables -A INPUT -s 192.168.100.1-p tcp -m multiport --dports 80,443,20,21,22,25,45000:50000 -j ACCEPT       ##設置開啓的端口
[root@lwh ~]# iptables -A INPUT -m mac --mac-source 00:0C:29:D9:32:C9 -p icmp -j ACCEPT ##設置此mac地址可以ping訪問本主機
[root@lwh ~]# iptables -A INPUT -m iprange --src-range 192.168.100.1-192.168.100.10 -d 192.168.100.150 -p icmp -j ACCEPT        ##設置此ip地址範圍可以訪問ping此主機
[root@lwh ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT      ##設置數據的狀態,本機可以訪問別的主機
[root@lwh ~]# iptables -P INPUT DROP            ##設置INPUT入站鏈的默認規則爲丟棄
[root@lwh ~]# iptables -P FORWARD DROP      ##設置FORWARD轉發鏈的默認規則爲丟棄
[root@lwh ~]# /etc/init.d/iptables save         ##保存防火牆配置到/etc/sysconfig/iptables文件中,每次開機都會加載這個文件中的防火牆規則
iptables:將防火牆規則保存到 /etc/sysconfig/iptables:     [確定]
[root@lwh ~]# chkconfig iptables on         ##設置開機啓動防火牆

iptables高級應用

一、SNAT源地址轉換;

1.原理:在路由後鏈POSTROUTING將內網主機的ip地址轉換成外網網卡的ip地址;
2.應用場景:共享內部主機上網,在網關主機上設置;
iptables firewall
iptables firewall
3.設置SNAT:
a.設置內外網網卡的網絡參數;
b.開啓路由轉發功能;
sed -i '/ip_forward/s/0/1/g' /etc/sysctl.conf
sysctl -p
c.編寫規則;
iptables -t nat -I POSTROUTING -o 外網網卡 -s 內網的網段/24 -j SNAT --to-source 外網網卡的ip地址 ##適用於 外網ip地址固定的環境
iptables -t nat -I POSTROUTING -o 外網網卡 -s 內網的網段/24 -j MASQUERADE ##適用於網關服務器外網網卡 地址不是固定的環境
d.做好安全控制:使用FORWARD時機進行控制,嚴格設置INPUT規則;
e.配置客戶端網關;

二、DNAT目的地址轉換;

1.原理:在路由前鏈PREROUTING將來自外網訪問網關公網ip及對應端口的目的ip及端口修改爲內部服務器的ip及端口,實現發佈內網服務器;
2.應用場景:發佈內網主機到公網
iptables firewall
3.設置DNAT:網關主機上設置
a.設置ip地址,開啓路由,設置SNAT,保證內部主機和內部服務器可以連接公網;
b.編寫防火牆規則;
iptables -t nat -I PREROUTING -i 外網網卡名 -d 外網網卡的ip地址 -p tcp --dport 發佈的端口 -j DNAT --to-destination 內網服務器ip地址 ##將內網服務器發佈到網關主機的外網ip地址並對應其端口,後邊的端口可以省略;
c.外網客戶端訪問網關外網ip地址進行測試;

三、SNAT和DNAT的實戰案例:

1.需求:共享公網ip上網,發佈ftp和httpd服務,控制網關安全;
2.配置過程:
a.配置好ip地址等參數後,開啓路由轉發功能;
b.編寫規則:
編寫SNAT和DNAT規則:

    [root@lwh ~]# /etc/init.d/iptables stop
    [root@lwh ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth1 -j MASQUERADE
    [root@lwh ~]# iptables -t nat -A PREROUTING -d 192.168.50.101 -i eth1 -p tcp -m multiport --dports 21,20,40000:45000,80,443 -j DNAT --to-destination 192.168.100.153
    編輯網關安全控制規則:
    [root@lwh ~]# iptables -A INPUT -i lo -j ACCEPT     ##允許本地網卡訪問
    [root@lwh ~]# iptables -A INPUT -s 192.168.100.0/24 -i eth0 -p icmp -j ACCEPT       ##允許內網ping
    [root@lwh ~]# iptables -A INPUT -s 192.168.100.250 -p tcp --dport 22 -j ACCEPT      ##允許主機100.250遠程登陸主機
    [root@lwh ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT      ##允許放行主機已經建立的連接
    [root@lwh ~]# iptables -A FORWARD -s 192.168.100.0/24 -j ACCEPT     ##轉發源地址爲內網地址的流量
    [root@lwh ~]# iptables -A FORWARD -d 192.168.100.0/24 -j ACCEPT     ##轉發目的地址爲內網地址的流量
    [root@lwh ~]# iptables -P INPUT DROP
    [root@lwh ~]# iptables -P FORWARD DROP
  d.保存規則:
    [root@lwh ~]# /etc/init.d/iptables save
    [root@lwh ~]# chkconfig iptables on
    [root@lwh ~]# iptables-save >/root/1.txt        ##將iptables規則導入到某文件中
    [root@lwh ~]# iptables-restore </root/1.txt     ##恢復文件中的防火牆規則

Firewalld防火牆應用

重點:
一、概述;
概述:Filewalld(動態防火牆)作爲redhat7系統中變更對於netfilter內核模塊的管理工具;
差異點:
前者:iptables 防火牆:
iptables service 管理防火牆規則的模式(靜態):用戶將新的防火牆規則添加進 /etc/sysconfig/iptables 配置文件當中,再執行命令 /etc/init.d/iptables reload 使變更的規則生效。在這整個過程的背後,iptables service 首先對舊的防火牆規則進行了清空,然後重新完整地加載所有新的防火牆規則,如果加載了防火牆的模塊,需要在重新加載後進行手動加載防火牆的模塊;
後者:firewalld防火牆:
使用 python 語言開發,管理防火牆規則的模式(動態):任何規則的變更都不需要對整個防火牆規則列表進行重新加載,只需要將變更部分保存並更新到運行中的 iptables 即可。還有命令行和圖形界面配置工具,它僅僅是替代了 iptables service 部分,其底層還是使用 iptables 作爲防火牆規則管理入口。
iptables firewall

二、Frewalld 的原理;
便於理解:
firewalld支持動態更新技術並加入了區域(zone)的概念:
簡單來說,區域就是firewalld預先準備了幾套防火牆策略集合(策略模板),用戶可以根據生產場景的不同而選擇合適的策略集合,從而實現防火牆策略之間的快速切換。例如,我們有一臺筆記本電腦,每天都要在辦公室、咖啡廳和家裏使用。按常理來講,這三者的安全性按照由高到低的順序來排列,應該是家庭、公司辦公室、咖啡廳。
當前,我們希望爲這檯筆記本電腦指定如下防火牆策略規則:在家中允許訪問所有服務;
在辦公室內僅允許訪問文件共享服務;在咖啡廳僅允許上網瀏覽。
在以往,我們需要頻繁地手動設置防火牆策略規則,而現在只需要預設好區域集合,
然後只需輕點鼠標就可以自動切換了,從而極大地提升了防火牆策略的應用效率。
區域:
zone 默認共有9個:block(拒絕)block(拒絕) dmz(非軍事化) drop(丟棄) external(外部) home(家庭) internal(內部) public(公開) trusted(信任) work(工作區)
不同的區域之間的差異是其對待數據包的默認行爲不同,firewalld的默認區域爲public;
iptables firewall
相關文件:
/usr/lib/firewalld/services/:firewalld服務默認在此目錄下定義了70+種服務供我們使用;
/etc/firewalld/zones/:默認區域配置文件,配置文件中指定了編寫完成的規則(規則中的服務名必須與上述文件名一致,調用關係);
iptables firewall

三、規則編寫:
語法:firewall-cmd [選項]
選項語法:[--zone=zone] 動作 [--permanent]
注:如果不指定--zone選項,則爲當前所在的默認區域;
--permanent選項爲是否將改動寫入到區域配置文件中,如果加此選項,需要重新加載firewalld服務方可生效;

選項之狀態:
--state ##查看防火牆的狀態
--reload ##重新加載防火牆,中斷用戶的連接,將臨時配置清掉,加載配置文件中的永久配置
--complete-reload ##重新加載防火牆,不中斷用戶的連接(防火牆出嚴重故障時使用)
--panic-on ##緊急模式,強制關閉所有網絡連接,--panic-off是關閉緊急模式

選項之動作中查看操作:
--get-icmptypes ##查看支持的所有ICMP類型
--get-zones ##查看所有區域
--get-default-zone ##查看當前的默認區域
--get-active-zones ##查看當前正在使用的區域
--get-services ##查看當前區域支持的服務
--list-services ##查看當前區域開放的服務列表
--list-all ##查看此區域內的所有配置,類似與iptables -L -n

選項之更改區域操作:
--set-default-zone=work ##更改默認的區域

選項之新建--add或刪除--remove規則:
--add-interface=eth0 ##將網絡接口添加到默認的區域內
--add-port=12222/tcp --permanent ##添加端口到區域開放列表中
--add-port=5000-10000/tcp --permanent ##將端口範圍添加到開放列表中;
--add-service=ftp --permanent ##添加服務到區域開放列表中(注意服務的名稱需要與此區域支持的服務列表中的名稱一致)
--add-source=192.168.1.1 ##添加源地址的流量到指定區域
--remove-source=192.168.1.1 ##刪除源地址的流量到指定區域
--change-interface=eth1 ##改變指定的接口到其他區域
--remove-service=http ##在home區域內將http服務刪除在開放列表中刪除
--add-masquerade ##開啓SNAT(源地址轉換)
--query-masquerade ##查詢SNAT的狀態
--remove-interface=eth0 ##將網絡接口在默認的區域內刪除
--query-interface=eth0 ##確定該網卡接口是否存在於此區域

Rich規則:
當基本firewalld語法規則不能滿足要求時,可以使用以下更復雜的規則
.rich-rules 富規則,功能強,表達性語言,查看幫助:man 5 firewalld.richlanguage
.rich規則比基本的firewalld語法實現更強的功能,不僅實現允許/拒絕,還可以實現日誌syslog和auditd,也可以實現端口轉發,僞裝和限制速率
rich規則實施順序有以下四點
a.該區域的端口轉發,僞造規則
b.該區域的日誌規則
c.該區域的允許規則
d.該區域的拒絕規則
每個匹配的規則都生效,所有規則都不匹配,該區域默認規則生效;

Rich規則語法:
iptables firewall

Rich規則選項:
--add-rich-rule=’rule’ ##新建rich規則
--remove-rich-rule=’rule’ ##刪除rich規則
--query-rich-rule=’rule’ ##查看單條rich規則
--list-rich-rules ##查看rich規則列表

Rich規則示例:
1.拒絕從192.168.100.0的ping流量;
firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.100.0/24 protocol value='icmp' reject
2.接受所有192.168.1.0/24子網端口範置7900-7905的TCP流量;
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‘
3.開啓SNAT;
firewall-cmd   --permanent --add-rich-rule=‘rule family=ipv4 source address=192.168.0.0/24 masquerade‘
4.拒絕192.168.100.100主機ping的流量(0代表優先級);
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 192.168.100.100 -p icmp -j DROP
5.允許當前的數據包的狀態;
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m state --state RELATED,ESTABLISHED -j ACCEPT

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章