Linux防火牆(iptables篇)

防火牆,可以理解爲網絡訪問控制,常用的網絡訪問控制有:哪些IP可以訪問服務器, 可以使用哪些協議,哪些接口,是否需要對數據包進行修改等。
一、SELinux
SELinux是Linux特有的一種安全機制,因這種機制的限制太多,配置也較繁瑣,所以將它關閉即可!

getenforce  #查看SELinux的狀態
#Disabled

setenforce 0    #臨時關閉SELinux


永久關閉SELinux時需要更改SELinux的配置文件/etc/selinux/config,將SELINUX=enforcing改爲SELinux=disabled 即可。
更改後的配置文件如下:
===========================================================
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
==========================================================

二、netfilter(centos5、centos6的防火牆)
Linux內核集成了網絡訪問控制功能,通過netfilter實現,netfilter是通過iptables進行調用的。

netfilter通過以下方式對數據包進行分類:

  • 源IP地址
  • 目的IP地址
  • 使用接口
  • 使用協議(tcp,udp,icmp)
  • 端口號
  • 連接狀態(new,establish,related,invalid)

1、netfilter中的表和鏈(過濾點)
這裏寫圖片描述

netfilter的五張表

  1. Filter:INPUT,OUTPUT,FORWARD
  2. Nat:PREROUTING,OUTPUT,POSTROUTING
  3. Mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
  4. Raw
  5. security

netfilter的五條鏈

  1. PREROUTING:數據包進入路由之前
  2. INPUT:通過路由表後目的地爲本機
  3. FORWARD:通過路由表後,目的地不爲本機
  4. OUTPUT:由本機產生,向外轉發
  5. POSTROUTING:發送到網卡接口之前

2、iptables的基本語法
查看以及清除規則

iptables -t nat -nvL    #查看規則,
#-t指定表 
#-n不進行ip與主機名的反查,
#-L列出目前的iptables規則,
#-v列出更多信息


iptables -F #清空規則,清除只是臨時的
#iptables -Z    #清空規則,清除只是臨時的


service iptables save   #保存規則
#iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]


======================================================
cat /etc/sysconfig/iptables #防火牆規則文件
# Generated by iptables-save v1.4.7 on Sat Mar  3 20:06:07 2018
*filter
:INPUT ACCEPT [75:5752]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [55:5768]
COMMIT
# Completed on Sat Mar  3 20:06:07 2018
=====================================================

增加、刪除一條規則

-P :設置默認策略的(設定默認門是關着的還是開着的)
    默認策略一般只有兩種
    iptables -P INPUT (DROP|ACCEPT)  默認是關的/默認是開的
    往下定義動作,作爲允許的‘後門’

-A/-D:  增加、刪除一條規則
-I: 表示插入一條規則,其實效果與-A一樣

-p: 表示指定協議,可以是tcp,udp,icmp
--dport:    與-p一起使用,表示指定目標端口
--sport:    與-p一起使用,表示指定源端口

-s: 表示指定源IP(可以是一個IP網段)
-d: 表示指定目的IP(可以是一個IP網段)

-j: 後面跟動作,其中ACCEPT表示允許包, DROP表示丟掉包(悄悄丟棄), 
REJECT表示拒絕包(明示拒絕),MASQUERADE表示源地址僞裝

-i eth0:從這塊網卡流入的數據(流入一般用在INPUTPREROUTING上)
-o eth0:從這塊網卡流出的數據(流出一般在OUTPUTPOSTROUTING上)


iptables -t filter -A INPUT -s 192.168.217.1 -j DROP
-t filter   指定表
-A INPUT-s 192.168.217.1    匹配屬性
-j DROP 動作

下面舉一些例子

#將來自1.1.1.1的所有數據包都丟掉
iptables -I INPUT -s 1.1.1.1 -j DROP

#注意刪除一條規則時,必須和插入的規則一致,也就是說,除了—I和—D不一樣外,其他的都一樣
iptables -D INPUT -s 1.1.1.1 -j DROP

#把來自2.2.2.2並且是tcp協議到本機80端口的數據包丟掉
iptables -I INPUT -s 2.2.2.2 -p tcp --dport 80 -j DROP

#把發送到10.0.1.14的22端口的數據包丟掉
iptables -I INPUT -p tcp --dport 22 -d 10.0.1.14 -j DROP

#把來自192.168.1.0/24這個網段且作用在eth0上的包放行
iptables -I INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT

#有時候服務器上的iptables過多了,想要刪除一條規則時,有一個簡單的方法
iptables -nvL --line-numbers
#
#然後刪除某一條規則
iptables -D INPUT num   #-D後依次跟鏈名,規則num。

#關於icmp包的一個比較常見的應用
iptables -I INPUT -p icmp --icmp-type 8 -j DROP
#這裏--icmp-type選項要與-p icmp一起使用,後面指定類型編號,
#這個8指的是能在本機ping通其他機器,
#而其他機器不能ping通本機

3、nat表

SNAT和DNAT的實現

由於我們現在IP地址十分緊俏,已經分配完了,這就導致我們必須要進行地址轉換,來節約我們僅剩的一點IP資源。那麼通過iptables如何實現NAT的地址轉換呢?

SNAT基於源地址的轉換

基於原地址的轉換一般用在我們的許多內網用戶通過一個外網的口上網的時候,這時我們將我們內網的地址轉換爲一個外網的IP,我們就可以實現連接其他外網IP的功能。
所以我們在iptables中就要定義到底如何轉換:定義的樣式:
比如我們現在要將所有192.168.10.0網段的IP在經過的時候全都轉換成172.16.100.1這個假設出來的外網地址:
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT –to-source 172.16.100.1
這樣,只要是來自本地網絡的試圖通過網卡訪問網絡的,都會被統統轉換成172.16.100.1這個IP.
那麼,如果172.16.100.1不是固定的怎麼辦?
我們都知道當我們使用聯通或者電信上網的時候,一般它都會在每次你開機的時候隨機生成一個外網的IP,意思就是外網地址是動態變換的。這時我們就要將外網地址換成 MASQUERADE(動態僞裝):它可以實現自動尋找到外網地址,而自動將其改爲正確的外網地址。所以,我們就需要這樣設置:
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
這裏要注意:地址僞裝並不適用於所有的地方。

DNAT目標地址轉換

對於目標地址轉換,數據流向是從外向內的,外面的是客戶端,
裏面的是服務器端通過目標地址轉換,
而我們的服務卻放在內網服務器的不同的服務器上。
如何做目標地址轉換呢?:

iptables -t nat -A PREROUTING -d 192.168.10.18 -p tcp --dport 80 -j DNAT --todestination 172.16.100.2

目標地址轉換要做在到達網卡之前進行轉換,所以要做在PREROUTING這個位置上。

這裏寫圖片描述

控制規則的存放以及開啓

注意:你所定義的所有內容,當你重啓的時候都會失效,要想我們能夠生效,
需要使用一個命令將它保存起來
1.service iptables save 命令
    它會保存在/etc/sysconfig/iptables這個文件中
2.iptables-save 命令
    iptables-save > /etc/sysconfig/iptables

3.iptables-restore 命令
        開機的時候,它會自動加載/etc/sysconfig/iptabels
        如果開機不能加載或者沒有加載,而你想讓一個自己寫的配置文件
       (假設爲iptables.2)手動生效的話:
        iptables-restore < /etc/sysconfig/iptables.2
        則完成了將iptables中定義的規則手動生效

舉例

假設你的機器上有兩塊網卡eth0,eth1,其中eth0的IP爲10.0.2.68,eth1的IP爲192.168.1.1。eth0連接了因特網,但eth1沒有連接。
現有另一臺機器(192.168.1.2)和eth0是互通的,那麼如何設置才能讓連接eth1的這臺機器連接因特網呢?

echo "1" > /proc/sys/net/ipv4/ip_forward    #打開路由轉發功能
#iptables對nat表做了一個IP轉發的操作,-o表出口的網卡
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE 

參考書籍 《跟阿銘學Linux》
參考博客

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