Iptables介紹


一、防火牆分類

  wKiom1f0hfLCB8l7AACt3PcGLZw578.png


二、Linux防火牆(Iptables)

  netfilter:又稱“內核空間”

  iptables又稱“用戶空間”

  wKioL1f0idCxQLbaAADMo2p_MYo696.png


1、Iptables默認的四張表

1filter:     用於防火牆,默認有INPUT/OUTPUT/FORWARD三條鏈

2nat:       網絡地址轉換,默認有PREROUTING/POSTROUTING/OUTPUT三條鏈

3mangle:     流量×××,默認有五條鏈(對數據進行標記)

4raw:       用於狀態跟蹤,默認有兩條鏈


iptables -t nat -L       //查看iptables裏的nat表規則

iptables -t filter -L       //查看iptables裏的filter表規則

iptables -t mangle -L       //查看iptables裏的mangle表規則

iptables -t raw -L         //查看iptables裏的raw表規則


說明:-t 指定表


2、Iptabels默認的五條規則鏈

1INPUT:       如果一個數據包的目的地址LINUX本身,則進入INPUT

2OUTPUT:      源地址LINUX本身     

3FORWARD:     數據包從一塊網卡接收,從另一塊網卡發出,經過LINUX的包,進入這條鏈

4PREROUTING:   路由前

5POSTROUTING:   路由後

 

iptables -N yy   //-N 自定義規則鏈,自己在表裏創建一個規則鏈,名字自己隨便寫

iptables -X yy   //刪除自定義規則鏈


表對應的鏈如下圖:表裏面存鏈,鏈裏又存規則

wKiom1f0hzjw3gr4AAEh0eVs9Sk666.png


3、Iptables端口號範圍

知名端口號:          <254的端口號                                    保留給UNIX服務端口號:   254~1024之間端口號

自定義端口號:        >1024的端口號

 

三定位:

IP地址 + 協議(TCP/UDP端口號


如:客戶端ASSH訪問服務器B

A在用ssh訪問B時,B是用22端口響應,而A的端口是>1024隨機生成

發起者的端口號是>1024隨機的,接受者是固定的


4、編寫規則

規則選項 

wKiom1f0owHS1h_kAADLBte5N-E483.png 


基本匹配條件

wKiom1f0pX-yMx51AABA7DIX7JM073.png


最基本的目標操作

*ACCEPT : 允許通過/旅行

*DROP  : 直接丟棄,不給出任何迴應

*REJECP : 拒絕通過,必要時會給出提示

*LOG   :記錄日誌,然後傳給下一條規則(匹配即停止,規律的唯一例外)


iptables -F             //清空全部的路由規則

iptables -F INPUT         //只清空INPUT的規則

iptables -P INPUT DROP      //更改默認規則爲拒絕((這默認規則不能設置成REJECT)

iptables -nL            //列出所有規則

iptables -nL --line-numbers  //查看防火牆規則,每個規則註明序號

iptables -t nat -nvl       //查看指定表


iptables -A INPUT -p icmp -j DROP   //拒絕ping防火牆本身                     

iptables -I INPUT 1 -s 192.168.194.1 -p icmp -j ACCEPT //允許指定IP地址ping防火牆

iptables -D INPUT 2       //刪除防火牆的INPUT鏈中第二條規則


允許特定IP地址訪問LINUXtelnet服務

1.iptables -P INPUT DROP

2.iptables -A INPUT -s 192.168.194.1 -p tcp --dport 23 -j ACCEPT


INPUT鏈插入規則,作爲第一條;從eth0網卡收到的、訪問telnet服務的數據包,拒絕

iptables -I INPUT -i eth0 -p tcp --dport 23 -j REJECT


三、FORWARD鏈的使用

echo-request    准許發送

echo-reply     准許迴應


要使用FORWARD鏈,首先要打開linux路由轉發功能

臨時打開路由功能:

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

# cat /proc/sys/net/ipv4/ip_forward

永久打開轉發功能:

# echo 'echo 1 > /proc/sys/net/ipv4/ip_forward' >> /etc/rc.local

或者

# vi /etc/sysctl.conf

net.ipv4.ip_forward= 1

# sysctl -p



假設內網段:192.168.194.0/24

假設外網段:192.168.195.0/24


1、拒絕192.168.195.0/24網段訪問192.168.194.0/24網段的telnet服務

iptables -A FORWARD -s 192.168.195.0/24 -d 192.168.194.0/24 -p tcp --dport 23 \

-i eth1 -o eth0 -j REJECT

 

2、拒絕SSH協議通過防火牆

iptables -A FORWARD -p tcp --dport 22 -j REJECT

 

3、不是192.168.195.0/24網段的主機訪問SSH服務,可通過

iptables -I FORWARD ! -s 192.168.195.0/24 -p tcp --dport 22 -j ACCEPT

 

4、防火牆拒絕icmp的請求

iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT

 

5、允許192.168.195.0/24網段進行PING

iptables -I INPUT -s 192.168.195.0/24 -p icmp --icmp-type echo-request -j ACCEPT


6、防火牆拒絕發送echo-reply

iptables -A OUTPUT -p icmp --icmp-type echo-reply -j REJECT

 

7、允許防火牆迴應192.168.195.0/24網段的ping

iptables -I OUTPUT -s 192.168.195.0/24 -p icmp --icmp-type echo-reply -j ACCEPT


8、防火牆拒絕192.168.195.0/24對其進行TCP連接(檢查SYN/ACK/RST/FIN四個位置,其中SYN被置位)

iptables -I INPUT -s 192.168.195.0/24 -p tcp --tcp-flags SYN,ACK,RST,FIN SYN -j REJECT


9、從eth1發過來的tcp連接請求都拒絕

iptables -I INPUT -p tcp --tcp-flag SYN,ACK,FIN,RST SYN -j REJECT


四、擴展匹配

wKioL1f0rtzza5QVAAA3NOD-NR4213.png


1、拒絕指定MAC地址的主機對防火牆本身的訪問

iptables -A INPUT -m mac --mac-source 00:0C:29:43:CA:BA -j REJECT

 

2、在防火牆上通過一條命令打開多個端口

iptables -A INPUT -p tcp -m multiport --dports 20:22,25,80,110,143,16501:16800 -j ACCEPT

 

3SSH登錄的IP範圍控制

    允許從 192.168.4.10-192.168.4.20登錄

    禁止從 192.168.4.0/24網段其他的IP登錄

# iptables -A INPUT -p tcp --dport 22 -m iprange --src-range 

 192.168.4.10-192.168.4.20 -j ACCEPT

# iptables -A INPUT -p tcp -dport 22 -s 192.168.4.0/24 -j DROP


4、192.168.194.0/24作爲內網,192.168.195.0/24作爲外網。從內到外的訪問不受限制,從外到內的主   動連接全部拒絕

# iptables -A FORWARD -s 192.168.194.0/24 -j ACCEPT

# iptables -A FORWARD -d 192.168.194.0/24 -j REJECT

# iptables -I FORWARD -d 192.168.194.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT


說明:

網絡連接的五種狀態

  • NEW:     請求建立連接的包、完全陌生的包

  • ESTABLISHED:將要或已經建立連接的包

  • RELATED:   與已知某個連接相關聯的包

  • INVALID:   無對應連接,以及連接無效的包

  • UNTRACKED: 未跟蹤狀態的包



5、減輕DOS(拒絕服務)***

 比如反射/反彈式***

iptables -A INPUT -m state --state NEW -p tcp ! --syn -j DROP

iptables -A FORWARD -m state --state NWE -p tcp ! --syn -j DROP


6、免狀態跟蹤

 比如訪問量較大的web服務

iptables -t raw -A PREROUTING -d 192.168.4.100 -p tcp --dport 80 -j NOTRACK

iptables -t raw -A PREROUTING -s 192.168.4.100 -p tcp --sport 80 -j NOTRACK

iptables -t raw -A FORWARD -m state --state UNTRACKED -j ACCEPT


五、NAT表-Iptables

1、SNAT  把源地址轉換,所以稱作Source NAT

  實現: 注意把ip_forward打開;

      寫入iptables規則;


#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to-source 201.1.1.1

#iptables -t nat -nvL  //查看


說明:內網IP 192.168.1.0/24

    公網IP 201.1.1.1

    連接到外網的網卡 eth1


2、SNAT  ip僞裝

作用:當連接外網時,使用的IP地址不是固定的(如ADSL撥號連接),可以利用IP僞裝來簡化配置


# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE


注意:如果使用ADSL撥號,將會出現一個PPP0網絡,iptables的規則,

    出口設備應該使用ppp0( -o ppp0 


ADSL撥號連接

1)安裝軟件

   #yum install -y rp-pppoe

2)設置ADSL連接

   #pppoe-setup   //根據嚮導回答問題

 

3、DNAT  將內網服務器發佈至公網


例一:局網域有一臺WEB服務器,IP地址是192.168.194.10。防火牆連接公網的端口是eth1,當訪問eth1     IP地址(192.168.195.4080端口時,就把這個請求發給內網的WEB服務器。

    # iptables -t nat -A PREROUTING -i eth1 -d 192.168.195.40 -p tcp --dport 80 \

     -j DNAT --to-destination 192.168.194.10

 

例二:與例一類似,只是內網服務器提供ssh訪問。當訪問防火牆公網地址的2222端口時,將請求發送到     內網服務器的22端口。

    # iptables -t nat -A PREROUTING -i eth1 -d 192.168.195.40 -p tcp --dport 2222 \

     -j DNAT --to-destination 192.168.194.10:22


客戶端連接: # ssh 192.168.195.40 -p 2222

 

例三:如果發佈FTP服務器,命令配置與發佈WEB服務器類似,只是端口號不一樣。但是應該加載兩個相     關的模塊。

    # vim /etc/sysconfig/iptables-config

     IPTABLES_MODULES="nf_nat_ftp  nf_conntrack_ftp"

    # service iptables restart


六、防火牆規則的備份還原


# service iptables save                   //正常保存

iptables-save  >  ~/iptables-20131210      //將當前配置保存到一個指定文件

iptables-restore  < ~/iptables-20131210     //根據備份的文件進入恢復防火牆配置


七、調整內核參數

  # vi /etc/sysctl.conf

  net.ipv4.ip_default_ttl=128            ->設置IP包默認的TTL值從多少開始

  net.ipv4.icmp_echo_ignore_all=1          ->設置主機忽略icmp消息

  net.ipv4.icmp_echo_ignore_broadcasts = 1   ->設置主機響應icmp廣播消息


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章