2021-05-12 14:32:11
關於 iptables 入站 出站以及NAT範例
本文是自己工作上的iptables筆記總結,適合的可以直接拿去用,不適合的,適當修改即可!
iptbales預設ACCEPT策略,也稱通策略,這種情況下可以做攔截策略,還有種叫堵策略,然後開放通的規則。(我偏向堵策略,自己需要開放什麼在開,以下例子也是在此基礎上的)
iptables 一些引數名稱:
四表五鏈:fifter表、NAT表、Mangle表、Raw表 。 INPUT鏈、OUTPUT鏈、FORWARD鏈、PREROUTING鏈、POSTROUTING鏈
INPUT鏈 – 處理來自外部的資料。
OUTPUT鏈 – 處理向外傳送的資料。
FORWARD鏈 – 將資料轉發到本機的其他網絡卡裝置上。
PREROUTING鏈 – 處理剛到達本機並在路由轉發前的封包。它會轉換封包中的目標IP地址(destination ip address),通常用於DNAT(destination NAT)。(NAT表需要開啟linux路由 net.ipv4.ip_forward = 1)
POSTROUTING鏈 – 處理即將離開本機的封包。它會轉換封包中的源IP地址(source ip address),通常用於SNAT(source NAT)。
OUTPUT鏈 – 處理本機產生的封包。
iptables 新建時情況所有記錄
iptables -F
iptables -X
iptables -F -t mangle
iptables -t mangle -X
iptables -F -t nat
iptables -t nat -X
開放22 SSH埠
iptables -A INPUT -p tcp -p tcp --dport 22 -j ACCEPT (允許外部存取本機的22埠)
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT (有進就有出,IP包是來回的)
例如一條比較完整的SSH埠限制:(意思為:從eth0進來的SSH存取,除了公司192.168.16.0/24不限制,其他的地址都限制為每個ip最多5個SSH連線,且只為NEW和ESTABLISHED的連線,其他的都拒接)
iptables -A INPUT -i eth0 ! -s 192.168.16.0/24 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -m connlimit --connlimit-above 5 -j REJECT
----
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT (允許本機去ssh其他的伺服器的22埠)
iptables -A INPUT -p tcp --sport 22 -j ACCEPT
設定預設規則為DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
此時占時不要service iptables save,先用用戶端ssh連線一下伺服器,看看可以連線嗎?如果不行最起碼還可以重新啟動,這樣規則沒儲存重新啟動是不生效,如果儲存了發現不通就麻煩一些了!
當發現可以SSH的時候,我們就可以繼續下面的步驟了!
開啟回環地址,為了本地存取,如本地存取資料庫之類
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
開啟伺服器的ping功能,我覺得有必要開啟,可以檢測伺服器狀況
iptables -A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT (此2條規則是允許本機ping外網的ip,不包括域名,其中8是icmp的請求,0是icmp的響應)
iptables -A OUTPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
----
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT (此2條規則是允許外部ping本機)
iptables -A OUTPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
允許內部ping外部的域名
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
允許外部存取本機的80服務,且只允許新連線的和已經連線的對談(狀態檢測)
iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
允許外部存取我本地多個埠 如 8080,8081,8082,且只允許是新連線,已經連線的和已經連線的在延伸出新連線的對談
iptables -A INPUT -p tcp -m multiport --dport 8080,8081,8082 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sport 8080,8081,8082 -m state --state ESTABLISHED -j ACCEPT
允許外部存取本機81埠,且本機初始只允許有200個連線,超過了此數量,然後每秒新增加2個連線,如果存取超過此限制則拒接 (此方式可以限制一些攻擊)
iptables -A INPUT -p tcp --dport 81 -m limit --limit 2/s --limit-burst 200 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 81 -j ACCEPT
限制除使用者192.168.16.99以外的IP連線數為50 (相當於可以給自己開特權^_^)
iptables -A FORWARD -p tcp -s !192.168.16.99 -m connlimit --connlimit-above 50 -j REJECT
TCP匹配擴充套件協定--tcp-flags
iptables -A INPUT -p tcp --tcp-flags SYN,FIN,ACK,RST SYN (表示 SYN,FIN,ACK,RST的標識都檢查,但只匹配SYN標識)
iptables -A INPUT -p tcp --syn (如果這是為了匹配SYN標識位也可以寫成這樣,選項—syn相當於”--tcp-flags SYN,RST,ACK SYN”的簡寫。)
範例:
//nmap-xmas
iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP (檢查所以的標識位,匹配到FIN URG PSH的丟棄)
//nmap-push
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP (檢查所以的標識位,匹配到SYN RST ACK FIN URG的丟棄)
// Null
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP (檢查所以的標識位,沒標誌位的丟棄)
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP(檢查 SYN,RST標識位,匹配到 SYN,RST的丟棄,SYN是建立連線,RST是重置連線,所以這樣的包是有問題的)
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP (檢查 SYN,FIN標識位,匹配到 SYN,FIN的丟棄,SYN是建立連線,FIN是結束連線,所以這樣的包是有問題的)
iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
SNAT 和 DNAT
SNAT:
假如我要讓公司192.168.10.0/24段的地址都通過linux伺服器的eth0 :123.123.123.123上網
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 123.123.123.123
DNAT
GATEWAY eth0:123.123.123.123 eth1:192.168.10.1 內網主機:192.168.10.10
要使存取123.123.123.123的80 自動跳到192.168.10.10的80埠上
iptables -t nat -A PREROUTING -p tcp -d 123.123.123.123 --dport 80 -j DNAT --to-destination 192.168.10.10:80
iptables -t nat -A POSTROUTING -p tcp -d 192.168.10.10 --dport 80 -j SNAT --to-source 192.168.10.1 (內網之間進行nat才加上)
第一條:將外部封包的目的地址改到內網主機的指定埠
第二條:轉發前,將外部源地址改為內網本地地址
更多iptables相關教學見以下內容:
CentOS 7.0關閉預設防火牆啟用iptables防火牆 http://www.linuxidc.com/Linux/2015-05/117473.htm
Iptables工作原理使用詳解 http://www.linuxidc.com/Linux/2016-09/134945.htm
iptables使用範例詳解 http://www.linuxidc.com/Linux/2014-03/99159.htm
Linux防火牆iptables詳細教學 http://www.linuxidc.com/Linux/2013-07/87045.htm
iptables的備份、恢復及防火牆指令碼的基本使用 http://www.linuxidc.com/Linux/2013-08/88535.htm
Linux下防火牆iptables用法規則詳解 http://www.linuxidc.com/Linux/2012-08/67952.htm
Linux下iptables防火牆設定 http://www.linuxidc.com/Linux/2015-10/123843.htm
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-12/138466.htm
相關文章