linux兩堵牆之一:iptables

防火牆的作用

衆所周知,相較於企業內網,外部的公網環境更加惡劣,罪惡叢生。在公網與企業內網之間充當保護屏障的防火牆。雖然有軟件或硬件之分,但主要功能都是依據策略對穿越防火牆自身的流量進行過濾防火牆策略可以基於流量的源目地址、端口號、協議、應用等信息來定製,然後防火牆使用預先定製的策略規則監控出入的流量,若流量與某一條策略規則相匹配,則執行相應的處理,反之則丟棄。這樣一來,就可以保證僅有合法的流量在企業內網和外部公網之間流動了。

我們要知道,iptables與firewalld都不是真正的防火牆,它們都只是用來定義防火牆策略的防火牆管理工具而已,或者說,它們只是一種服務iptables服務會把配置好的防火牆策略交由內核層面的netfilter網絡過濾器來處理,而firewalld服務則是把配置好的防火牆策略交由內核層面的nftables包過濾框架來處理。換句話說,當前在Linux系統中其實存在多個防火牆管理工具,旨在方便運維人員管理Linux系統中的防火牆策略,我們只需要配置妥當其中的一個就足夠了。雖然這些工具各有優劣,但它們在防火牆策略的配置思路上是保持一致的。

iptables

iptables是運行在用戶空間的應用軟件,通過控制Linux內核netfilter模塊,來管理網絡數據包的處理和轉發,由netfilter和iptables組成。在RHEL 7系統中,firewalld防火牆雖取代了iptables防火牆,但其並沒有被移除,依然可以使用。

netfilter和iptables關係:

netfilter組件也稱爲內核空間(Kernelspace),是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。

iptables組件是一種工具,也稱爲用戶空間(userspace),它使插入,修改和除去信息包過濾表中的規則變得容易。

netfilter/iptables後期簡稱爲:iptables,其內置了filter,raw,nat和mangle四張表,所有規則配置後,立即生效,不需要重啓服務。

簡單概述一下四張表作用:filter:負責過濾數據包,nat:地址轉換,mangle:流量整形,給數據包打個標識,raw表:用於處理異常,一般用不到。

安裝

首先,可以通過rpm查看一下iptables是否安裝,默認都是安裝好在系統中的。

[root@test2 ~]# rpm -qf $(which iptables)
iptables-1.4.21-18.0.1.el7.centos.x86_64

若沒有安裝,可以掛載系統鏡像,使用rpm安裝或yum安裝

[root@test2 Packages]# rpm -ivh /mnt/Packages/iptables-1.4.21-18.0.1.el7.centos.x86_64.rpm 
[root@test2 /]# yum install -y iptables-services

其配置文件位於/etc/sysconfig/目錄下

[root@test2 Packages]# ls /etc/sysconfig/iptables-config 
/etc/sysconfig/iptables-config

通過查看其狀態,看iptables是否安裝完成

[root@test2 /]# systemctl status iptables
● iptables.service - IPv4 firewall with iptables
   Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

啓動iptables
注:啓動iptables需要關閉selinux,要不然iptables不讀取配置文件

[root@test2 /]# systemctl start  iptables

iptables使用介紹

語法
iptables -t 表名 <-A/I/D/R> 規則鏈名 [規則號] <-i/o 網卡名> -p 協議名 <-s 源IP/源子網> --sport 源端口 <-d 目標IP/目標子網> --dport 目標端口 -j 動作

看起來有點不明白?我剛開始也不明白,通過實例加以說明你就懂了。
選項
-t<表>:指定要操縱的表;
-A:向規則鏈中添加條目;
-D:從規則鏈中刪除條目;
-i:向規則鏈中插入條目;
-R:替換規則鏈中的條目;
-L:顯示規則鏈中已有的條目;
-F:清空規則鏈中已有的條目;
-Z:清空規則鏈中的數據包計算器和字節計數器;
-N:創建新的用戶自定義規則鏈;
-P:定義規則鏈中的默認目標;
-h:顯示幫助信息;
-p:指定要匹配的數據包協議類型;
-s:指定要匹配的數據包源ip地址;
-j<目標>:指定要跳轉的目標;
-i<網絡接口>:指定數據包進入本機的網絡接口;
-o<網絡接口>:指定數據包要離開本機所使用的網絡接口。

表名
raw :高級功能,如:網址過濾。
mangle :數據包修改(QOS),用於實現服務質量。
net :地址轉換,用於網關路由器。
filter :包過濾,用於防火牆規則。

規則鏈名
INPUT鏈 :處理輸入數據包。
OUTPUT鏈 :處理輸出數據包。
PORWARD鏈 :處理轉發數據包。
PREROUTING鏈 :用於目標地址轉換(DNAT)。
POSTOUTING鏈 :用於源地址轉換(SNAT)。

動作
accept :接收數據包。
DROP :丟棄數據包。
REDIRECT :重定向、映射、透明代理。
SNAT :源地址轉換。
DNAT :目標地址轉換。
MASQUERADE :IP僞裝(NAT),用於ADSL。
LOG :日誌記錄。

案例

顯示規則鏈中已有的條目

[root@test2 ~]# iptables -L

清除已有iptables規則

[root@test2 ~]# iptables -Z
[root@test2 ~]# iptables -F

不允許本機迴環接口,即不允許自己訪問自己

[root@test2 ~]# iptables -A INPUT -s 127.0.0.1 -j DROP
iptables:命令關鍵字	-A:添加規則	INPUT:控制輸入數據包	-s:源IP地址	-j:指定動作	DROP:丟棄數據包

不允許所有主機訪問

[root@test2 ~]# iptables -A INPUT -j DROP 

允許所有本機向外的訪問

[root@test2 ~]# iptables -A OUTPUT -j ACCEPT

允許ssh的22端口訪問

[root@test2 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT 
iptables:命令關鍵字	-A:添加規則	INPUT:控制輸入數據包	-p:指定要匹配的數據包協議類型 --dport:指定目標端口	-j:指定規則	ACCEPT:接收數據包

允許http的80端口訪問

[root@test2 ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT 

允許ftp的21和20端口訪問

[root@test2 ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT 
[root@test2 ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT

將所有iptables以序號標記顯示

[root@test2 ~]# iptables -L -n --line-numbers 

刪除INPUT序號爲3的規則

[root@test2 ~]# iptables -D INPUT 3
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章