iptables实现网络防火墙及地址转换
iptables主機防火墻功能及常用命令
FSM:Finite State Machine 有限狀態機
客戶端:closed -->syn_sent -->established --> fin_wait_1 -->find_wait_2 --> timewait(2MSL)服務器:closed -->listen -->syn_rcvd -->establised --> close_wait -->last_ack
-m state:追蹤連接狀態
? ?模板:內存中會維持一個空間
? ? ? ?NEW
? ? ? ?ESTABLISHED
? ? ? ?RELATED
? ? ? ?INVALID
在前端的服務器中盡量不要開啟追蹤連接
iptables子命令
? 規則:-A,-I,-D,-R
? 鏈:-N,-X,-F,-Z,-E,-P -S
? ? ? 通:默認 DROP
? ? ? 堵:默認ACCEPT
? 顯示:-L -S
? ? ? -L?
? ? ? ?-n -v -x --line-numbers
? 規則定義:iptables -t table -A|-I|-R chain 匹配條件 -j target
? ? ? 匹配條件
? ? ? ? ?通用匹配:-s -d -i -o -p
? ? ? ? ?擴展匹配
? ? ? ? ? ? ?隱含擴展
? ? ? ? ? ? ? ?-p tcp
? ? ? ? ? ? ? ? --sport --dport --tcp-flags
? ? ? ? ? ? ? ? --syn
? ? ? ? ? ? ? ?-p udp
? ? ? ? ? ? ? ? ?--sport --dport
? ? ? ? ? ? ? ?-p icmp
? ? ? ? ? ? ? ? ? --icmp-type
? ? ? ? ? ? ? ? ? ? echo-request 8
? ? ? ? ? ? ? ? ? ? echo-reply 0
? ? ? ? ? ? ? 顯示擴展:
? ? ? ? ? ? ? ? ?-m state?
? ? ? ? ? ? ? ? ? ? --state
? ? ? ? ? ? ? ? ?-m multiport
? ? ? ? ? ? ? ? ? ? --sprots, --dports, ?--ports
? ? ? ? ? ? ? ? ?-m iprange
? ? ? ? ? ? ? ? ? ? --src-range, --dst-range
? ? ? ? ? ? ? ? ?-m string
? ? ? ? ? ? ? ? ? ? -algo {bm|kmp} --string --hex-string
? ? ? ? ? ? ? ? ?-m connlimit
? ? ? ? ? ? ? ? ? ?! --connlimit-above
? ? ? ? ? ? ? ? ?-m limit
? ? ? ? ? ? ? ? ? ?--limit n(/second|/minute|/hour|/day), --limit-burst
? ? ? ? ? ? ? ? ?-m time
? ? ? ? ? ? ? ? ? ? --datestart --datestop
? ? ? ? ? ? ? ? ? ? --timestart -- timestop
? ? ? ? ? ? ? ? ? ? --weekdays
? ? ? ? ? ?-j
? ? ? ? ? ? ?ACCEPT,DROP,REJECT,LOG,REDIRECT,SNAT,DNST,MASQUERADE,MARK,RETURN,自定義鏈
四表:raw mangle nat filter?
五鏈:PREROUTING INPUT FOEWARD OUTPUT POSTOUTING
規則保存和恢復:iptables-save iptables-restore
主機防火墻:INPUT OUTPUT
網絡防火墻:FORWARD
? ? 路由:? ? NAT:
/proc/sys/net/ipv4/ip_forward
地址屬于內核,地址當前屬于主機的都給予響應
路由:對Linux主機而言,設定/proc/sys/net/ipv4/ip_forward的值為1,即為開啟路由
? ? ?路由表的生成
? ? ? ?靜態:手動添加
? ? ? ?動態:基于路由協議學習,RIP2 OSPF
NAT:網絡地址轉換
? ? ?A:10
? ? ?B:172.16-172.31
? ? ?C:192.168.0-192.168.255
? ? ?NAT: 工作于傳輸層和網絡層
? ? ? ? 過載技術
? ? ? ? Basic NAT:靜態NAT
? ? ? ? NAPT:動態NAT,網絡地址端口轉換
? ? ? ? ? ? ?源地址轉換:SNAT 用于內網主機訪問互聯網
? ? ? ? ? ? ?目標地址轉換:DNAT
? ? ? ? ? ? ?讓互聯網上主機訪問本地內網中的某服務器上的服務(發布)
? ? ? ? iptables基于SNAT和DNAT這兩個目標實現地址轉換技術
? ? ? ? -j SNT --to-source SIP
? ? ? ? 規則添加:POSTROUTING鏈
? ? ? ? -j MASQUERAADE ?動態獲取
? ? ? ? -j DNAT --to-destination DIP{:PORT}
? ? ? ? 支持端口映射
? ? ? ? 基于nat表
? ? ? ? ? ?PREROUTING
? ? ? ? ? ?POSTROTING
? ? ? ? ? ?OUTPUT
? ? ?Proxy(代理):工作在應用層
舉例說明:
網絡拓撲
簡單網絡訪問路由轉發功能
172.16.1.10能ping通192.168.8.40,但不能ping通192.168.8.39
192.168.8.39能Ping通172.16.1.254,但不能ping通172.16.1.10
原因:linux中網卡程序都加載于系統內核中,運行在上面的網卡程序會被系統認為是同一個設備
配置開啟路由轉發功能
# vim /etc/sysctl.conf?
net.ipv4.ip_forward = 1
讓配置生效
# sysctl -p
也可以,采用如下命令臨時生效
# sysctl -w net.ipv4.ip_forward=1
驗證
# cat /proc/sys/net/ipv4/ip_forward?
windows客戶端添加路由,也可以實現訪問
route add 172.16.1.0 mask 255.255.255.0 172.16.1.254
將轉發規則屏蔽,則無法訪問
# iptables -P FORWARD DROP
對常見服務的放行實例
放行192.168.8.39中80口的訪問# iptables -A FORWARD -s 172.16.1.10 -d 192.168.8.39 -p tcp --dport 80 -j ACCEPT
# iptables -A FORWARD -d 172.16.1.10 -s 192.168.8.39 -p tcp --sport 80 -j ACCEPT
放行172.16.1.0/24網段對192.168.8.0網段22號端口的訪問
# iptables -A FORWARD -s 172.16.1.0/24 -d 192.168.8.0/24 -p tcp --dport 22 -j ACCEPT
# iptables -A FORWARD -s 192.168.8.0/24 -d 172.16.1.0/24 -p tcp --sport 22 -j ACCEPT
重新編寫規則
# iptables -F FORWARD
# iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
# iptables -R FORWARD 2 -d 192.168.8.39 -p tcp -m multiport --dports 22,80 -m state --state NEW -j ACCEPT
nat規則舉例
初始化:
# iptables -P INPUT ACCEPT
# iptables -P OUTPUT ACCEPT
//需要accept否則將無法通過路由轉發任何數據包
# iptables -P FORWARD ACCEPT
模擬dnat功能之互聯網訪問局域網服務器
外網端:172.16.1.10
內網端:192.168.8.39
//將訪問172.16.1.254 80端口的服務映射到8.89的80端口上
# iptables -t nat -F
# iptables -t nat -A PREROUTING -d 172.16.1.254 -p tcp --dport 80 -j DNAT --to-destination 192.168.8.39
在目標8.39的web日志中可以看到是172.16.1.10訪問的,而不是192.168.8.40路由訪問
禁止172.16.1.10的IP訪問
# iptables -I FORWARD -s 172.16.1.10 -j REJECT
通過外網地址172.16.1.254的22022端口訪問192.168.8.39的22號端口(相當于端口映射)
# iptables -t nat -A PREROUTING -d 172.16.1.254 -p tcp --dport 22022 -j DNAT --to-destination 192.168.8.39:22
模擬snat功能之局域網訪問互聯網應用
172.16.1.10 和 172.16.1.254的eth1都放置于 vmnet2虛擬交換環境中
充當路由功能的機器
外網接口:DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.8.15
BROADCAST=192.168.8.255
NETMASK=255.255.255.0
GATEWAY=192.168.8.254
NETWORK=192.168.8.0
DNS配置
/etc/resolve.conf
nameserver 192.168.8.251
內網接口:
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-eth0 ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
IPADDR=172.16.1.254
BROADCAST=172.16.1.255
NETMASK=255.255.255.0
NETWORK=172.16.1.0
內網的機器:
172.16.1.10DNS:192.168.8.251
GAWEWAY:172.16.1.254
配置192.168.8.251
# vim /etc/sysctl.conf
打開防火墻轉發功能
net.ipv4.ip_forward = 1
sysctl -p 使配置生效
在防火墻上添加規則,對來自內網 172.16.1.0網段的機器進行源地址轉換
# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 192.168.8.15
測試在內網機器中可以訪問互聯網
轉載于:https://www.cnblogs.com/reblue520/p/6239853.html
總結
以上是生活随笔為你收集整理的iptables实现网络防火墙及地址转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: typedef void(*Fun)(v
- 下一篇: 【程序员眼中的统计学(12)】相关与回归