iptables
默認5個表, 不可增加其他表
1 raw 用於配置數據包,raw 中的數據包不會被系統跟蹤。 2 filter 是用於存放所有與防火牆相關操作的默認表。 3 nat 用於 網絡地址轉換(例如:端口轉發)。 4 mangle 用於對特定數據包的修改(參考 損壞數據包)。 5 security 用於 強制訪問控制 網絡規則
控制Linux內核netfilter模組, 做數據包的過濾和轉發,只是netfilter項目的一小部分
防火牆黑白名單
可以在內核層面將對80端口的訪問直接映射到8080端口上
NAT, 將對本機的請求,轉發到內部其他NAT ip上
下圖中可以看到數據包是如何進入本地進程local process的
birdge check檢查是否使用橋接網口
參考: https://wiki.archlinux.org/index.php/Iptables_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
https://en.wikipedia.org/wiki/Netfilter
docker使用NAT時,docker命令也是操作iptables, 給在運行中的容器增加端口映射,需要手動執行iptables命令
iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000
查看所有nat規則 iptables -t nat -L -n --line-numbers
刪除一條nat規則 iptables -t nat -D POSTROUTING 2 ,最后一個數字為上一個命令打印的序號
ip route
增加路由, 在本地機器上操作, 對應的文件是/etc/iproute2/rt_tables , 等同與netmanager中的操作命令route add default gw 10.0.0.1
255 local 254 main 253 default 默認的三個路由表, 可以增加自定義的路由表
ip rule
路由規則, 路由表中的具體規則
出方向: ip route, ip rule決定了數據包在到達網口Interface時,需要經過的網關和路由器
docker的網絡模型
bridge 默認使用docker0橋接網口
host 直接使用宿主機物理網卡
none
container
高級課題:docker容器配置獨立ip (這個夠陽春,沒有實驗出來) 端口如何開放?
pipework 需要使用none模式啟動 https://github.com/jpetazzo/pipework#connect-a-container-to-a-local-physical-interface
https://blog.csdn.net/lvshaorong/article/details/69950694
SNAT,DNAT
http://cn.linux.vbird.org/linux_server/0250simple_firewall_5.php