/etc/sysconfig/iptables詳解

目錄

一、iptables概念

二、iptables基礎

三、iptables命令格式

命令格式

命令選項

條件匹配

處理動作

 

四、iptables命令

五、iptables實例

六、CentOS7無iptable解決方法

參考文獻:


一、iptables概念


Linux內核集成的IP信息包過濾系統,linux的包過濾功能,即linux防火牆,它由netfilter和iptables兩個組件組成。
防火牆在做數據包過濾決定時,有一套遵循和組成的規則,這些規則存儲在專用的數據包過濾表中,而這些表集成在 Linux內核中。在數據包過濾表中,規則被分組放在我們所謂的鏈(chain)中。而netfilter/iptables IP 數據包過濾系統是一款功能強大的工具,可用於添加、編輯和移除規則。
netfilter組件也稱爲內核空間,是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。iptables組件是一種工具,也稱爲用戶空間(userspace),它使插入、修改和除去信息包過濾表中的規則變得容易。


二、iptables基礎


iptables是按照規則來辦事的,規則其實就是網絡管理員預定義的條件,規則一般的定義爲"如果數據包頭符合這樣的條件,就這樣處理這個數據包"。規則存儲在內核空間的信息包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務類型(如HTTP、FTP和SMTP)等。當數據包與規則匹配時,iptables就根據規則所定義的方法來處理這些數據包,如放(accept)、拒絕(reject)和丟棄(drop)等。配置防火牆的主要工作就是添加、修改和刪除這些規則。
當客戶端訪問服務器的web服務時,客戶端發送報文到網卡,而tcp/ip協議棧是屬於內核的一部分,所以,客戶端的信息會通過內核的TCP協議傳輸到用戶空間中的web服務中,而此時,客戶端報文的目標終點爲web服務所監聽的套接字(IP:Port)上,當web服務需要響應客戶端請求時,web服務發出的響應報文的目標終點則爲客戶端,這個時候,web服務所監聽的IP與端口反而變成了原點,我們說過,netfilter纔是真正的防火牆,它是內核的一部分,所以,如果我們想要防火牆能夠達到"防火"的目的,則需要在內核中設置關卡,所有進出的報文都要通過這些關卡,經過檢查後,符合放行條件的才能放行,符合阻攔條件的則需要被阻止,於是,就出現了input關卡和output關卡,而這些關卡在iptables中不被稱爲"關卡",而被稱爲"鏈"。
其實我們上面描述的場景並不完善,因爲客戶端發來的報文訪問的目標地址可能並不是本機,而是其他服務器,當本機的內核支持IP_FORWARD時,我們可以將報文轉發給其他服務器,所以,這個時候,我們就會提到iptables中的其他"關卡",也就是其他"鏈",他們就是  “路由前”、“轉發”、“路由後”,他們的英文名是PREROUTING、FORWARD、POSTROUTING
也就是說,當我們啓用了防火牆功能時,報文需要經過如下關卡,也就是說,根據實際情況的不同,報文經過"鏈"可能不同。如果報文需要轉發,那麼報文則不會經過input鏈發往用戶空間,而是直接在內核空間中經過forward鏈和postrouting鏈轉發出去的。
報文的流向:
到本機某進程的報文:PREROUTING --> INPUT
由本機轉發的報文:PREROUTING --> FORWARD --> POSTROUTING
由本機的某進程發出報文(通常爲響應報文):OUTPUT --> POSTROUTING


三、iptables命令格式


命令格式


iptables [ -t 表名] 命令選項 [鏈名] [條件匹配] [-j 處理動作或跳轉]
-t 接表名,如果不加-t 默認就是 –t filter


命令選項


-L 列出一個或所有鏈的規則
-v 顯示詳細信息,包括每條規則的匹配句數量和匹配字節數
-x 在v的基礎上,禁止自動換算單位(K,M)
-n 只顯示ip地址和端口號,不顯示域名和服務名稱
-I 插入到防火牆第一條生效
-A 添加鏈是添加到最後一條
-D 刪除指定鏈中的某一條規則,按規則序號或內容確定要刪除的規則
-F 清空指定鏈中的所有規則,默認清空表中所有鏈的內容
-X 刪除指定表中用戶自定義的規則鏈


條件匹配


-i 入站請求接口
-o 出站請求接口
-s 入站源地址
-d 目標地址
-p 指定規則協議,如tcp, udp,icmp等,可以使用all來指定所有協議
–dport 目的端口,數據包的目的(dport)地址是80,就是要訪問我本地的80端口
–sport 來源端口 數據包的來源端口是(sport)80,就是對方的數據包是80端口發送過來的。


處理動作


ACCEPT:允許數據包通過。
DROP:直接丟棄數據包,不給任何迴應信息,這時候客戶端會感覺自己的請求泥牛入海了,過了超時時間纔會有反應。
REJECT:拒絕數據包通過,必要時會給數據發送端一個響應的信息,客戶端剛請求就會收到拒絕的信息。
SNAT:源地址轉換,解決內網用戶用同一個公網地址上網的問題。
MASQUERADE:是SNAT的一種特殊形式,適用於動態的、臨時會變的ip上。
DNAT:目標地址轉換。
REDIRECT:在本機做端口映射。
LOG:在/var/log/messages文件中記錄日誌信息,然後將數據包傳遞給下一條規則,也就是說除了記錄以外不對數據包做任何其他操作,仍然讓下一條規則去匹配
一般不使用REJECT(拒絕)行爲.REJECT會帶來安全隱患

2480889e5f7ccc621b60e212f77e3f6afc3.jpg

(圖片來源:https://my.oschina.net/u/1253780/blog/2050514

四、iptables命令

查詢防火牆狀態:
[root@localhost ~]# service   iptables status
停止防火牆:
[root@localhost ~]# service   iptables stop
啓動防火牆:
[root@localhost ~]# service   iptables start
重啓防火牆:
[root@localhost ~]# service   iptables restart
永久關閉防火牆:
[root@localhost ~]# chkconfig   iptables off
永久關閉後啓用:
[root@localhost ~]# chkconfig   iptables on

五、iptables實例

#頭兩行是註釋說明
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
#使用filter表
*filter
#下面三條內容定義了內建的INPUT、FORWAARD、ACCEPT鏈
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT

#注意默認的22端口別刪掉了,這個是ssh的端口

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

#僅限XXX.XXX.XXX.XXX訪問6379端口
-A INPUT -s XXX.XXX.XXX.XXX -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT

#允許訪問8080端口,這樣8080端口就可以對外提供服務了
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8082 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8083 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

六、CentOS7無iptable解決方法

CentOS7沒有iptables,默認使用firewalld ;iptables默認無法被systemctl控制,需要安裝iptables-services、iptables-devel這兩個依賴包。

1. 停止並禁用 firewalld

systemctl stop firewald.service && systemctl disable firewald.service

2.安裝iptables-services、iptables-devel

yum install iptables-services iptables-devel

3.啓用並啓動iptables

systemctl enable iptables.service && systemctl start iptables.service

查看狀態 systemctl status iptables.service

4.查看iptables配置文件 vim /etc/sysconfig/iptables


參考文獻:


1、https://baike.baidu.com/item/IPTABLES/9139339?fr=aladdin
2、https://www.cnblogs.com/shuaixf/archive/2011/11/29/2268345.html
3、https://www.cnblogs.com/dulongly/p/10506499.html

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