天天看點

iptables系列三

iptables系列之nat及其過濾功能

自定義規則鍊

iptables -N clean_in 
iptables -L -n 
iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP 
iptables -L -n --line-number 
iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP 
iptables -A clean_in -p tcp !--syn -m state --state NEW -j DROP 
iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP 
iptables -A clean_in -p tcp tcp-flags ALL NONE -j DROP 
iptables -A clean_in -d 172.16.1.3 -j RETURN 
iptables -I INPUT -j claen_in 
iptables -L -n --line-numbers

iptables -X clean_in 
定義自定義鍊,以及鍊的引用于傳回等。
           

利用iptables的recent子產品來抵禦DOS攻擊

ssh: 遠端連接配接,
 iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP 
 iptables -I -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH 
 iptables -IINPUT -p tcp --dport 22 -m state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP 
 
 -m recent :将最近向本機發起連接配接請求的ip位址記錄下來。允許您動态建立一個位址清單,然後用幾種不同的方式對該清單的比對。
       --name 
           為模闆命名。一個記憶體空間。


 1.利用connlimit子產品将單IP的并發設定為3;會誤殺使用NAT上網的使用者,可以根據實際情況增大該值;

2.利用recent和state子產品限制單IP在300s内隻能與本機建立3個新連接配接。被限制五分鐘後即可恢複通路。
           

下面對最後兩句做一個說明:

1.第二句是記錄通路tcp 22端口的新連接配接,記錄名稱為SSH
--set 記錄資料包的來源IP,如果IP已經存在将更新已經存在的條目

2.第三句是指SSH記錄中的IP,300s内發起超過3次連接配接則拒絕此IP的連接配接。
--update 是指每次建立連接配接都更新清單;
--seconds必須與--rcheck或者--update同時使用
--hitcount必須與--rcheck或者--update同時使用

3.iptables的記錄:/proc/net/ipt_recent/SSH
/proc/net/xt_recent/


也可以使用下面的這句記錄日志:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name SSH --second 300 --hitcount 3 -j LOG --log-prefix "SSH Attack"
           

image.png

NAT:Network Address Translation

SNAT:源位址轉換  POSTROUTING,OUTPUT 
DNAT:目标位址轉換 PREROUTING 

-j SNAT 
   --to-source ipaddr[-ipaddr][:port[-port]]
  
 可以做靜态NAT,動态NAT,端口NAT
  
MASQUERADE 
這個目标隻适用于nat表,在POSTROUTING連鎖。它隻能用于動态配置設定的IP(撥号)連接配接.自動查找一個可以上網的IP位址進行源位址轉換。

-j  MASQUERADE 
     --to-ports port[-port]
     --radom 
 
ip_forward 
/proc/sys/net/ipv4/ip_forward:1 
           
route -n 
iptables -P INPUT ACCEPT 
iptables -P OUTPUT ACCEPT 
iptables -P FPRWARD ACCEPT 
注意:對于linux,位址是屬于主機的,不屬于網卡的,是以一台主機上,ip都是可以通信的。

echo "1" > /proc/sys/net/ipv4/ip_forward 

vim /etc/sysctl.conf 
net.ipv4.ip_forward=1 
sysctl -p 

route del -net 0.0.0.0 
route add default gw 172.16.100.7 


位址池表

TCP封包的序列号 
nat基于位址表+nf_conntrack...


iptables -t nat 
     -j SNAT 
         --to-source 
         
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j SNAT --to-source 172.16.100.7  

tcpdump -i  eth0 -nn -X -p icmp 
tcpdump -i eth0 -nn  |grep 192

iptables -t nat -A PREROUTING -d 192.168.1.10 -j DNAT --to-destination 172.16.10.6 
 
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o pppoe -j SNAT--to-source 123.2.3.2 

iptables -A FORWARD -s 192.168.0.0/24 -p icmp -j DROP 

iptables -P FORWARD DROP 
iptables -A FROWARD -m state ESTABLISHED -j ACCEPT 

iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 80 -m state NEW -j ACCEPT 
iptables -A FORWARD 192.168.10.0/24 -p icmp --icmp-type 8 -m state --state NEW -j ACCEPT 
 
lsmod |grep ftp 
注意:網絡防火牆,建立在FORWARD上的鍊。


 -j DNAT 
   --to-destination [ipaddr][-ipaddr][:port[-port]]
  --random
   --persistent
   

iptables -t nat -A PREROUTING -d 192.168.1.10  -p tcp --dport 21 

iptables -t nat -A PREROUTING -d 172.16.100.7 -p tcp --dport 80 -j DNAT  

請求内容過濾:
iptables -t filter -A FORWARD -m string --algo kmp --string "hello" -j DROP 
           

繼續閱讀