iptables防火牆入門

一、iptables基本管理

iptables運行前提:關閉firewalld防火牆再開啟iptables,不然造成衝突。

基本指令:

1.部署iptables服務

yum –y install iptables-services

systemctl start iptables.service

systemctl status iptables.service

2.iptables的框架(4表5鏈)

iptables默認有4個表:filter表(數據過濾表)、nat表(地址轉換表)、raw表(狀態跟蹤表)以及mangle表(包標記表),常用的有filter以及nat。

每個表下有5條鏈對應不同的過濾節點:INPUT鏈(入站規則),OUTPUT鏈(出站規則)、FORWARD鏈(轉發規則)、PREROUTING鏈(路由前規則)以及POSTROUTING鏈(路由後規則)。

3.iptables命令的基本使用方法

基本格式:iptables [-t 表名] 選項 [鏈名] [條件] [-j 目標操作]

ps:

1.可以不指定表,默認為filter表;

2.可以不指定鏈,默認為對應表的所有鏈;

3.除非設置默認策略,否則必須指定匹配條件;

4.選項/鏈名/目標操作用大寫字母,其餘用小寫

5.關於目標操作:

a.ACCEPT:允許通過/放行

b.DROP:直接丟棄,不給出任何回應

c.REJECT:拒絕通過,必要時會給出提示

d.LOG:記錄日誌,然後傳給下一條規則

6.iptables的常用選項

iptables防火牆入門

7.舉例說明

a.創建規則:[root@proxy ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT

//追加規則至filter表中的INPUT鏈的末尾,允許任何人使用TCP協議訪問本機

b.查看iptables防火牆規則:

[root@proxy ~]# iptables -nL INPUT //僅查看INPUT鏈的規則

[root@proxy ~]# iptables -L INPUT --line-numbers //查看規則,顯示行號

c.刪除規則:

[root@proxy ~]# iptables -D INPUT 3 //刪除filter表中INPUT鏈的第3條規則

[root@proxy ~]# iptables -F//清空filter表中所有鏈的防火牆規則

[root@proxy ~]# iptables -t nat -F //清空nat表中所有鏈的防火牆規則

d. 設置防火牆默認規則

[root@proxy ~]# iptables -t filter -P INPUT DROP

[root@proxy ~]# iptables -nL

Chain INPUT (policy DROP)

ps:設置前最好設置允許遠程,不然設置默認為drop後遠程會直接斷開,實際應用中不設置為reject。

二、filter過濾和轉發控制

2.1防火牆分類

實際應用中,根據防火牆需要保護的對象的不同,防火牆可以分為主機型防火牆與網絡型防火牆。

iptables防火牆入門

主機型防火牆:主要保護的是服務器本機(過濾威脅本機的數據包);

網絡防火牆:主要保護的是防火牆後面的其他服務器,如web服務器、ftp服務器等

2.2防火牆過濾條件及舉例

iptables防火牆可以根據很多很靈活的規則進行過濾行為,具體常用的過濾條件如下:

iptables防火牆入門

舉例:(針對主機型防火牆)

[root@proxy ~]# iptables -I INPUT -p tcp --dport 80 -j REJECT

拒絕任何通過tcp協議訪問本機80端口;

[root@proxy ~]# iptables -I INPUT -s 192.168.2.100 -j REJECT

拒絕來自192.168.2.100主機訪問

[root@proxy ~]# iptables -I INPUT -d 192.168.2.5 -p tcp --dport 80 -j REJECT

拒絕通過tcp協議訪問192.168.2.5主機的80端口

[root@proxy ~]# iptables -A INPUT -s 114.212.33.12 -p tcp --dport 22-j REJECT

拒絕114.212.33.12使用tcp協議遠程連接本機ssh(22端口)

2.3針對網絡防火牆,需要開啟lunux的路由轉發功能

linux內核默認支持軟路由功能,通過修改內核參數即可開啟或關閉路由轉發功能

[root@proxy ~]# echo 0 > /proc/sys/net/ipv4/ip_forward //關閉路由轉發

[root@proxy ~]# echo 1 > /proc/sys/net/ipv4/ip_forward //開啟路由轉發

//注意以上操作僅當前有效,計算機重啟後無效

[root@proxy ~]# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf

//修改/etc/sysctl.conf配置文件,可以實現永久有效規則

舉例:(網絡防火牆過濾)

實驗前需要搭建的測試環境:

iptables防火牆入門

環境測試:

1.確認不同網絡的連通性:4.100能ping通2.100

2.web1上建立測試頁面並啟動web服務

3.未建立防火牆前client能訪問web1的頁面

實例:

[root@proxy ~]# iptables -I FORWARD -s 192.168.4.100 -p tcp --dport 80 -j REJECT

拒絕192.168.4.100 通過tcp協議訪問其他網段的80端口;

[root@proxy ~]# iptables -I INPUT -p icmp -j DROP

設置其他主機無法ping本機,但存在本機也無法ping其他主機,因為本機ping其他主機時,其他主機的回應使用的也是icmp協議,會被丟棄,無法接受

解決方法:僅禁止入站的ping請求,不拒絕入站的ping回應包

[root@proxy ~]# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

ps:關閉ICMP的類型,可以參考help幫助,參考命令如下:

[root@proxy ~]# iptables -p icmp --help

三、防火牆擴建規則

iptables在基本過濾條件的基礎上海擴展了很多其他條件,在使用時需要使用-m參數來激活這些擴展功能,基本語法如下:

iptables 選項 鏈名 –m 擴展模塊 –具體擴展條件 –j 目標操作

3.1根據mac地址的過濾

實際應用中,根據ip過濾的規則在對方修改ip後再次訪問,防火牆並不能識別過濾,而由於一臺主機僅對應一個mac地址,因此根據mac地址過濾則可以防止這種情況發生。

eg:

[root@proxy ~]# iptables -I INPUT -s 192.168.4.100 -p tcp --dport 22 -j DROP

//設置規則禁止192.168.4.100使用ssh遠程本機,此時用4.100遠程得不到回應

[root@client ~]# ifconfig eth0 192.168.4.101 //修改4.100的ip為4.101

[root@client ~]# ssh 192.168.4.5 //可以遠程

[root@client ~]# ip link show eth0 //查看client的MAC地址

eth0: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000

link/ether 52:54:00:00:00:0b brd ff:ff:ff:ff:ff:ff

[root@proxy ~]# iptables -A INPUT -p tcp --dport 22\

> -m mac --mac-source 52:54:00:00:00:0b -j DROP

//拒絕52:54:00:00:00:0b這臺主機遠程本機

3.2基於多端口設置過濾規則

[root@proxy ~]# iptables -A INPUT -p tcp -m multiport --dports 20:22,25,80,110,143,16501:16800 -j ACCEPT

//一次性開啟20,21,22,25,80,110,143,16501到16800所有的端口,“:”為範圍;

3.3根據ip地址範圍設置規則

[root@proxy ~]# iptables -A INPUT -p tcp --dport 22 -m iprange --src-range 192.168.4.10-192.168.4.20 -j ACCEPT

允許從 192.168.4.10-192.168.4.20 登錄

[root@proxy ~]# iptables -A INPUT -p tcp --dport 22 -s 192.168.4.0/24 -j DROP

禁止從 192.168.4.0/24 網段其他的主機登錄

四、配置snat實現共享上網

實際應用中,需要企業內部位於局域網的主機可以訪問外網,可以通過配置snat策略實現共享上網訪問。

環境繼續使用剛剛的環境,在這裡,我們設定192.168.2.0/24網絡為外部網絡,192.168.4.0/24為內部網絡。

現在,在外部網絡中有一臺web服務器192.168.2.100,因為設置了網關,client已經可以訪問此web服務器了。但,如果查看web1的日誌就會發現,日誌裡記錄的是192.168.4.100在訪問網頁。

我們需要實現的效果是,client可以訪問web服務器,但要偽裝為192.168.2.5後再訪問web服務器(模擬所有位於公司內部的電腦都使用的是私有IP,希望訪問外網,就需要偽裝為公司的外網IP後才可以)。

實際操作如下:設置防火牆規則,實現IP地址的偽裝(SNAT源地址轉換)

1)確保proxy主機開啟了路由轉發功能

[root@proxy ~]# echo 1 > /proc/sys/net/ipv4/ip_forward //開啟路由轉發

2)設置防火牆規則,實現SNAT地址轉換

[root@proxy ~]# iptables -t nat -A POSTROUTING \

> -s 192.168.4.0/24 –p tcp --dport 80 -j SNAT --to-source 192.168.2.5

3)登陸web主機查看日誌

[root@proxy ~]# tail /var/log/httpd/access_log

.. ..

192.168.2.5 - - [12/Aug/2018:17:57:10 +0800] "GET / HTTP/1.1" 200 27 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"

通過日誌會發現,客戶端是先偽裝為了192.168.2.5之後再訪問的web服務器!


分享到:


相關文章: