iptables 簡單配置示例

iptables防火牆簡介
iptables/netfilter是Linux下自帶的一款免費且優秀的基於包過濾的防火牆工具,它的功能十分強大,使用非常靈活,
可以對流入、流出、流經服務器的數據包進行精細的控制。
iptables是Linux2.4及2.6內核中集成的模塊。
防火牆果汁的執行順序默認是從前到後依次執行,遇到匹配的規則就不在繼續向下檢查,若果遇到不匹配的規則會繼續向下執行,
匹配上了拒絕規則也是匹配,因此不再繼續。
在iptables中有三個最常用的表,分別是filter,nat和mangle,每一個表中都包含了各自不同的鏈。
filter表:
filter是iptables默認使用的表,負責對流入、流出本機的數據包進行過濾,該表中定義了3個鏈:
  1. INPOUT  負責過濾所有目標地址是本機地址的數據包,就是過濾進入主機的數據包。
  2. FORWARD 負責轉發流經本機但不進入本機的數據包,起到轉發的作用。
  3. OUTPUT 負責處理所有源地址是本機地址的數據包,就是處理從主機發出去的數據包。
NAT表:
NAT是Network Address Translation的縮寫,是網絡地址轉換的意思,用來負責來源與目的ip地址和port的轉換。
一般用於局域網多人共享上網或將內網ip映射成外網ip+port轉換的功能。該表主要包含3個鏈:
OUTPUT 和主機發出去的數據包有關,在數據包路由之前改變主機產生的數據包的目的地址。
PREROUTING 在數據包剛到達防火牆時,進行路由判斷之前執行的規則。改變包的目的地址(DNAT功能)、端口等
POSTROUTING 在數據包離開防火牆時,進行路由判斷之後執行的規則。改變包的源地址(SNAT功能)、端口等
Mangle表:
Mangle表主要負責修改數據包中的特殊路由標記,如TTL、TOS、MARK等。這個表中包含了5個鏈:INPUT、FORWARD、OUTPUT、PREROUTING、POSTROUTING,
這張表與特殊的標記相關,一般情況我們很少使用。

iptables:
    0.0.0.0 所有ip


#查看幫助
iptables -h
man iptables

列出iptables規則
iptables -L -n
列出iptables規則並顯示規則編號
iptables -L -n --line-numbers

列出iptables nat表規則(默認是filter表)
iptables -L -n -t nat

清除默認規則(注意默認是filter表,如果對nat表操作要加-t nat)
#清楚所有規則
iptables -F
#刪除用戶自定義的鏈
iptables -X
#將鏈的計數器清零
iptables -Z

#重啓iptables發現規則依然存在,因爲沒有保存
service iptables restart

#保存配置
service iptables save

#禁止ssh登陸(若果服務器在機房,一定要小心)
iptables -A INPUT -p tcp --dport 22 -j DROP
#清除規則
iptables -D INPUT -p tcp --dport 22 -j DROP
iptables -D INPUT [line-number]    // 根據

-A, --append chain 追加到規則的最後一條
-D, --delete chain [rulenum] Delete rule rulenum (1 = first) from chain
-I, --insert chain [rulenum] Insert in chain as rulenum (default 1=first) 添加到規則的第一條
-p, --proto  proto protocol: by number or name, eg. 'tcp',常用協議有tcp、udp、icmp、all
-j, --jump target 常見的行爲有ACCEPT、DROP和REJECT三種,但一般不用REJECT,會帶來安全隱患

注意:INPUT和DROP這樣的關鍵字需要大寫

#禁止192.168.10.0網段從eth0網卡接入
iptables -A INPUT -p tcp -i eth0 -s 192.168.10.0/24 -j DROP

#禁止ip地址非192.168.10.10的所有類型數據接入
iptables -A INPUT ! -s 192.168.10.10 -j DROP

#禁止ip地址非192.168.10.10的ping請求
iptables -I INPUT -p icmp --icmp-type 8 ! -s 192.168.98.10 -j DROP

#擴展匹配:1.隱式擴展 2.顯示擴展
#隱式擴展
-p tcp
--sport PORT 源端口
--dport PORT 目標端口

#顯示擴展:使用額外的匹配規則
-m EXTENSTION --SUB-OPT
-p tcp --dport 22 與 -p tcp -m tcp --dport 22功能相同

state:狀態擴展,接口ip_contrack追蹤會話狀態
NEW:新的連接請求
ESTABLISHED:已建立的連接請求
INVALID:非法連接
RELATED:相關聯的連接

#匹配端口範圍
iptables -I INPUT -p tcp --dport 22:80 -j DROP

#匹配多個端口
iptables -I INPUT -p tcp -m multiport --dport 22,80 -j DROP

#不允許源端口爲80的數據流出
iptables -I OUTPUT -p tcp --sport 80 -j DROP

#服務器一般默認規則問拒絕,如果想允某種流量通過需要額外添加
                         _____
Incoming                 /     \         Outgoing
       -->[Routing ]--->|FORWARD|------->
          [Decision]     \_____/        ^
               |                        |
               v                       ____
              ___                     /    \
             /   \                  |OUTPUT|
            |INPUT|                  \____/
             \___/                      ^
               |                        |
                ----> Local Process ----

http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO-6.html


配置防火牆:
兩種模式:電影院模式和逛公園模式

配置一個生產環境的防火牆
#1.清空所有規則
iptables -F
iptables -Z
iptables -X

#2.配置允許ssh協議的22端口進入
iptables -A INPUT -p tcp --dport 22 -s 192.168.10.0/24 -j ACCEPT

#3.配置允許lo接口數據的進出
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

#4.設置默認的進出規則,DROP掉INPUT鏈和FORWARD鏈,保留OUTPUT鏈
iptables --policy OUTPUT ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP

#5.開啓信任的IP段
iptables -A INPUT -p all -s 192.168.10.0/24 -j ACCEPT

#6.開放http的80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

#7.允許icmp類型協議通過
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

#8.允許關聯狀態包進出
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#對於FTP而言,就需要 RELATED 才能實現 21 端口白名單,如不加此項需要額外開放端口,而那些額外開放端口是不受連接狀態保護的。

#9.保存iptables配置到文件
service iptables save


iptables --policy INPUT DROP // 將INPUT表策略修改爲DROP


iptables的NAT功能:將Linux服務器配置爲上網網關和端口映射功能

上網網關:就是將Linux服務器配置成路由器或者網關,實現其他服務器能通過這臺服務器進行上網的功能,如果需要實在該功能,就要藉助iptables的nat表

NAT的兩種方式:DNAT和SNAT

SNAT的全稱是Source Network Address Translation,意思是源網絡地址轉換,這是一種改變數據包源ip地址等功能的技術,
經常用來實現使多臺計算機共享一個Internet地址訪問互聯網的功能,如x小區寬帶、企業內部機器上網。(nat表的POSTROUTING)

DNAT的全稱是Destination Network Address Translation,意思是目的網絡地址轉換,DNAT是一種改變數據包目的ip地址等功能的技術,它可以使多臺服務器共享一個ip地址連入Internet,並且繼續對外提供服務。通過對同一個外部ip地址分配不同的端口,可以映射到不同的內部服務器的ip和端口,從而實現提供各種服務的目的。除了進行端口映射外,還可以配合SNAT的功能,來實現類似防火牆設備才能實現的DMZ功能,即ip的一對一映射。(nat表的PREROUTING)


SNAT實驗步驟:
1.準備兩臺服務器,其中一臺服務器作爲網關服務器,這臺服務器要有兩塊網卡。另外一臺作爲內網服務器,有一塊網卡。
2.網關服務器內核文件/etc/sysctl.conf需要開啓轉發功能。編輯/etc/sysctl.conf修改內容爲net.ipv4.ip_forward=1,然後執行sysctl -p使修改立即生效。
3.設置iptables的filter表的FORWARD鏈允許轉發。iptables  iptables -P FORWARD ACCEPT
4.將內網服務器的網關設置爲網關服務器的內網ip地址
5.在網關服務器的iptables的nat表中加一條規則:iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j SNAT --to-source 172.16.50.128
6.驗證:ping 8.8.8.8可以ping通,但是ping百度不同,需要配置DNS

DNAT實驗步驟
在網關服務器的iptables的nat表中加一條規則:
iptables -t nat -A PREROUTING -d 172.16.50.128 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.10.129:80

一對一映射:
ifconfig eth0:1 172.16.50.100/24
// 外網對該IP所有端口進行轉發
iptables -t nat -A PREROUTING -d 172.16.50.100 -j DNAT --to-destination 192.168.10.129
// 內網訪問外網前,先通過VM1 SNAT. 所有端口轉發  這個和上面標綠字體部分差不多
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.10.129 -j SNAT --to-source 172.16.50.100  


一個網卡多個IP的方式:
1.網卡別名
    ifconfig eth0:1 192.168.50.200
2.?

刪除nat表POSTROUTING 第一條rule
iptables -t nat -D POSTROUING 1

DNAT -> PREROUTING 
SNAT -> POSTROUTING

迴路走的MAC記錄




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