Iptables

Iptables

擴展模塊string的用法: 檢查數據報文中應用層出現的字符串,與給定的模式patten中的字符串做匹配。

字符串匹配算法:kmp,bm

常用選項:

  --algo {kmp|bm}

--string ‘’STRING

--hex-string HEX_STRING:HEX_STRING爲編碼成16進制格式的字符串。

實例:

一臺Centos7.2主機,一塊網卡,ip=172.16.254.79 ,跑一個網站www.magedu.com,

主頁文件:

   Cat  /var/www/html/string.html

    <h1> magedu m19 </h1>

主機防火牆配置:

Systemctl stop firewalld.service

Systemctl disable firewalld

Yum -y install iptables-services

Iptables -F systemctl stop iptables.service 清除默認防火牆默認規則,以防干擾實驗。

Systemctl enable iptables.service

爲寫防火牆規則前:

  elinks -dump  http://172.16.254.79/string.html

     Magedu m19

訪問站點172.16.254.79 正常

因爲是對響應的網頁報文,做應用層字符串匹配,所以應在OUTPUT鏈上做過濾規則。

Iptables -A OUTPUT-s  172.16.254.79  -p tcp --sport 80  -d 172.16.0.0/16 -m string --string magedu --algo kmp  -j DROP  

 在局域網172.16.0.0/16中的任意主機不能訪問string.html網頁了。

Iptables-save > /iptables1.txt

Iptables -F

擴展模塊-m multiport 一次可以匹配多個離散端口和連續端口,大大減少規則數量。

常用選項:

   --dports PORT[,PORT,.......] 多個離散和連續的目標端口

   --sports PORT[,PORT,........] 多個離散和連續的目標端口

   --ports PORT[,PORT,..........] 多個離散和連續的源或目標端口

Yum -y install mariadb-server vsftpd  再安裝ftp,數據庫服務。

只開放tcp80,3306,21,22端口

Iptables -A INPUT -d 172.16.254.79 -p tcp -m multilport --dports 80,3306,21:22 -j ACCEPT

擴展模塊-m iprange:指定某個網段的連續ip地址範圍的主機,大大減少規則數量。

  常用選項:

     --src-range ip1-ip2  匹配連續的源ip地址範圍

     --dst-range ip1-ip2  匹配連續的目標ip地址範圍

Iptables-save > /iptables2.txt

Iptables -F

只允許172.16.0.0/16網絡的172.16.0.10172.16.0.20地址範圍的主機訪問172.16.254.79 80 端口即web服務。

 

Iptables -A INPUT-d 172.16.254.79  -p tcp --dport 80 -m iprange --src-range 172.16.0.10-172.16.0.20 -j ACCEPT

Iptables-save > /iptables3.txt

Iptables -F

擴展模塊-m connlimit: 基於連接數進行限制,對每個ip發起的併發連接數進行限制。

   常用選項:

      --connlimit-above #------超過#個併發連接數一般拒絕

     --connlimit-upto #------小於#個併發連接數一般允許

只允許任意主機任意流量併發連接172.16.254.79的最大連接數爲2

Iptables -A INPUT -d 172.16.254.79 -m connlimit --connlimit-above 2 -j DROP

內核自動會裝載如下幾個模塊

  [root@www Desktop]# lsmod | grep conntrack

nf_conntrack_ipv4      14862  1

nf_defrag_ipv4         12729  1 nf_conntrack_ipv4

nf_conntrack          105745  2 xt_connlimit,nf_conntrack_ipv4

在內核的內存空間會生成一個記錄連接數的文件:

Cat  /proc/net/nf_conntrack

擴展模塊-m time :基於時間塊的訪問控制,根據報文到達的時間與指定的時間塊進行匹配。

  常用選項:

 --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] --起始日期時間,未指定默認爲1970-01-01 00:00:00

 --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]--結束日期時間,未指定默認爲2038-01-19 04:17:07

--timestart hh:mm[:ss]--開始時間

--timestop hh:mm[:ss]--結束時間=-

 [!] --weekdays day[,day...]   ----- 指定時間爲星期幾

 [!] --monthdays day[,day...]------指定時間爲幾號

實例:要求周2,4,6的工作時間(09:00:00--18:00:00)能夠訪問httpd服務。

1.如果INPUT鏈上的默認策略是拒絕:

Iptables -A INPUT -p tcp --dport 80 -d 172.16.254.79 -m --timestart  01:00:00 --timestop 10:00:00 --weekdays Tue,Thu,Sat -j ACCEPT

2.如果INPUT鏈上的默認策略是允許:

拒絕掉周2,4,6的非工作時間和周1,3,5,7的所有時間,剩餘的時間就是周2,4,6的工作時間

Iptables -AINPUT -p tcp --dport 80 -d 172.16.254.79 -m time --weekdays Mon,Wed,Fri,Sun -j DROP

Iptables -A INPUT -p tcp --dport 80 -d 172.16.254.79 -m time --weekdays Tue,Thu,Sat --timestart 10:00:01 --timestop 00:59:59 -j DROP      (注意:centos7.2 時間是UTC時間)

 

擴展模塊-m limit:基於收發報文的速率進行匹配

     常用選項:

--limit rate[/second|minute|hour|day]----每秒每分鐘每小時每天多少個報文,指平均速率

--limit-burst  number 指峯值速率。

實例:

限制ping包的峯值速率10個,平均速率爲12/min

Iptabels -A INPUT-p icmp -m limit --limit 12/min --limit-burst 10 -j ACCEPT

Iptables _A INPUT -p icmp -j DROP ----拒絕掉速度超過12/min的報文

 

擴展模塊-m status:基於連接狀態追蹤機制進行訪問控制

    常見的連接狀態有以下幾種:

1.NEW:新建立連接時(連接追蹤模板中無相應條目的),第一個請求報文請求建立連接

2.ESTABLISHED:連接建立後的通信過程

3.RELATED:與其他已建立的連接,有關聯的連接(如:ftp服務的數據連接)

4.INVALIED:無法識別的狀態,即非法連接

5.UNTRACKED:未追蹤的連接

實例:iptables 開放ftp服務

Iptables -A INPUT -d 172.16.254.79  -t tcp --dport 21 -j ACCEPT

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

手動加載內核netfilternf_conntrack_ftp擴展模塊:

  Modprobe nf_conntrack_ftp

練習題:INPUTOUTPUT默認策略都爲DROP

1.允許本機PING別的主機,不允許別的主機ping本機。

Iptables  -A INPUT-p icmp -m icmp --icmp-type echo-reply -j ACCEPT

Iptables  -A OUTPUT -p icmp -m --icmp-type echo-request -j ACCEPT

2.拒絕tcp的標誌位全爲1及全爲0的報文訪問本機

Iptables -A INPUT-p tcp  -m tcp  --tcp-flags ALL ALL -j DROP

Iptables -A INPUT -p tcp -m tcp --tcp-flags ALL NONE -j DROP

3.開放本機的ssh服務給172.16.x.1-172.16.x.100的主機,x爲你的學號,新請求建立的的速度一分鐘不得超過2個:僅允許響應的報文通過其服務端口離開本機。

Iptables -A INPUT -p tcp -m tcp --dport 22 --syn -m iprange --src-range 172.16.22.1-172.18.22.100 -m recent --name sshpool --rcheck --seconds 60 --hitcount 2 -j DROP

Iptables -A INPUT -p tcp -m tcp --dport 22 --syn  -m iprange  --src-range 172.16.22.1-172.18.22.100  -m recent --name sshpool --set -j ACCEPT

Iptables -A INPUT -p tcp -m tcp -m state --state ESTABLISHED -j ACCEPT

Iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

4.在工作時間,即週一到週五的8:30-18:00,開放本機的ftp服務給172.16.0.0網絡中的主機訪問;數據下載的請求次數每分鐘不得超過5個。

Iptables -A INPUT -p tcp -m tcp --dport 21 -s 172.16.0.0/16 -m time --weekdays Mon,Tue,Wed,Thu,Fri  --timestart  08:30  --timestop 18:00  -j ACCEPT

Iptables -A INPUT -m state --state RELATED -m recent --name ftprequest --rcheck --seconds 60 --hitcount 5 -j DROP

Iptables -A INPUT -m state --state RELATED -m recent --name ftprequest --set -j ACCEPT

Iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

Iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT

最後手動加載nf_conntrack_ftp模塊

modprobe nf_conntrack_ftp

 

5.限制本地主機的Web服務器在週一不許訪問,新請求的速率不能超過100個每秒;web服務器包含了admin字符串的頁面不許訪問;web服務器僅允許響應報文離開本機。

Iptables -A INPUT -p -tcp -m tcp --dport 80 --syn -m time ! --weekdays Mon --m recent  --name httpdrequest --rcheck --seconds 1 --hitcount 100 -j DROP

Iptables -A INPUT-p tcp -m tcp --dport 80 --syn -m time ! --weekdays Mon -m recent --name httpdrequest --set -j ACCEPT

Iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

 

Iptables -A OUTPUT -p tcp -m tcp --sport 80 -m string --string admin --algo kpm -m state --state ESTABLISHED -j ACCEPT

SNAT--- 首先出去的報文是源地址轉換,其進來報文是目標地址轉換

實驗環境:vware-workstation

  四臺虛擬主機: centos 6.7B,centos7.2A,centos6.7A,centos7.2c

Centos6.7B 一塊網卡eth0  vnet1  ip 10.0.0.10/8

Centos7.2A  一塊網卡 eth0 vnet1  ip 10.0.0.20/8

上述兩臺虛擬主機內網vnet1

 

Centos6.7A是一臺網關防火牆 兩塊網卡etho  ip 10.0.0.100/8 ,eth1 192.168.0.110/24(wifi自動獲得,網關192.168.0.1)  vnet1  eth1橋接到真機網卡,且真機能上網。

Centos7.2C 一塊網卡 eth0 192.168.0.109(wifi自動獲得)

 

實驗目的:centos7.2C 不配一條到10.0.0.0/8網段的靜態路由,要讓內網的centos6.7B,centos7.2A 通過centos6.7A防火牆的SNAT功能,ping centos7.2C,且能上互聯網。

 

Centos6.7B 的網絡配置:

Vim /etc/sysconfig/network-script/ifcfg-eth0

   DEVICE=eth0

   ONBOOT=on

   BOOTPROTO=static

   DNS1=192.168.0.1

   IPADDR=10.0.0.10

   NETMASK=255.0.0.0

   :wq

添加默認路由:route add default gw 10.0.0.100(防火牆的內網網卡地址)   

重啓網絡服務:service network restart

Centos7.2A的網絡配置:

       nmcli connection modify eno16777728 connection.autoconnect yes ipv4.method manual ipv4.addresses 10.0.0.20/8 ipv4.gateway 10.0.0.1 ipv4.dns 192.168.0.1

重啓網絡服務:systemctl restart network.service

 

Centos6.7A 防火牆的網絡配置:

     eth0 vnet1

 

Vim /etc/sysconfig/network-script/ifcfg-eth0

   DEVICE=eth0

   ONBOOT=on

   BOOTPROTO=static

   IPADDR=10.0.0.100

   NETMASK=255.0.0.0

   :wq

eth1 橋接,自動獲得ip gateway dns

重啓網絡服務:service network restart

打開防火牆主機的內核轉發功能:

臨時打開:1. echo 1 > /proc/sys/net/ipv4/ip_forward

          2. sysctl  -w net.ipv4.ip_forward=1

永久打開:vim /etc/sysctl.conf

         net.ipv4.ip_forward=1

:wq

先清除iptables FORWARD鏈上的規則,以免干擾實驗:

   Iptables -F FORWARD

再在FORWARD鏈上添加規則

  Iptables -A FORWARD -j ACCEPT ----- 一切流量都轉發,因爲內網主機要上互聯網。

要做SNAT ,必須在POSTROTUING鏈上做

 Iptables -A POSTROUTING -j SNAT --to-source 192.168.0.110

 

DNAT :首先轉換的是目標地址,然後轉換的是源地址,而且只能在PREROUTING鏈上做,否則就晚了。

實驗要求:centos7.2C 通過ssh服務,要管理防火牆主機,內網兩臺主機。

Ssh到防火牆不用配置

在防火牆上映射192.168.0.110:100--------> 10.0.0.10:22

Iptables -t nat -A PREROTUING -p tcp -m tcp --dport 100 -d 192.168.0.110 -i eth1 -j DANT --to-destination 10.0.0.10:22

在防火牆上映射192.168.0.110:200---------> 10.0.0.20:22

Iptables -t nat -A PREROTUING -p tcp -m tcp  --dport 200 -d 192.168.0.110 -i eth1 -j DANT --to-destination 10.0.0.20:22

動作:-j REDIRECT 報文目標端口轉換,只能在PRIROUTINGOUTPUT鏈中。

實例:在防火牆上開啓httpd服務,端口爲8080

centos7.2A 上通過80端口訪問防火牆的httpdweb服務。

Iptables -t nat -A PREROUTING -i eth0 -d 172.16.0.110 -p tcp --dport 80 -j REDIRECT --to-port 8080

http://172.16.0.110/test.html

如果防火牆本機也能通過80端口,訪問到httpd提供的web服務(8080

Iptbles -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8080  

 

 

 


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