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