iptables 簡單學習

預熱:網絡基礎

什麼是交換?什麼是路由?什麼是路由表?node

交換是指同網絡訪問(兩臺機器連在同一個交換機上,配置同網段的不一樣IP地址就能夠直接通信)web

路由就是跨網絡訪問(路徑選擇)shell

路由表是記錄路由信息的表vim

1、查看路由表信息

//route命令用來查看和設置路由表信息

[root@ceshi ~]# route -n
Kernel IP routing table
目標網絡            網關          子網掩碼        路由標誌                    網卡
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 eth0
0.0.0.0         10.1.1.1        0.0.0.0         UG    0      0        0 eth0
                                                U:up,啓動狀態
                                                UG:該網關爲路由器

討論1:
按上圖中的路由表來看,若是ping一個公網IP(如ping 14.200.151.38),應該怎麼走?
1)先看目標IP是否爲本機IP,若是是,則直接訪問本地;若是不是,則找路由表裏是否有想訪問的網段
2)若是路由表有則從這個路由條目後面指定的網卡出去;若是路由表裏沒有你要訪問的網段,則會找默認路由(也就是網關)
討論2:
按上面的路由表來看,若是ping一個局域網IP爲10.1.1.10,怎麼走?
直接走本地路由從eth0網卡出去
討論3:
如何加網關和刪除網關,加網關有什麼要求?
route add default gw x.x.x.x        臨時添加網關,立刻生效
route del default gw x.x.x.x        臨時刪除網關,立刻生效
永久修改網關:
vim /etc/sysconfig/network-scripts/ifcfg-eth0
GATEWAY=X.X.X.X
或者
vim /etc/rc.local
..
route add default gw x.x.x.x

注意事項:
1.加網關只能加你已經有的路由網段裏的一個IP才行(此IP不必定存在)
2.加網關能夠不用指定子網掩碼(由於是已有的一個網段的IP,全部掩碼已經確認了)

討論4:
一個Linux服務器上能有幾個有效網關?
準確來講,一個路由表上能夠加多個網關,但只有一個生效

討論5:
一臺Linux上若是有雙物理網卡,請問可不能夠兩個網卡配置同網段的不一樣IP呢?
eth0 10.1.1.1/24
eth1 10.1.1.2/24
若是兩個網卡同網段,則會有下面兩條路由
10.1.1.0            eth0
10.1.1.0            eth1

結果:
它會實現從兩張網卡進來的包,卻從一張網卡出去,問題將產生了。假設eth0網卡有問題,路由表咯匹配到第一條後,依然走eth0,不走eth1
解決方法(好比多路由表或者雙網卡綁定)

2、IP路由選擇實驗

1.route相關命令

route -n    查看路由,顯示IP,不解析
route del default   刪除默認路由
route add default gw 192.168.1.110 添加一個默認網關,把全部不知道的網絡交給網關來轉發

route add -net 192.168.2.0/24 dev eth0  對一個網絡添加一個新的路由(另外一個網段)
route add -host 192.168.3.1 gw  192.168.1.110   對一個具體的IP添加路由

2.實驗需求

環境準備:
node1:10.1.1.1和192.168.0.1  做爲網關服務器,開啓路由轉發功能/proc/sys/net/ipv4/ip_forward
node2:172.16.0.254
node3:10.12.0.254
要求:
實現不一樣網絡(10.12.0.0/24和172.16.0.254/24)之間的互通,使用第三方主機node1做爲路由進行轉發

具體步驟

3.具體步驟





Iptables 防火牆

課程目標

  • 瞭解iptables的基本知識和工做原理
  • 掌握基本的語法結構
  • 掌握常見的iptables規則配置
  • 可以根據需求對服務器進行iptables的基本配置

思考1:服務如何進行網絡訪問控制?安全

​ 配置文件、xinetd、tcp_wrappers服務器

思考2:系統如何進行訪問控制?網絡

​ 防火牆app

1、防火牆介紹

  • 防火牆分類和做用
    • 硬件防火牆
    • 軟件防火牆

做用:ssh

防火牆做爲內部網和外部網之間的一種訪問控制設備,經常安裝在內部網絡和外部網絡的邊界上。防火牆具備很好的網絡安全保護做用,入侵者必須首先穿過防火牆的安全防線,才能接觸目標計算機。能夠將防火牆配置成許多不一樣保護級別。高級別的保護可能會禁止一些服務,如視頻流等,但至少這是你本身的保護選擇。

主要做用:
一、Internet防火牆能夠防止Internet上的危險傳播到網絡內部
二、能強化安全策略
三、能有效記錄Internet上的活動

2、Iptables防火牆介紹

  • Linux系統內核集成了網絡訪問控制的功能,經過netfilter模塊來實現,是內核的一部分(內核空間)
  • 用戶層(用戶空間)能夠經過iptables程序對netfilter進行控制管理,進而實現網絡的訪問控制
  • TCP_Wrappers也是一個網絡訪問控制的一個工具,做用在應用層

總結:

  • netfileter 模塊 內核空間,是內核一部分
  • iptables組件 用戶空間,提供管理防火牆的手段,它主要做用在傳輸層

3、Iptables防火牆結構

  • 四張表

    • filter:實現對數據包的過濾
    [root@ceshi ~]# iptables -t filter -L
    • nat:地址轉換功能(源地址和目標地址)
    • mangle:對數據包進行修改,例如給數據包打標記MARK
    • raw:主要是鏈接追蹤
  • 五條鏈

    [root@ceshi ~]# iptables -t mangle -L
    Chain PREROUTING (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain POSTROUTING (policy ACCEPT)
    target     prot opt source               destination

總結:iptables是由表組成的,表是鏈的集合,鏈是規則的集合

4、防火牆工做原理(數據包流向)

5、Iptables 基本語法

  • iptables [-t 表名] 命令選項 [鏈名] [規則號碼] [條件匹配] [-j 目標動做]

    ​ 小寫 大寫 大寫 小寫 大寫

    說明:

    表名和鏈名:用於指定iptables命令所操做的表和鏈

    命令選項:用於指定管理iptables規則的方式(好比:插入、增長、刪除、查看等)

    規則號碼:用於指定規則的編號

    條件匹配:用於指定對符合什麼樣條件的數據包進行處理(好比:什麼協議、出入網卡等)

    目標地址:用於指定數據包的處理方式(好比:容許處理、拒絕、丟棄等)

    iptables -L
    iptables -t filter -L
    iptables -t nat -L
    iptables -t raw -L
    iptables -t mangle -L
  • iptables 的啓動和關閉及保存

    /etc/rc.d/init.d/iptables //腳本文件 軟鏈接 /etc/init.d/iptables 
    //臨時中止|啓動|查看狀態|從新加載|從新啓動
    service iptables stop|start|status|reload|restart
    //開機是否自啓動
    chkconfig iptables off|on
    //永久保存規則
    vim /etc/sysconfig/iptables
    ...
  • iptables 經常使用的命令選項

    -L                查看
    -A                追加,放置在最後一條
    -I                插入,默認插入成第一條
    -D                刪除
    -F                清空flush
    -P                設置默認策略policy
    
    處理動做:
    filter表:
    -j ACCEPT     容許
    -j DROP           丟棄,沒有任何提示信息
    -j REJECT     拒絕,有提示信息
    -j LOG            寫日誌     /var/log/messages   而後將數據包傳遞給下一條規則
    
    nat表:
    -j SNAT           源地址轉換 POSTROUTING
    -j DNAT           目標地址轉換 PREROUTING

1>Filter表

1.示例1:(所有容許/拒絕/丟棄)

iptables -t filter -A INPUT -j DROP     添加規則,丟棄全部進來的數據包
iptables -t filter -A input -j ACCEPT   添加規則,容許全部進來的數據包

//指定位置插入規則,容許全部進來的數據包第1條規則
iptables -t filter -I INPUT 1 -j ACCEPT

iptables -t filter -A OUTPUT -j DROP    添加規則,丟棄全部出去的數據包

//指定位置插入規則,拒絕全部進來的數據包爲第3條規則
iptables -t filter -I INPUT 3 -j REJECT

iptables -t filter -L --line-numbers    查看規則編號
iptables -t filter -R INPUT 1 -j ACCEPT 覆蓋已有規則

iptables -t filter -D INPUT 3   刪除INPUT鏈的第3條規則
iptables -t filter -F   清空filter表的全部規則

iptables -A INPUT -j LOG    增長規則,先寫日誌,而後將數據包傳遞給下一條規則
iptables -I INPUT 2 -j DROP 

iptables -t filter -P INPUT DROP    設置鏈上的默認規則
iptables -D INPUT 1
說明:若是不指定表名,默認操做filter表

2.示例2:(根據源和目標地址匹配)

匹配的條件:
-s 192.168.134.0/24     源地址
-d 192.168.134.1        目標地址
-p tcp|udp|icmp         協議
-i lo       input 從lo接口進入的數據包
-o eth0     output 從eth0出去的數據包
-p tcp --dport 80   目標端口是80,必須和-p tcp|udp連用
-p udp --dport 53   目標端口是53/udp
iptables -t filter -A INPUT -s 10.1.1.3 -j ACCEPT   容許源地址爲10.1.1.3進入
iptables -t filter -A INPUT ! -s 10.1.1.3 -j ACCEPT 不容許源地址爲10.1.1.3進入
iptables -t filter -A IPPUT -s 10.1.1.3 -j DROP     拒絕源地址10.1.1.3進入
iptables -t filter -A OUTPUT -d 10.1.1.3 -j DROP    丟棄到達目標地址爲10.1.1.3的包
iptables -t filter -A OUTPUT ! -d 10.1.1.3 -j ACCEPT 丟棄到達目標地址爲10.1.1.3的包

iptables -t filter -A INPUT -d 10.1.1.2 -j DROP     丟棄全部到目標地址爲10.1.1.2的包
iptables -t filter -A OUTPUT -s 10.1.1.2 -j ACCEPT  源地址爲10.1.1.2出去的包所有容許

3.示例3:(根據協議匹配過濾)

iptables -t filter -A INPUT -p tcp -s 10.1.1.2 -j DROP
iptables -t filter -A INPUT -p tcp --dport 22 -s 10.1.1.2 -j DROP   拒絕ssh

iptables -A INPUT -s 10.1.1.3 -p icmp -j DROP
iptables -A INPUT -s 10.1.1.3 -p tcp -j DROP
iptables -A INPUT -s 10.1.1.3 ! -p tcp -j DROP

icmp協議中:
icmp-type 8 類型爲8表明請求回顯,ping 請求
icmp-type 0 類型爲0表明回顯應答,ping 應答

需求1:只容許本身ping通別人,不容許別人ping通本身(在policy DROP前提下加規則)
iptables -t filter -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -t filter -A INPUT -P icmp --icmp-type 0 -j ACCEPT

需求2:(input和output都是DROP狀況下)
只容許本身和10.1.1.2相互ping通,其餘人不能ping通本身,可是容許本身ping通別人
iptables -A INPUT -s 10.1.1.2 -p icmp --icmp-type 8 -j ACCEPT

4.示例4:(根據端口匹配過濾)

iptables -A INPUT -s 10.1.1.2 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -s 10.1.1.2 -p tcp --dport 20:21 -j ACCEPT
iptables -A INPUT -s 10.1.1.2 -p tcp --dport 22 -j ACCEPT

echo 0> /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1> /proc/sys/net/ipv4/icmp_echo_ignore_all


練習:
1.禁止你的另一臺服務器訪問你的80端口,在INPUT和OUTPUT
iptables -A INPUT -s 10.1.1.3 -p tcp --dport 80 -j DROP
iptables -A OUTPUT -s 10.1.1.3 -p tcp --dport 80 -j DROP
2.只容許別人訪問你的80端口
iptables -A INPUT ! -s 10.1.1.1 -p tcp --dport 80 -j ACCEPT 
3.拒絕全部人登陸你的sshd服務
iptables -A INPUT -p tcp --dport 22 -j DROP
4.只容許你能夠ping通另一臺主機,可是不容許它ping通你
INPUT 默認策略:DROP
OUTPUT :DROP
iptables -t filter -A OUTPUT -p icmp --icmp-type 8 -d 10.1.1.2 -j ACCEPT
iptables -t filter -A INPUT -p icmp --icmp-type 0 -s 10.1.1.2 -j ACCEPT

1.5 iptables 內置模塊(擴展)

-m 參數+<模塊名>
1.multiport 多端口     目的:指定多個不連續的端口,減小iptables的條目,達到優化效果
用法:
iptables -m multiport --help
multiport match options:
[!] --source-ports port[,port:port,port...]
 --sports ...
                                match source port(s)
[!] --destination-ports port[,port:port,port...]
 --dports ...
                                match destination port(s)
[!] --ports port[,port:port,port]
                                match both source and destination po
                                                     
示例:
iptables -t filter -A INPUT -s 10.1.1.2 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -s 10.1.1.2 -p tcp --dport 80 -j ACCEPT
等於:
iptables -t filter -A INPUT -s 10.1.1.2 -p tcp -m multiport --dports 22,80 -j ACCEPT

2.iprange ip範圍
用法:
iptables -m iprange --help
iprange match options:
[!] --src-range ip[-ip]    Match source IP in the specified range
[!] --dst-range ip[-ip]    Match destination IP in the specified range

iptables -t filter -I INPUT -m iprange --src-range 10.1.1.2-10.1.1.10 -p tcp --dport 80 -j ACCEPT

3.state  鏈接狀態   目的:根據鏈接請求的狀態進行數據過濾
狀態值:
NEW     首次訪問,好比:打開網站看到首頁文件,後續點擊叫後續操做
ESTABLISHED 鏈接完成 1)某服務的後續全部訪問 2)服務器的全部響應
RELATED:    相關聯的鏈接,好比ftp鏈接,命令鏈接成功後,創建數據鏈接
INVALID:    無效鏈接

示例:
iptables -A OUTPUT -p tcp -m multiport --sports 20:22,80,137,445 -j ACCEPT
等於:
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT


例子:ftp開啓防火牆下被動模式
1.ftp服務,須要固定被動模式下的端口
vim /etc/vsftpd/vsftpd.conf
增長如下內容
pasv_min_port=2000
pasv_max_port=3000
重啓服務
service vsftpd restart

iptables -t filter -A INPUT -p tcp --dport 2000:3000 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 2000:3000 -j ACCEPT
iptables -t filter -A INPUT -m multiport -p tcp --dports 20:21,2000:3000 -j ACCEPT

iptables -A INPUT -d 10.1.1.1 -s 10.1.1.3 -p tcp --sport 2000:3000 -j ACCEPT

2.使用鏈接追蹤模式(擴展)(INPUT和OUTPUT都是DROP下)

iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -I OUTPUT -m state --state ESTABLISHED -j ACCEPT
作完這步後只能訪問,不能查看數據
這兩個規則至關於iptables -I INPUT -m state --state NEW,ESTABLISHED -j ACCEPT

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

modprobe nf_conntrack_ftp   //加載鏈接追蹤模塊(臨時)
vim /etc/sysconfig/iptables-config  //開機自動加載
IPTABLES_MODULES="nf_conntrack_ftp"
作完這兩步就能查看數據

nf_conntrack_ftp:針對數據端口鏈接時,將三次握手第一次的狀態由NEW識別成RELATED

iptables-save
注意:修改完配置文件須要重啓防火牆
service iptables restart

常見協議的端口 /etc/services
grep ^http /etc/services
服務      協議      端口/傳輸協議
httpd   http        80/tcp

1.6 綜合案例

環境:
server 10.1.1.1     部署了ftp,http,samba,ssh
client1:10.1.1.2
client2:10.1.1.3

要求:
1.server端根據權限最小化原則,INPUT的默認規則改成DROP
2.client2能夠訪問server端的全部服務
3.client1 只能訪問server端的ftp服務和ssh服務
4.IP地址爲10.1.1.100到10.1.1.200之間的人只能訪問server端的samba服務

具體步驟:

首先,server端部署相關服務並啓動
//查看相應的軟件包是否成功安裝,沒安裝請安裝
rpm -q vsftpd httpd samba openssh-server

2>Nat表

功能:地址轉換(源地址和目標地址)
三條鏈:
PREROUTING
POSTROUTING
OUTPUT

處理動做:
nat表:
-j  SNAT    源地址轉換   POSTROUTING
-j  DNAT    目標地址轉換  PREROUTING
-j  MASQERRADE  地址假裝

1.地址轉換應用場景

  • 公司內部員工訪問互聯網 SNAT (通俗講,就是公網不知道來訪的私網ip,nat設備‘中間人’給轉換一下ip地址,同時轉發給公網數據請求)
  • 互聯網用戶訪問公司服務器 DNAT (公網用戶通過‘中間人’的地址轉換得以訪問私網)

2.地址轉換原理

  • 源地址轉換(SNAT)

  • 目標地址轉換(DNAT)

3.地址轉換應用

  • 源地址轉換—SNAT
環境:
client:10.1.1.2
nat-server:10.1.1.1和2.2.2.1
web-server:2.2.2.2

需求:
客戶端client是私有IP,想要訪問互聯網中的web服務

步驟:
1.client端:設置本身的默認路由(網關)指向nat-server服務器  (把‘中間人10.1.1.1’的IP添加網絡做爲網關,此處已有,故不添加net,只加gw)
route add default gw 10.1.1.1
route -n

2.nat-server端:開啓路由轉發功能並添加防火牆規則
(路由後POSTROUTING)

還原 iptables -F  包括配置文件/etc/sysconfig/iptables也要還原(此處注意,提早備份)
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j SNAT --to 2.2.2.1 

3.web-servcer端:搭建web服務
echo "this is snat test page" > /var/www/html/index.html
service httpd restart
netstat -nltp|grep 80
route -n
Destination Gateway     Genmask         Flags Metric Ref    Use Iface
2.2.2.0     0.0.0.0     255.255.255.0   U       1     0     0   eth0

4.client端測試驗證:client10.1.1.2是否能夠訪問web-server端2.2.2.2的web服務
wget http://2.2.2.2
能夠訪問

1.家裏實現上網和上面有什麼不一樣?
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j MASQUERADE(公網地址變的狀況下)

2.地址轉換是在NAT表上進行,若是在nat-server端的filter表的FORWARD鏈拒絕轉發,是否能夠正常訪問?
能夠,由於是路由後POSTROUTING轉換

總結:

  1. SNAT源地址轉換目的實現私網地址能夠訪問互聯網
  2. NAT設備能夠是硬件防火牆、路由器等物理設備,可是都得具備路由和地址轉換功能
  3. 當請求發送到NAT設備後,NAT設備首先查看本身的路由表,而後再進行地址轉換,因此應該在NAT表的POSTROUTING鏈上進行源地址轉換(路由後)
  4. 對於NAT表和FILTER表來講,數據包進來先通過NAT表的PREROUTING鏈,再過路由表,再選擇不一樣的路出去。

  • 目標地址轉換—DNAT
路由前
web-server:10.1.1.3
nat-server:10.1.1.1和2.2.2.1(兩個網卡,網絡適配器增長,配置好eth1)
client:2.2.2.2

需求:公網用戶client訪問私網服務器提供的WEB服務

步驟:
1.web-server端:10.1.1.3上搭建web服務
echo "this is dnat test page">/var/www/html/index.html

2.nat-server端:10.1.1.一、2.2.2.1端開啓路由轉發功能並添加DNAT規則
echo 1 > /proc/sys/net/ipv4/ip_forward
route -n 查看路由表信息,確認有到達目標的網關

(默認ACCEPT)
iptables -t nat -A PREROUTING -d 2.2.2.1 -p tcp --dport 80 -j DNAT --to 10.1.1.3

3.client端:2.2.2.2客戶端測試驗證
elinks --dump http://2.2.2.1
    this is dnat test page
網關必定要指定‘中間人’的IP網關
相關文章
相關標籤/搜索