歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> 淺談iptables 入站 出站以及NAT實例,iptablesnat

淺談iptables 入站 出站以及NAT實例,iptablesnat

日期:2017/3/3 18:00:13   编辑:學習Linux

淺談iptables 入站 出站以及NAT實例,iptablesnat

淺談iptables 入站 出站以及NAT實例,iptablesnat


--------------本文是自己工作上的筆記總結,適合的可以直接拿去用,不適合的,適當修改即可!---------------

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才加上)

第一條:將外部數據包的目的地址改到內網主機的指定端口
第二條:轉發前,將外部源地址改為內網本地地址

http://xxxxxx/Linuxjc/1180612.html TechArticle

Copyright © Linux教程網 All Rights Reserved