天天看點

iptables實作網絡防火牆及位址轉換iptables主機防火牆功能及常用指令 網絡防火牆:FORWARD 舉例說明:

FSM:Finite State Machine 有限狀态機

用戶端:closed -->syn_sent -->established --> fin_wait_1 -->find_wait_2 --> timewait(2MSL)

伺服器:closed -->listen -->syn_rcvd -->establised --> close_wait -->last_ack

-m state:追蹤連接配接狀态

   模闆:記憶體中會維持一個空間

       NEW

       ESTABLISHED

       RELATED

       INVALID

在前端的伺服器中盡量不要開啟追蹤連接配接

iptables子指令

  規則:-A,-I,-D,-R

  鍊:-N,-X,-F,-Z,-E,-P -S

      通:預設 DROP

      堵:預設ACCEPT

  顯示:-L -S

      -L 

       -n -v -x --line-numbers

  規則定義:iptables -t table -A|-I|-R chain 比對條件 -j target

      比對條件

         通用比對:-s -d -i -o -p

         擴充比對

             隐含擴充

               -p tcp

                --sport --dport --tcp-flags

                --syn

               -p udp

                 --sport --dport

               -p icmp

                  --icmp-type

                    echo-request 8

                    echo-reply 0

              顯示擴充:

                 -m state 

                    --state

                 -m multiport

                    --sprots, --dports,  --ports

                 -m iprange

                    --src-range, --dst-range

                 -m string

                    -algo {bm|kmp} --string --hex-string

                 -m connlimit

                   ! --connlimit-above

                 -m limit

                   --limit n(/second|/minute|/hour|/day), --limit-burst

                 -m time

                    --datestart --datestop

                    --timestart -- timestop

                    --weekdays

           -j

             ACCEPT,DROP,REJECT,LOG,REDIRECT,SNAT,DNST,MASQUERADE,MARK,RETURN,自定義鍊

四表:raw mangle nat filter 

五鍊:PREROUTING INPUT FOEWARD OUTPUT POSTOUTING

規則儲存和恢複:iptables-save iptables-restore

主機防火牆:INPUT OUTPUT

    路由:

    NAT:

/proc/sys/net/ipv4/ip_forward

位址屬于核心,位址目前屬于主機的都給予響應

路由:對Linux主機而言,設定/proc/sys/net/ipv4/ip_forward的值為1,即為開啟路由

     路由表的生成

       靜态:手動添加

       動态:基于路由協定學習,RIP2 OSPF

NAT:網絡位址轉換

     A:10

     B:172.16-172.31

     C:192.168.0-192.168.255

     NAT: 工作于傳輸層和網絡層

        過載技術

        Basic NAT:靜态NAT

        NAPT:動态NAT,網絡位址端口轉換

             源位址轉換:SNAT 用于内網主機通路網際網路

             目标位址轉換:DNAT

             讓網際網路上主機通路本地内網中的某伺服器上的服務(釋出)

        iptables基于SNAT和DNAT這兩個目标實作位址轉換技術

        -j SNT --to-source SIP

          規則添加:POSTROUTING鍊

        -j MASQUERAADE  動态擷取

        -j DNAT --to-destination DIP{:PORT}

        支援端口映射

        基于nat表

           PREROUTING

           POSTROTING

           OUTPUT

     Proxy(代理):工作在應用層

網絡拓撲

172.16.1.10能ping通192.168.8.40,但不能ping通192.168.8.39

192.168.8.39能Ping通172.16.1.254,但不能ping通172.16.1.10

配置開啟路由轉發功能

# vim /etc/sysctl.conf 

net.ipv4.ip_forward = 1

讓配置生效

# sysctl -p

也可以,采用如下指令臨時生效

# sysctl -w net.ipv4.ip_forward=1

驗證

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

windows用戶端添加路由,也可以實作通路

route add 172.16.1.0 mask 255.255.255.0 172.16.1.254

iptables實作網絡防火牆及位址轉換iptables主機防火牆功能及常用指令 網絡防火牆:FORWARD 舉例說明:

将轉發規則屏蔽,則無法通路

# iptables -P FORWARD DROP

放行192.168.8.39中80口的通路

# iptables -A FORWARD -s 172.16.1.10 -d 192.168.8.39 -p tcp --dport 80 -j ACCEPT

# iptables -A FORWARD -d 172.16.1.10 -s 192.168.8.39 -p tcp --sport 80 -j ACCEPT

放行172.16.1.0/24網段對192.168.8.0網段22号端口的通路

# iptables -A FORWARD -s 172.16.1.0/24 -d 192.168.8.0/24 -p tcp --dport 22 -j ACCEPT

# iptables -A FORWARD -s 192.168.8.0/24 -d 172.16.1.0/24 -p tcp --sport 22 -j ACCEPT

iptables實作網絡防火牆及位址轉換iptables主機防火牆功能及常用指令 網絡防火牆:FORWARD 舉例說明:

重新編寫規則

# iptables -F FORWARD

# iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT

# iptables -R FORWARD 2 -d 192.168.8.39 -p tcp -m multiport --dports 22,80 -m state --state NEW -j ACCEPT

nat規則舉例

初始化:

# iptables -P INPUT ACCEPT

# iptables -P OUTPUT ACCEPT

//需要accept否則将無法通過路由轉發任何資料包

# iptables -P FORWARD ACCEPT

iptables實作網絡防火牆及位址轉換iptables主機防火牆功能及常用指令 網絡防火牆:FORWARD 舉例說明:

外網端:172.16.1.10

内網端:192.168.8.39

//将通路172.16.1.254 80端口的服務映射到8.89的80端口上

# iptables -t nat -F

# iptables -t nat -A PREROUTING -d 172.16.1.254 -p tcp --dport 80 -j DNAT --to-destination 192.168.8.39

在目标8.39的web日志中可以看到是172.16.1.10通路的,而不是192.168.8.40路由通路

iptables實作網絡防火牆及位址轉換iptables主機防火牆功能及常用指令 網絡防火牆:FORWARD 舉例說明:

禁止172.16.1.10的IP通路

# iptables -I FORWARD -s 172.16.1.10 -j REJECT

通過外網位址172.16.1.254的22022端口通路192.168.8.39的22号端口(相當于端口映射)

# iptables -t nat -A PREROUTING -d 172.16.1.254 -p tcp --dport 22022 -j DNAT --to-destination 192.168.8.39:22

iptables實作網絡防火牆及位址轉換iptables主機防火牆功能及常用指令 網絡防火牆:FORWARD 舉例說明:
iptables實作網絡防火牆及位址轉換iptables主機防火牆功能及常用指令 網絡防火牆:FORWARD 舉例說明:
iptables實作網絡防火牆及位址轉換iptables主機防火牆功能及常用指令 網絡防火牆:FORWARD 舉例說明:

172.16.1.10 和 172.16.1.254的eth1都放置于 vmnet2虛拟交換環境中

iptables實作網絡防火牆及位址轉換iptables主機防火牆功能及常用指令 網絡防火牆:FORWARD 舉例說明:

外網接口:

DEVICE=eth0

ONBOOT=yes

BOOTPROTO=none

IPADDR=192.168.8.15

BROADCAST=192.168.8.255

NETMASK=255.255.255.0

GATEWAY=192.168.8.254

NETWORK=192.168.8.0

DNS配置

/etc/resolve.conf

nameserver 192.168.8.251

内網接口:

# cd /etc/sysconfig/network-scripts/

# cp ifcfg-eth0 ifcfg-eth1

DEVICE=eth1

IPADDR=172.16.1.254

BROADCAST=172.16.1.255

NETWORK=172.16.1.0

172.16.1.10

DNS:192.168.8.251

GAWEWAY:172.16.1.254

iptables實作網絡防火牆及位址轉換iptables主機防火牆功能及常用指令 網絡防火牆:FORWARD 舉例說明:

配置192.168.8.251

# vim /etc/sysctl.conf

打開防火牆轉發功能

sysctl -p 使配置生效

在防火牆上添加規則,對來自内網 172.16.1.0網段的機器進行源位址轉換

# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 192.168.8.15

tupdump抓包

nginx用來做什麼?

    靜态資源的web伺服器

   http伺服器反向代理

通路量統計網站:

基本文法

========

過濾主機

--------

- 抓取所有經過 eth1,目的或源位址是 192.168.1.1 的網絡資料

# tcpdump -i eth1 host 192.168.1.1

- 源位址

# tcpdump -i eth1 src host 192.168.1.1

- 目的位址

# tcpdump -i eth1 dst host 192.168.1.1

過濾端口

- 抓取所有經過 eth1,目的或源端口是 25 的網絡資料

# tcpdump -i eth1 port 25

- 源端口

# tcpdump -i eth1 src port 25

- 目的端口

# tcpdump -i eth1 dst port 25網絡過濾

# tcpdump -i eth1 net 192.168

# tcpdump -i eth1 src net 192.168

# tcpdump -i eth1 dst net 192.168

協定過濾

# tcpdump -i eth1 arp

# tcpdump -i eth1 ip

# tcpdump -i eth1 tcp

# tcpdump -i eth1 udp

# tcpdump -i eth1 icmp

常用表達式

----------

非 : ! or "not" (去掉雙引号)

且 : && or "and"

或 : || or "or"

- 抓取所有經過 eth1,目的位址是 192.168.1.254 或 192.168.1.200 端口是 80 的 TCP 資料

# tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dsthost

192.168.1.200)))'

- 抓取所有經過 eth1,目标 MAC 位址是 00:01:02:03:04:05 的 ICMP 資料

# tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'

- 抓取所有經過 eth1,目的網絡是 192.168,但目的主機不是192.168.1.200 的 TCP 資料

# tcpdump -i eth1 '((tcp) and ((dst net192.168) and (not dst host 192.168.1.200)))'

- 隻抓 SYN 包

# tcpdump -i eth1 'tcp[tcpflags] = tcp-syn'

- 抓 SYN, ACK

# tcpdump -i eth1 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] &tcp-ack != 0'

抓 SMTP 資料

# tcpdump -i eth1 '((port 25) and (tcp[(tcp[12]>>2):4] = 0x4d41494c))'

抓取資料區開始為"MAIL"的包,"MAIL"的十六進制為0x4d41494c。

抓 HTTP GET 資料

--------------

# tcpdump -i eth1 'tcp[(tcp[12]>>2):4] = 0x47455420'

"GET "的十六進制是 47455420

抓 SSH 傳回

---------

# tcpdump -i eth1 'tcp[(tcp[12]>>2):4] = 0x5353482D'

"SSH-"的十六進制是 0x5353482D

# tcpdump -i eth1 '(tcp[(tcp[12]>>2):4] = 0x5353482D) and(tcp[((tcp[12]>>2)+4):2]

= 0x312E)'抓老版本的 SSH 傳回資訊,如"SSH-1.99.."

- 抓 DNS 請求資料

# tcpdump -i eth1 udp dst port 53

其他

----

-c 參數對于運維人員來說也比較常用,因為流量比較大的伺服器,靠人工 CTRL+C 還是

抓的太多,于是可以用-c 參數指定抓多少個包。

# time tcpdump -nn -i eth0 'tcp[tcpflags] = tcp-syn' -c 10000 > /dev/null

上面的指令計算抓 10000 個 SYN 包花費多少時間,可以判斷通路量大概是多少。

實時抓取端口号8000的GET包,然後寫入GET.log

tcpdump -i eth0 '((port8000) and (tcp[(tcp[12]>>2):4]=0x47455420))' -nnAl -w /tmp/GET.log

      本文轉自rshare 51CTO部落格,原文連結:http://blog.51cto.com/1364952/1956943,如需轉載請自行聯系原作者

繼續閱讀