iptables

iptables


iptables的5條規則鏈

INPUT:數據包的目的地是訪火牆

OUTPUT:數據的源地址是防火牆

FORWARD:數據包穿越訪火牆

PREROUTING:路由前

POSTROUTING:路由後


man iptables

      netfilter/iptables    表tables     鏈chains        規則policy

比喻:小區裏的一棟樓       樓裏的房子   房子裏的櫃子  增加,擺放的規則


提示

防火牆規則的執行順序默認認爲從前到後依次執行,遇到匹配的規則就不在繼續向下檢查,如果遇到不匹配的規則則會繼續向下進行。


重點:匹配上了拒絕規則也是匹配,因爲,不在繼續向下進行。


iptables 選項

-I :插入規則第1行


常用的表 filter、net、mangle、raw


表tables          鏈chains

            INPUT   FORWARD  OUTPUT PRERROUTING  POSTROUTING

filter       1        1        1        -           -          *****

nat          -        -        1        1           1          *****

mangle       1        1        1        1           1          **

raw



iptables 指令格式

iptables [-t 表名] 選項 [鏈名] [條件匹配] [-j 目標操作]


表:filter

鏈:INPUT, FORWARD, OUTPUT


表:nat

鏈:INPUT, OUTPUT,POSTROUTING, PREROUTING 


選項 A(添加)  D(刪除)  I(插入)  F(清空)

目標操作: REJECT  DROP  ACCEPT  LOG



四元組是:

       源IP地址、目的IP地址、源端口、目的端口


五元組是:

      源IP地址、目的IP地址、協議號、源端口、目的端口


七元組是:

       源IP地址、目的IP地址、協議號、源端口、目的端口,服務類型以及接口索引



#########

filter表:負責防火牆功能(過濾本機流入,流出的數據包)。是iptables默認使用的表,這個表定義了三個鏈(chanis)


1.INPUT :負責過濾所有目標地址是本機(防火牆)地址的數據包,通俗的講,就是過濾進入主機的數據包。


2.FORWARD :負責轉發流經主機但不進入本機的數據包。起轉發的作用,和Nat表關係很大。


3.OUTPUT :處理所有源地址是本機地址的數據包,能俗的講就是處理從主機發出去的數據包。


##########

nat表

網絡地址轉換,即負責來源與目的IP地址和port的轉換,和主機本身無關,一般用於局域 網多人共享上網或者內網IP映射外網IP及不同端口轉換服務等功能,nat表的功能很重要,這個表定義了三個鏈(chains)


1.OUTPUT

和主機發出去的數據包有關,在數據包路由之前改變主機產生的數據 包的目標地址等。


2.PREROUTING

在數據包剛到達防火牆時,進行路由判斷之前執行的規則,改變包的目的地址(DNAT功能),端口等


3.POSTROUTING

在數據包離開防火牆時進行路由判斷之後執行的規則,改變包的源地址(SNAT),端口等


mangle表

主要負責修改數據包中特殊的路由標記,如TTL,TOS,MARK等,這個表定義了5個鏈

1.INPUT 

2.FORWARD

3.OUTPUT

4.PREROUTING

5.POSTROUTING


/etc/init.d/iptables start

/etc/init.d/iptables status  檢查狀態


如果防火牆開不起來,在linux命令行輸入setup-->firewall configuration-->enable進行激活


iptables -L   #列出所有鏈和規則

iptables -n   #以數據字的形式輸出

         -t    指定默認的表

         -v    顯示詳細信息 

         -x    禁止單位換算

-A    添加規則到最後1條

         -p    指定協議

         -j    形爲

         -s    指定源地址

         -d    指定目標地址

         -I    添加規則到第1條

   --icmp-type 8   #8表示ping

          -i 表示數據包進入接口爲eth0, 

          -o 表示數據包流出的網絡接口

           !   取反


基本目標操作



iptables -L -n filter  #查看filter表中的鏈

iptables -L -n net     #查看filter表中的鏈

iptables -L -n mangle  #查看filter表中的鏈


iptables -L -n -t filter  #指定默認的表


清除默認規則 臨時清除

iptables -F :刪除所有的規則

iptables -X :把所有的規則指針清零

iptables -Z :刪除自定義的鏈


例1:禁止ssh默認的22端口

iptables -A INPUT -p tcp --dport 22 -j DROP

iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

刪除規則

iptables -D INPUT -p tcp --dport 22 -j DROP

提示:

1.iptables默認用的是filter表,因此,以上兩條命令等價

2.其中INPUT DROP 等關鍵字要大寫

3.行爲參數


--jump -j target

提示:target常見處理方法ACCEPT(接受),DROP(丟棄),REJECT(絕拒)。

一般不用REJECT(絕拒),會帶來安全隱患,REJECT(絕拒)相當於明確拒絕


SNAT(對於源地址進行轉換),DNAT(對於目的地址進行轉換),MASQUERADE(僞裝)


刪除的方法

iptables -L -n --line-numbers 查看規則行號

1. iptables -D INPUT -p tcp --dport 22 -j DROP

2. iptables -D INPUT 1 #1表示行號進行刪除規則

3. iptables -F  service iptables save 


例2:禁止10.0.0.0/24網段接入

iptables -t filter -A INPUT -i eth0 -s 10.0.0.0/24 -j DROP


例3:拒絕規則匹配

iptables -t filter -A INPUT -i eth0 -s ! 10.0.0.0/24 -j DROP

提示加!號,表示取反,


在生產環境中封一個非法的IP及端口

iptables -I INPUT -p tcp -s 10.0.0.189/24 -j DROP

禁止IP通過防火牆

iptables -I INPUT -p tcp -dport 22 -j DROP

禁止目的端口爲22的的數據包通過防火牆

提示:-I 的參數意思是插 入到防火牆的第一條生效,-A 是添加到最後一條。


例3:源地址不是10.0.0.101禁止連接

iptables -t filter -I INPUT -i eth0 -s ! 10.0.0.101 -j DROP

iptables -t filter -I INPUT -p icmp --icmp-type 8 -i eth0 ! 10.0.0.101 -j DROP


提示:-i 表示數據包進入接口爲eth0, -o 表示數據包流出的網絡接口


例4.源地址不是10.0.0.0/24的禁止連接

iptables -t filter -A INPUT -i eth0 -s ! 10.0.0.101 -j DROP

iptables -t filter -A INPUT -i eth0 -s  10.0.0.101 -j ACCEPT


匹配指定的協議

iptables -A INPUT -p tcp

iptables -A INPUT -p udp

提示:-p參數可以匹配協議名或者協議號,支持tcp,udp,icmp,all四種


例5:匹配指定協議外的所有協議

iptables -A INPUT -p ! tcp


例6:匹配主機

iptables -A INPUT -s 10.0.0.12

iptables -A INPUT -s 10.0.0.0/24

iptables -A INPUT ! -s 10.0.0.12

iptables -A INPUT ! -s 10.0.0.0/24


例7:匹配端口

iptables -A INPUT -p tcp -sport 53  #源端口

iptables -A INPUT -p tcp -dport 53  #目標端口


例8:匹配端口範圍

iptables -A INPUT -p tcp --sport 22:80 -j DROP   #22到80端口

iptables -A INPUT -p tcp --dport 21 -j ACCEPT  

iptables -A INPUT -p tcp -m multiport --dport 21,22,23,24 -j ACCEPT # -m多端口參數


例9:匹配ICMP端口類型

iptables -A INPUT -P icmp --icmp-type 8 -j DROP

iptables -A INPUT -P icmp -m --icmp-type any -j ACCEPT

iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT


例10:匹配指定的網絡接口

iptables -A INPUT -i eth0

iptables -A INPUT -0 eth0


安全保護

Syn-flood protection:

iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT


源地址僞裝

iptables -t nat -A POSTROUTING -s 192.168.4.20 -j SNAT --to-source 176.130.11.84

局域網192.168.4.20僞裝爲源外網IP176.130.11.84上公網


##################


單機防火牆生產環境配置----------------》

1.配置防火牆

iptables -F

iptables -X

iptables -Z


iptables -t filter


2.配置允許SSH登陸端口進入

iptables -A INPUT -p tcp --dport 22  -s 10.0.0.0//24 -j ACCEPT


3.配置本機的lo接口進入和流出

iptables -A INPUT -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT


4.設置默認的防火牆禁止和允許規則

#setting default firewall policy 設置默認DROP掉FORWARD,INPUT鏈,允許OUTPUT鏈


iptables --policy OUTPUT ACCEPT

iptables -P FORWARD DROP

iptables -P INPUT DROP


5.開啓信任的IP段

iptables -A INPUT  -s 192.168.1.0/24 -p all -j ACCEPT


6.允許HTTP服務無條件通過

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -p tcp --dport 443 -j ACCEPT


7.允許icmp類型協議通過

iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT

iptables -A INPUT -p icmp -s 192.168.1.0/24 -m icmp --icmp-type any -j ACCEPT

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


永久保存配置文件

防火牆默認保存文件 /etc/sysconfig/iptables


方法1./etc/init.d/iptables save

方法2.iptables-save /etc/init.d/iptables


臨時 封堵單個IP

iptables -I INPUT -s 10.2.1.2 -j DROP


#####################################################################

生產環境iptables規則實踐

1.僅允許 內部合法的IP地址訪問服務器

iptables -A INPUT -s 203.82.11.0/24 -p all -j ACCEPT

iptables -A INPUT -s 122.42.61.96/27 -p all -j ACCEPT

iptables -A INPUT -s 192.168.1.0/24 -p all -j ACCEPT

iptables -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT


2.僅允許合法的IP段訪問監控服務nagios

iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 5666 -j ACCEPT

iptables -A INPUT -s 202.82.11.0/24 -p tcp --dport 5666 -j ACCEPT


3.僅允許內部合法的IP段訪問MYSQL數據庫和ORACLE數據庫

iptable  -A INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT

iptable  -A INPUT -s 192.168.1.0/24 -p tcp --dport 3307 -j ACCEPT

iptable  -A INPUT -s 192.168.1.0/24 -p tcp --dport 1521 -j ACCEPT

提示:以上僅適合於LAMP一體環境或都數據庫有外網IP的情況,否則,可以不開啓訪火牆


4.僅允許內部合法的IP段訪問SSH遠程連接服務

iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 50718 -j ACCEPT

iptables -A INPUT -p tcp -s 203.82.11.0 --dport 50718 -j ACCEPT


5.對HTTP服務的不同限制

  a:對外提供http服務的業務,要允許http服務通過,並且不限制制IP

iptables -A INPUT -p tcp -dport 80 -j ACCEPT


  b:對內提供http服務的業務,一般用特殊端口,並且限制合法IP連接或***連接

iptables -A INPUT -s 192.168.1.0/24 -p tcp -m multiport -dport 8080,8081,8082 -j ACCEPT

iptables -A INPUT -s 203.82.11.0/24 -p tcp -m multiport -dport 8080,8081,8082 -j ACCEPT


6:snmp限制,允許以下IP地址來訪問我的161端口,不允其它IP訪問我的161端口

iptables -A INPUT -s 192.168.1.0/24 -p udp -dport 161 -j ACCEPT

iptables -A INPUT -s  203.82.11.0/24 -p udp -dport 161 -j ACCEPT


7:rsync服務的限制策略

iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 873 -j ACCEPT

iptables -A INPUT -s 203.82.11.0/24 -p tcp -m tcp --dport 873 -j ACCEPT

提示:如果沒有外網IP,可以不開啓訪火牆


8:nfs服務的限制

iptables -A INPUT -s 192.168.1.0/24 -p tcp -m multiport --dport 111,892,2049 -j ACCEPT

iptables -A INPUT -s 192.168.1.0/24 -p udp -m multiport --dport 111,892,2049 -j ACCEPT


9:ftp服務的限制

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

提示:以上內容表示已經建立連接的數據包,或者發出去的數據包允許通過


10.icmp協議的限制

iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT

iptables -A INPUT -p icmp -s 10.0.0.0/24 -m icmp --imcp-type any -j ACCEPT

iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT



######################################################################


案例:設置訪火牆

1.清除規則

iptables -F

iptables -Z

iptables -X


2.配置允許SSH登陸端口進入

iptables -A INPUT -p tcp --dport 22 -s 10.0.0.0/24 -j ACCEPT

提示:允許內部IP連接22號端口


3.配置允許lo接口的進入和流出

iptables -A  INPUT -i lo -j ACCEPT

iptables -A  OUTPUT -o lo -j ACCEPT


4.設置默認訪火牆和允許規則

iptables  --policy OUTPUT ACCEPT -t filter   //出防火牆隨便出

iptables --policy FORWARD DROP -t filter    //不允許穿過訪火牆轉發

iptables --policy INPUT DROP -t filter     //不允許進入訪火牆


5.開啓信任的IP段

iptables -A INPUT -s 124.43.62.96/27 -p all -j ACCEPT  //遠程機房

iptables -A INPUT -s 192.168.1.0/24 -p all -j ACCEPT   //內部網絡

iptables -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT   //信任網段


6.允許http服務無條件通過

iptables -A INPUT -p tcp --dport 80 -j ACCEPT


7.允許icmp類型協議通過

iptables -A INPUT -p icmp -m -icmp --imcp-type any -j ACCEPT

iptables -A INPUT -p icmp -s 10.0.0.1/24 -m --imcp-type any -j ACCEPT

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

提示:ESTABLISHED已經建立連接的包,RELATED和已有連接相關聯的包



永久保存成配置文件

執行上面的配置後,配置結果都在內存裏,這時一旦服務或者訪火牆重啓,所有的配置都會丟失,所以,在命令行的配置完畢後,我們需要把所有的配置保存成配置文件。方法如下:

法一:

/etc/init.d/iptables save


法二:

iptables-save > /etc/sysconfig/iptables

提示:/etc/sysconfig/iptables爲iptables的默認配置文件路徑


tcp狀態標誌:SYN同步,ACK應答,FIN結果,RST重設,URG緊急,PSH強追推送,ALL所有,NONE無


########################################################################################

把linux服務器配置爲上網網關和端口映射功能


DNAT 目的IP地址轉換

改變數據包目的IP地址等功能的技術,它可以使多臺服務器共享一個IP地址連入internet,並且對外提供服務(請注意是對外提供服務),通過對同一個外部IP地址分配不同的端口,映射不同的內部服務器IP和端口,從而實現提供各服務的目的,除了進行端口映射外,還可以配合SNA的功能一起使用,實現類似訪火牆設備才能實現DMZ功能,即IP的一對一映射


例:DNAT功能

iptables -t nat -A PREROUTING -d 202.3.2.3 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80

將所有的訪問ip202.3.3.3並且是80端口的請求,地址改寫爲內部的WEB服務器192.168.1.100的80端口,從而實現內部IP對外提供服務的目的


####


SNAT 源IP地址轉換

這是一種改變數據包源IP地址等功能技術,經常用來使多臺計算機共享一個internet地址訪問互聯網,如辦室內部機器上網,IDC機房的內部機器上網等


SNAT功能

iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 10.10.10.1:80

將源地址是 202.3.2.0的數據包地址改寫爲公網10.10.10.1出網,這是辦公室或機房內部服務器共享上網常用方法


####

MASQUERADE僞裝功能

爲動態源地址轉換,即當外部IP非固定IP時的場合經常使用的選項,例如ADSL拔號上網的情況,當然對固定單個或多個IP地址的情況,也可以使用MASQUERADE來完成共享上網


例如:

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

將源地址是192.168.0.0/24的數據包進行地址僞裝,此命令可以實現ADSL線路多臺計算機共享上網


#########

生產實例


sysctl -p 

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1  #把防火牆設爲1,轉發


172.16.1.3(linux內網IP eth1)    10.0.0.3(linux服務器 eth0)

linux服務器能ping通外網,但是172.16.1.0內部網絡不能ping外網,必須經過NAT轉發,172.16.1.0內部網絡IP地址轉發成 10.0.0.3(linux服務器 eth0),即可ping通外網


由於iptables是在內核中運行,我們需要檢查或載入如下基本相關內核模塊

modprobe ip_tables

modprobe iptables_filter

modprobe iptables_nat

modprobe ip_conntrack

modprobe ip_conntrack_ftp

modprobe ip_nat_ftp

modprobe ipt_state


lsmod|grep ip 

查看模塊是否加載成功


iptables -t nat -L -n #查看nat表


1.實現內網172.16.1.0能ping通外網

iptables -t nat -A POSTROUTING -s 172.16.1.0/255.255.255.0 -o eth0 -j SNAT --to-source 10.0.0.3

或以僞裝的方式ping能外網

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE


2.實現外部 10.0.0.3 IP地址端口到 172.16.1.17 內部服務器IP和端口映射

iptables -t nat -A PREROUTING -d 10.0.0.3 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.16.1.17:80


提示:以上方法僅公是端口之間的映射


實際上我們也可以實現IP一對一的映射,即DMZ的功能

-A PREROUTING -d 124.43.60.112 -j DNAT --to-destination 10.0.0.8

-A POSTROUTING -s 10.0.0.8 -o eth0 -j SNAT --to-source 124.43.60.112

-A POSTROUTING -s 10.0.0.0/255.255.255.0 -d 10.0.0.8 -j SNAT --to-source 10.0.0.254

以上內容需要寫入配置文件/etc/sysctl.conf


3.內網IP映射多個外網IP上網

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to-source 124.42.60.103-124.42.60.108

提示:通過映射多個內部IP到外網IP可以實現在外部看來你的IP變化


################################################################################


filter 防火牆


INPUT 主要用於主機防火牆,設置規則屏蔽處理進入本機的數據包


禁止 192.168.4.15 這個機器訪問我本機的 web 服務

iptables -t filter -A INPUT -s 192.168.4.15 -p tcp --dport 80 -j DROP


除了 192.168.4.12 這個機器 ,其他 192.168.4.0 網段的機器禁止 ping 我

iptables -t filter -A INPUT ! -s 192.168.4.12 -j DROP


FORWARD 主要用於網絡防火牆,設置規則處理穿過本機的數據包

禁止 192.168.4.11 的機器穿過防火牆訪問後端的機器

iptables -t filter -A FORWARD -s 192.168.4.11 -j DROP


nat 防火牆,需要打開內核 ip 轉發 (sysctl -w net.ipv4.ip_forward=1)


POSTROUTING 源地址僞裝

通過僞裝 192.168.4.0 網段的機器上網,首先防火牆本機可以訪問互聯網

iptables -t nat -A POSTROUTING -s 192.168.4.0 -j SNAT --to-source 防火牆外網ip地址


PERROUTING 目的地址轉換

所有訪問防火牆 10022 端口的請求都轉發給後端的 192.168.4.15 的 22 端口

iptables -t nat -A PREROUTING -p tcp --dport 10022 -j DNAT --to-destination 192.168.4.15:22


############################


網絡

RHEL6以ethX爲網卡命名

RHEL7網卡命名方式

(1)如果是以太網寫爲en,如果是無線局域網寫wl,如果是無線廣域網寫爲ww

(2)網卡的第三個字符,如果是主板集成設備,寫爲o,如果eno1;如果是獨立的網卡,寫爲s,如ens1;如果是擴展卡,表示物理位置,寫爲p,enp0s1;如果系統檢測不到網卡類型,可能第三個字符寫爲x,後面跟上該網卡的mac地址

防火牆

1、RHEL6中使用iptables作爲防火牆

2、iptables不是隻有防火牆功能

3、iptables使用四張表來實現四種功能

filter:防火牆

nat:網絡地址轉換

mangle:流量標記

raw:狀態跟蹤、

4、iptables的5條規則鏈

INPUT:數據包的目的地是防火牆

OUTPUT:數據包的源地址是防火牆

FORWARD:數據包穿越防火牆

PREROUTING:路由前

POSTROUTING:路由後

5、啓動防火牆

[root@vh11 ~]# service iptables start

6、查看規則

[root@vh11 ~]# iptables -t filter -L INPUT

[root@vh11 ~]# iptables -L INPUT

[root@vh11 ~]# iptables -L 

7、清空默認規則

[root@vh11 ~]# iptables -F

8、如果服務器是單一功能的服務器(如web服務),那麼可以設置除了http協議,其他的任何訪問都拒絕

9、將默認規則設置爲DROP,再設置允許訪問web和ssh服務

[root@vh11 ~]# iptables -P INPUT DROP

[root@vh11 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

[root@vh11 ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT

10、拒絕指定的地址訪問本機的http服務

[root@vh11 ~]# iptables -A INPUT -s 192.168.122.0/24 -p tcp --dport 80 -j REJECT

11、查看規則序號

[root@vh11 ~]# iptables -nL INPUT --line-numbers

12、根據序號刪除規則

[root@vh11 ~]# iptables -D INPUT 3

13、向INPUT鏈的頭部插入規則

[root@vh11 ~]# iptables -I INPUT 1 -s 192.168.122.0/24 -p tcp --dport 80 -j REJECT

14、iptables定義的狀態

NEW:新建立連接

ESTABLISHED:已建立連接

RELATED:相關的

INVALID:無效的

UNTRACKED:未跟蹤的

15、如果收到的數據包的狀態是ESTABLISHED或RELATED,則接受

[root@vh11 ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


################################

例:

允許所以有用SSH連接目的主機

先允許22端口能過,不然,把自己退出連接終端

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

iptables -t filter -P INPUT DROP


允許外面所有端口訪問我的80端口

iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT

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