Linux之iptables

1.iptables的介紹

       iptables 是與Linux 內核集成的 IP 信息包過濾系統。如果 Linux 系統連接到因特網或 LAN、服務器或連接 LAN 和因特網的代理服務器, 則該系統有利於在 Linux 系統上更好地控制 IP 信息包過濾和防火牆配置。防火牆在做信息包過濾決定時,有一套遵循和組成的規則,這些規則存儲在專用的信息包過濾表中,而這些表集成在 Linux 內核中。在信息包過濾表中,規則被分組放在我們所謂的鏈(chain)中。而netfilter/iptables IP 信息包過濾系統是一款功能強大的工具,可用於添加、編輯和移除規則。

2.iptables : 修改火牆規則的工具

/etc/sysconfig/iptables  ###主配置文件
systemctl   stop firewalld.service       ###關閉火牆,使用iptables之前要關閉火牆
systemctl   mask firewalld.service
systemctl start  iptables.service

systemctl enable iptables.service

iptables -nL   ##查看火牆列表信息

Chain INPUT (policy ACCEPT)
火牆動作     協議       源入口              目的地                數據包的狀態
target          prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0               0.0.0.0/0            state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0             0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0               0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0              0.0.0.0/0            state NEW tcp dpt:22
REJECT     all  --  0.0.0.0/0                0.0.0.0/0            reject-with icmp-host-prohibited

iptables  -F    ##清空火牆策略

service iptables save        ##把編輯好的規則寫入配置文件

iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

3.iptables的信息

三張表:filter,nat,mangle
iptables -t mangle -nL
PREROUTING  
INPUT
FORWARD
OUTPUT
POSTROUTING


iptables -t filter -nL
INPUT
FORWARD
OUTPUT


iptables -t nat    -nL
PREROUTING     ###路由前 (DNAT:目的網絡地址轉換)
INPUT
OUTPUT
POSTROUTING   ###路由後 (SNAT:源網路地址轉換)


filter,這是默認的表,包含了內建的鏈INPUT(處理進入的包)、FORWARD(處理通過的包)和OUTPUT(處理本地生成的包)。nat,這個表被查詢時表示遇到了產生新的連接的包,由三個內建的鏈構成:PREROUTING (修改到來的包)、OUTPUT(修改路由之前本地的包)、POSTROUTING(修改準備出去的包)。mangle 這個表用來對指定的包進行修改。它有兩個內建規則:PREROUTING(修改路由之前進入的包)和OUTPUT(修改路由


之前本地的包)。

4.iptables的使用規則

-t   ##後面接表名稱

-A   ##添加

從172.25.254.204傳來的數據包全部拒絕


測試:(客戶端IP:172.25.254.204)

真機IP:172.25.254.4(成功訪問samba服務共享目錄,雖然拒絕了172.25.254.204的訪問,也沒有規定172.25.254.4的火牆規則,但是policy ACCEPT,默認是接受的,所以172.25.254.4也可以訪問)


-P  ##修改默認動作,只能有ACCEPT | DROP兩種

iptables -P INPUT DROP    ##修改默認動作爲DROP,真機也不能連接samba服務,連接超時


-R  ##修改

-I   ##插入

iptables -R  INPUT 2 ! -s 172.25.254.204 -p tcp --dport 22 -j  ACCEPT    ##除了204的ssh服務接收,別的請求都拒絕

客戶端172.25.254.204不能通過ssh服務連接104


-E  ##修改鏈的名稱
iptables -t filter -N westos      ###新建westos鏈


iptables -t filter -E westos redhat  


iptables -t filter -X redhat          ###刪除redhat鏈


-D  ##刪除  iptables -D INPUT 1   ##刪除第二條火牆規則


-s  ##源地址
-d  ##目的地址
-p  ##協議
--dport ##端口

22           ##ssh服務使用
53           ##DNS
80           ##http
443         ##https

-i  ##迴環lo,匹配從網絡接口eth0進來的

-o  ##匹配從網絡接口eth0出去的

-j  ACCEPT | DROP| REJECT  ##執行的動作

iptables -A INPUT -m state --state RELATED,ESTABLISHED  -j  ACCEPT

數據包的狀態:

RELATED     ##已經來過的數據包

ESTABLISHED   ##已經確定的數據包

NEW   ##新接受到的數據包

5.網絡地址轉換

服務端(中轉站):

eth0: 172.25.254.104
eth1: 192.168. 0. 104

真機IP:172.25.254.4

客戶端IP:192.168.0.204

在客戶端要設置網關:192.168.0.104

vim /etc/sysctl.conf
:
net.ipv4.ip_forward = 1
sysctl -p                   ###激活內核路由
net.ipv4.ip_forward = 1


在server(中轉站)把規則加入nat表
iptables -t nat -A POSTROUTING -o eth0 -j  SNAT --to-source  172.25.254.104    ###從eth0進來的數據包地址轉到172.25.254.104

w       ###查看連接自己的用戶

ssh服務連接172.25.254.4,發現是172.25.254.104連接,而不是client IP:192.268.0.204連接,從192.268.0.204傳來的數據包,通過自身網關傳到中轉站eth1,再通過中轉站的內核路由從172.25.254.104轉出,連接到真機,所以看到是172.25.254.104在連接


iptables -t nat -A PREROUTING  -i eth0   -j  DNAT --to-dest     192.168.0.204       ###從eth1出去的數據包地址轉到192.168.0.204


ssh服務連接172.25.254.104,但是連接到了192.168.0.204,數據包從真機傳來,通過中轉站的eth0經由中轉站內核路由,轉到192.168.0.204


發佈了59 篇原創文章 · 獲贊 10 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章