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的常用選項
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防火墻分類
實際應用中,根據防火墻需要保護的對象的不同,防火墻可以分為主機型防火墻與網絡型防火墻。
主機型防火墻:主要保護的是服務器本機(過濾威脅本機的數據包);
網絡防火墻:主要保護的是防火墻後面的其他服務器,如web服務器、ftp服務器等
2.2防火墻過濾條件及舉例
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配置文件,可以實現永久有效規則
舉例:(網絡防火墻過濾)
實驗前需要搭建的測試環境:
環境測試:
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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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服務器!
iptables防火墻入門