首頁 > 軟體

關於 iptables 入站 出站以及NAT範例

2020-06-16 17:25:39

本文是自己工作上的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


IT145.com E-mail:sddin#qq.com