鳥哥的伺服器10 防火牆

青蛙愛輪滑發表於2019-03-31
  1. TCP Wrappers

    TCP Wrappers 是通過兩個檔案來管理的一個類似防火牆的機制

    /etc/hosts.allow
    /etc/hosts.deny
    並非所有的軟體都可以通過這兩個檔案來管理,只有下面這兩個軟體才可以通過這兩個檔案來管理防火牆規則:
    有 super daemon(xinetd) 所管理的服務
    支援 libwrap.so 模組的服務

    # 查出系統有沒有安裝xinetd ,若沒有請安裝,安裝完畢後,查詢 xinitd 管理的服務有哪些。
    [root@CentOS ~]# yum install xinetd
    [root@CentOS ~]# chkconfig xinetd on
    [root@CentOS ~]# chkconfig --list
    	chargen-stream:	off
    	daytime-dgram: 	off
    	daytime-stream:	off
    	discard-dgram: 	off
    	discard-stream:	off
    	echo-dgram:    	off
    	echo-stream:   	off
    	rsync:         	off
    	tcpmux-server: 	off
    	time-dgram:    	off
    #上述都可以由 TCP Wrappers 來簡易設定防火牆規則
    
    # 請問,rsyslogd、sshd、xinetd、httpd(若服務不存在,請自行安裝),這四個程式有沒有支援 TCP Wrapers 的阻擋功能
    [root@CentOS ~]# ldd $(which rsyslogd sshd inetd httpd) #輸出結果比較複雜,需要自己來看
    
    
    [root@CentOS ~]# for name in rsyslogd sshd xinetd httpd; do echo $name; ldd $(which $name) | grep libwrap; done
    rsyslogd
    sshd
    	libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f6204e8b000)
    xinetd
    	libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fc8102cf000)
    httpd
    #如果出現 libwrap 檔名的話,代表找到了該函式庫,並支援 TCP Wrappers。所以,sshd、xinetd 支援,但是rsyslogd、httpd在這兩個程式不支援。也就是說,httpd與rsyslogd 不能夠使用 /etc/hosts/{allow|dent} 來進行防火牆機制的控制
    
  2. /etc/hosts.{allow|dent} 的設定方式

    #語法
    <service(program_name)> : <IP, domain, hostname>
    <服務 (也就是程式名稱)> : (IP 或 域 或主機名>
    # 上面的><符號不存在與配置檔案中
    
    

    防火牆規則的順序:
    1 . 先以 /etc/hosts.allow 進行優化比對,該規則符合就給予以放行
    2 . 再以 /etc/hosts.deny 比對,規則符合就予以抵擋
    3 . 若不在這兩個檔案內,亦即規則都不符合,最終則予以放行

    # 先放開本機的 127.0.0.1 可以進行任何本機的服務,然後,讓區域網(192.168.1.0/24) 可以使用rsysc,同事10.0.0.100 頁能夠使用rsysc,但其他來源不允許使用rsysc。
    [root@CentOS ~]# cat /etc/xinetd.d/rsync 
    # default: off
    # description: The rsync server is a good addition to an ftp server, as it \
    #	allows crc checksumming etc.
    service rsync
    {
    	disable	= yes
    	flags		= IPv6
    	socket_type     = stream
    	wait            = no
    	user            = root
    	server          = /usr/bin/rsync  #rsysc 的服務啟動的檔名。檔名為rsysc
    	server_args     = --daemon
    	log_on_failure  += USERID
    }
    
    # 因為 rsysc 的服務啟動的檔名為rsysc。所以應該這樣設定:
    [root@CentOS ~]# vim /etc/hosts.allow
    ALL: 127.0.0.1
    rsysc: 192.168.1.0/255.255.255.0 10.0.0.100  #不支援192.168.1.0/24這種寫法
    
    [root@CentOS ~]# vim /etc/hosts.deny 
    rsysc: ALL
    
    
  3. iptables:linux 的資料包過濾軟體

    根據資料包的分析資料“對比”預先定義的規則內容,若資料包資料與規則內容相同則進行動作,否則就繼續下一條規則的比對
    如果規則都不符合,則執行預設策略
    預設情況下。linux的iptables至少就有3個表格,包括管理本機進出的Filter、管理後端主機(防火牆內部的其他計算機)的NAT、管理特殊標誌使用的,angle(較少使用)。

    • Filter(過濾器):主要跟進入Linux本機的資料包有關,是預設的 table
      INPUT:主要與想要進入linux本機的資料包有關
      OUTPUT:主要與linux本機發炒股的資料包有關
      FORWARF:與linux本機沒有關係,與NAT的 table 的相關性較高
    • NAT(地址轉換):主要用來進行來源於目的地的IP或port的轉換,與linux本機無關,主要與linux主機後的區域網內計算機相關
      PREROUTING:在進行路由判斷之前所要進行的規則(DNAT/REDIRECT)
      POSTROUTING:在進行路由判斷之前所要進行的規則(SNAT/MASQUERADE)
      OUTPUT:與傳送出去的資料包有關
    • Mangle(破壞者):主要是與特殊的資料包煩人路由標誌有關。
  4. 規則的檢視與清除

    1 . 檢視規則

    [root@CentOS ~]# iptables [-t tables] [-L] [-nv]
    -L:列出目前的規則
    -n:不進行 IP 與 HOSTNAME 的反查,顯示資訊的速度會快很多
    -v:列出更多資訊
    
    
    # 列出 filter table 的規則
    [root@CentOS ~]# iptables -L -n
    Chain INPUT (policy ACCEPT)  #INPUT鏈
    target     prot opt source               destination         
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
    
    Chain FORWARD (policy ACCEPT) #FORWARD鏈
    target     prot opt source               destination         
    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
    
    Chain OUTPUT (policy ACCEPT)  #OUTPUT鏈
    target     prot opt source               destination 
    
    # 列出 nat table 的規則
    [root@CentOS ~]# iptables -t nat -L -n
    Chain PREROUTING (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain POSTROUTING (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination  
    
    

    target:代表進行的操作
    prot:代表使用的資料包協議
    opt:額外的說明
    source:代表此規則是針對哪個來源IP進行限制
    destination:代表此規則是針對哪個目標IP進行限制

    # 檢視完整的防火牆規則
    [root@CentOS ~]# iptables-save [-t table]
    [root@CentOS ~]# iptables-save
    # Generated by iptables-save v1.4.7 on Wed Apr  5 08:30:35 2017
    *nat
    :PREROUTING ACCEPT [17:1637]
    :POSTROUTING ACCEPT [1:60]
    :OUTPUT ACCEPT [1:60]
    COMMIT
    # Completed on Wed Apr  5 08:30:35 2017
    # Generated by iptables-save v1.4.7 on Wed Apr  5 08:30:35 2017
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [1909:187403]
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
    -A INPUT -p icmp -j ACCEPT 
    -A INPUT -i lo -j ACCEPT 
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
    -A INPUT -j REJECT --reject-with icmp-host-prohibited 
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited 
    COMMIT
    # Completed on Wed Apr  5 08:30:35 2017
    
    

    2 . 清除規則

    [root@CentOS ~]# iptables [-t tables] [-FXZ]	
    -F:清除所有的已制訂的規則
    -X:除掉所有使用者自動以的鏈
    -Z:將所有的鏈的計數與流量統計都歸零
    
    
    # 清除本機防火牆的所有規則
    [root@CentOS ~]# iptables -F
    [root@CentOS ~]# iptables -X
    [root@CentOS ~]# iptables -Z	
    # 會清除所有規則,但不會改變預設策略
    
    
  5. 定義預設策略
    當資料包不在規則之內時,則該資料包的通過與否,是以預設策略為準

    [root@CentOS ~]# iptables [-t nat] [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]
    -P:定義預設策略
    ACCEPT:資料包可接受
    DROP:該資料包直接丟棄
    
    # 將本機的 INPUT 設定為 DROP, 其他設定為 ACCEPT
    [root@CentOS Desktop]# iptables -P INPUT DROP
    [root@CentOS Desktop]# iptables -P OUTPUT ACCEPT
    [root@CentOS Desktop]# iptables -P FORWARD ACCEPT
    [root@CentOS Desktop]# iptables-save
    # Generated by iptables-save v1.4.7 on Wed Apr  5 08:54:50 2017
    *nat
    :PREROUTING ACCEPT [70:6483]
    :POSTROUTING ACCEPT [4:682]
    :OUTPUT ACCEPT [4:682]
    COMMIT
    # Completed on Wed Apr  5 08:54:50 2017
    # Generated by iptables-save v1.4.7 on Wed Apr  5 08:54:50 2017
    *filter
    :INPUT DROP [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    COMMIT
    # Completed on Wed Apr  5 08:54:50 2017
    
    
  6. 資料包的基礎對比:IP、網路及介面裝置

    [root@CentOS ~]# iptables [AI 鏈名] [-io 網路介面] [-p 協議] [-s 來源 IP/網路] [-d 目標IP/網路] -j [ACCEPT|DROP|REJECT|LOG]
    -AI:準對某條鏈進行規則的插入或累加
    -io:網路介面,進或出
    -P 協議:設定此規則適用於哪種資料包格式
    -s 來源:來源IP/網路 
    -d:目標 IP/網路
    -j:後面接操作
    
    
    # 設定 lo 成為受信任的裝置,亦即進出 lo 的資料包都予以接受
    [root@CentOS ~]# iptables -A INPUT -i lo -j ACCEPT
    
    # 只要是來自內網的192.168.100.0/24 的資料包統統接受
    [root@CentOS ~]# iptables -A INPUT -i eth1 -s 192.168.100.0/24 -j ACCEPT
    
    # 只要是來自192.168.100.10 就接受,但來自192.168.100.230這個來源的就丟棄
    [root@CentOS ~]# iptables -A INPUT -i eth1 -s 192.168.100.10 -j ACCEPT
    [root@CentOS ~]# iptables -A INPUT -i eth1 -s 192.168.100.130 -j DROP
    
    # 檢視詳細規則
    [root@CentOS ~]# iptables-save
    # Generated by iptables-save v1.4.7 on Wed Apr  5 09:20:57 2017
    *nat
    :PREROUTING ACCEPT [132:12351]
    :POSTROUTING ACCEPT [25:2813]
    :OUTPUT ACCEPT [25:2813]
    COMMIT
    # Completed on Wed Apr  5 09:20:57 2017
    # Generated by iptables-save v1.4.7 on Wed Apr  5 09:20:57 2017
    *filter
    :INPUT DROP [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -i lo -j ACCEPT 
    -A INPUT -s 192.168.100.0/24 -i eth1 -j ACCEPT 
    -A INPUT -s 192.168.100.10/32 -i eth1 -j ACCEPT 
    -A INPUT -s 192.168.100.203/32 -i eth1 -j DROP 
    COMMIT
    # Completed on Wed Apr  5 09:20:57 2017
    
    
    # 記錄想要記錄的某個規則的記錄(寫入核心日誌檔案)
    [root@CentOS ~]# iptables -A INPUT -s 192.168.2.200 -j LOG
    [root@CentOS ~]# iptables -L -n
    
    
  7. TCP、UDP 的規則比對:針對埠設定

    [root@CentOS ~]# iptables [-AI 鏈] [-io 網路介面] [-P tcp,udp] [-s 來源IP/網路] [--sport 埠範圍] [-d 目標IP/網路] [--dport 埠範圍] -j [ACCEPT|DROP|REJECT]
    --sport 埠範圍:限制來源埠號碼,埠號碼可以是連續的,例如 1024:65535
    
    
    # 因為僅有TCP與UDP資料包具有埠號,因此要想使用--dport和--sport時,需要加上-P tcp 或-P udp 的引數才會成功。
    # 想要連線進入本機 port 21 的資料包都阻擋掉
    [root@CentOS Desktop]# iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP
    
    # 相連到本機的網路上的芳鄰(udp port 137,138  tcp port 139,445)就放行
    [root@CentOS ~]# iptables -A INPUT -i eth0 -p udp --dport 137:138 -j ACCEPT
    [root@CentOS ~]# iptables -A INPUT -i eth0 -p tcp --dport 139 -j ACCEPT
    [root@CentOS ~]# iptables -A INPUT -i eth0 -p tcp --dport 445 -j ACCEPT
    
    # 只要來自 192.168.1.0/24 的1024:65535 埠的資料包,且想要連線到本機的ssh port 就給予阻擋
    [root@CentOS ~]# iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --sport 1024:65535 --dport ssh -j DROP
    
    # 將來自任何地方來源 port 1:1023 的主動連線到本機的1:1023連線丟棄
    [root@CentOS ~]# iptables -A INPUT -i eth0 -p tcp --sport 1:1023 --dport 1:1023 --syn -j DROP
    
    # 
    
  8. iptables外掛模組:mac與state

    [root@CentOS ~]# iptables -A INPUT [-m state] [[state 狀態]
    -m:一些iptables 的外掛模組,state或mac
    --state:一些資料包狀態
    	INVALID:無效的資料包
    	ESTABLISHED:已經成功連線的狀態
    	NEW:想要新建立的資料包狀態
    	RELATED:表示資料包與主機傳送出去的資料有關
    
    ```
    ```
    # 只要已建立連線或已發出請求的資料包就予以通過,不合法資料包就丟棄
    [root@CentOS ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    [root@CentOS ~]# iptables -A INPUT -m state --state INVALID -j ACCEPT
    
    # 針對區域網的 aa:bb:cc:dd:ee:ff 主機開放其連線
    [root@CentOS ~]# iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT
    
  9. ICMP 資料包規則的比對:準對是否響應ping來設計

    [root@CentOS ~]# iptables -A INPUT [-p icmp] [–icmp-type 型別] [-j ACCEPT
    –icmp-typpe:後面必須接ICMP 的資料包型別,也可以使用代號,8是回顯請求

    讓0,3,4,11,12,14,16,18 的 ICMP type 可以進入本機

    [root@CentOS ~]# vim somefile
    #!/bin/bash
    icmp_type=“0 3 4 11 12 14 16 18”
    for typeicmp in $icmp_type
    do
    iptables -A INPUT -i eth0 -p icmp --icmp-type $typeicmp -j ACCEPT
    done
    [root@CentOS ~]# chmod +x somefile
    [root@CentOS ~]# sh somefile

  10. 超簡單的客戶端防火牆設計與防火牆規則儲存

    如果將Linix主機作為客戶端且不提供網路服務時,應該圖和設計防火牆:

    1 . 規則清零:iptables -F
    2 . 預設策略,將INPUT設為DROP,其他ACCEPT
    3 . 信任本機,lo必須設定為信任裝置
    4 . 回應資料包讓本機通過主動向外發出請求而相應的資料可以進入本機(ESTABLISHED,RELATED)
    5 . 信任使用者

       # 使用指令碼來設定
       [root@CentOS ~]# vim firewall.sh
       #!/bin/bash
       PATH=/sbin:/bin:/usr/sbin:/usr/bin; export PATH
       # 1.  清除規則
       iptables -F
       iptables -X
       iptables -Z
       # 2.  設定策略
       iptables -P INPUT DROP
       iptables -P OUTPUT ACCEPT
       iptables -P FORWARD ACCEPT
       # 3~5 制訂各項規則
       iptables -A INPUT -i lo -j ACCEPT
       iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
       #iptables -A INPUT -i eth0 -s 192.168.1..0/24 -j ACCEPT
       # 6.  寫入防火牆規則配置檔案
       /etc/init.d/iptables save
    
       [root@CentOS ~]# ./firewall.sh 
       iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
    
       #chkconfig --listiptables。如果不寫指令碼直接修改/etc/sysconfig/iptables也可以
       #若要讓這次修改的各種設定在下次開機時還儲存,那就需要對/etc/init.d/iptables save這個命令加引數
    
  11. IPv4 的核心管理功能:/etc/sys/net/ipv4/*

    1 . /proc/sys/net/ipv4/tcp_syncookies:預防SYN泛洪攻擊,可以啟用核心SYN Cookie模組。
    當啟動SYN Cookie 時,主機在傳送SYN/ACK確認包前,會要求Client 端在短時間內回覆一個序號買這個序號包含許多原SYN資料包的資訊,包括IP ‘port等。多Client端可以回覆一個正確的序號,俺麼主機就確定該資料包為可信的,因此會傳送SYN/ACK資料包,否則就不理會此資料包

    # 啟動SYN Cookie模組(會造成某些服務延遲)。
    [root@CentOS ~]# echo "1" > /proc/sys/net/ipv4/tcp_syncookies 
    
    

    2 . /peoc/sys/net/icmp_echo_ignore_broadcasts:預防ping of death 攻擊,可以取消ICMP型別8的回顯就是了。

       某些區域網內的常見的服務(例如DHCP)會使用ping的方式來偵測是否有重複的IP,所以最好不要取消所有的ping響應
       /proc/sys/net/ipv4內的icmp_echo_ignore_broadcasts:僅有ping broadcast 地址時才取消ping的回應
       /proc/sys/net/ipv4內的icmp_echo_all:全部的ping都不回應
    
    [root@CentOS ~]# echo "1" > /proc/sys/net/ipv4icmp_echo_ignore_broadcasts
    
    

    3 . /proc/sys/net/ipv4/conf/網路介面/*
    rp_filter:逆向路徑過濾
    log_martians:可以用來啟動記錄不合法的IP來源的功能
    accept_source_route
    accept_redirects
    send_redirects:傳送一個ICMP redirect資料包

    # 可以使用echo 1 > /proc/sys/net/ipv4/conf/網路介面/rp.filter
    # 建議修改配置檔案
    [root@CentOS ~]# vim /etc/sysctl.conf
    net.ipv4.tcp_syncookies = 1
    net.ipv4.icmp_echo_ignore_broadcast = 1
    net.ipv4.conf.all.rp_filter = 1
    net.ipv4.cong .default.rp_filter = 1
    net.ipv4.conf.eth0.rp_filter = 1
    net.ipv4.conf.lo.rp_filter = 1
    
    [root@CentOS ~]# sysctl -p
    	
    
  12. 設定單機防火牆的一個例項

    規則草擬
    外網網路卡eth0
    內網網路卡eth1,切內部使用192.168.100.0/24網段
    主機,預設開放的服務有WWW,SSH,HTTPS
    filter table 預設策略:INPUT DROP,OUPUT ACCEPT, FORWARD ACCEPT

    # 將整個指令碼分為3部分:
    # iptable.rule:設定最基本的規則
    # iptables.deny:設定阻擋
    # iptables.allow:設定放行
    
    
    [root@CentOS ~]# mkdir -p /usr/local/virus/iptables
    [root@CentOS ~]# cd /usr/local/virus/iptables
    [root@CentOS iptables]# vim iptables.rule
    #!/bin/bash
    
    # 請先輸入相關引數,不要輸入錯誤
    EXTIF="eth0"  # 這個是可以來你上public ip 的網路介面
    INIF="eth1"   #內部LAN 的網路連線,若無則寫成 INIF=""
    INNET="192.168.100.0/24"   # 若無內網路介面,請填寫 INNET=""
    export EXTIF INIF INNEF 
    
    # 第一部分,針對本機的防火牆設定
    # 1 . 先設定好核心的網路功能
    echo "1" > /proc/sys/net/ipv4/tcp_syncookies
    echo "1" > /proc/sys/net/ipv4icmp_echo_ignore_broadcasts
    for i in /proc/sys/net/ipv4/conf/*/{rp_filter,log_martians}; do
    	echo "1" > $i
    done
    for i in /proc/sys/net/ipv4/conf/*/{accept_source_route,accept_redirects,send_redirects}; do
    	echo "0" > $i
    done
    
    # 2 . 清除規則、設定預設策略及開放 lo 與相關的設定值
    PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin; export PATH
    iptables -F
    iptables -X
    iptables -Z
    iptables -P INPUT DROP
    iptables -P OUTPUT ACCEPT
    iptables -P FPRWARD ACCEPT
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT -nm state -state RELATED,ESTABLISHED -j ACCEPT
    
    # 3 . 啟動額外的防火牆script模組
    if [ -f /usr/local/virus/iptables/iptables.deny ]; then
    	sh /usr/local/virus/iptables/iptables.deny
    fi 
    if [ -f /usr/local/virus/iptables/iptables.allow ]; then 
    	sh /usr/local/virus/iptables/iptables.allow
    fi
    if [ -f /usr/local/virus/iptables/iptables.http ]; then 
    	sh  /usr/local/virus/iptables/iptables.http
    fi
    
    # 4 . 允許某些型別的 ICMP 資料包進入
    
    AICMP ="0 3 3/4 11 12 14 16 18"
    for tyicmp in $AICMP
    do 
    	iptables -A INPUT -i #EXTIF -p icmp --icmp-type $tyicmp -j ACCEPT
    done
    
    # 5 . 允許某些服務的進入,,請依照自己的環境開啟
    # iptables -A INPUT -p TCP -i $EXTIF --dport 21 --sport 1024:65535 -j ACCEPT # FTP
    # iptables -A INPUT -p TCP -i $EXTIF --dport 22 --sport 1024:65535 -j ACCEPT # SSH
    # iptables -A INPUT -p TCP -i $EXTIF --dport 25 --sport 1024:65535 -j ACCEPT # SMTP
    # iptables -A INPUT -p TCP -i $EXTIF --dport 53 --sport 1024:65535 -j ACCEPT # DNS
    # iptables -A INPUT -p TCP -i $EXTIF --dport 53 --sport 1024:65535 -j ACCEPT # DNS
    # iptables -A INPUT -p TCP -i $EXTIF --dport 80 --sport 1024:65535 -j ACCEPT # WWW
    # iptables -A INPUT -p TCP -i $EXTIF --dport 110 --sport 1024:65535 -j ACCEPT # POP3
    # iptables -A INPUT -p TCP -i $EXTIF --dport 443 --sport 1024:65535 -j ACCEPT # HTTPS
    
    # 第二部分,針對後端主機的防火牆設定
    # 1 . 先載入一些有用的模組
    modules="ip_tables iptables_nat ip_nat_ftp ip_nat-irc ip_conntrack ip_conntrack_ftp ip_conntrack_irc"
    for mod in $modules
    do
    	testmod=`lsmod | grep "^${mod} " | awk '{print $1}'`
    	if [ "$testmod" == "" ]; then
    		modprobe $mod
    	fi
    	
    # 2 . 清除 NAT table 的規則
    iptables -F -t nat
    iptables -X -t nat
    iptables -Z -t nat
    iptables -t nat -P PREROUTING ACCEPT
    iptables -t nat -P POSTROUTING ACCEPT
    iptables -t nat -P OUTPUT ACCEPT
    
    # 3 . 若有內部介面的存在(雙網路卡)開放成為路由器,且為IP分享器
    if [ "$INIF" != "" ]; then
    	iptables -A INPUT -i $INIF -j ACCEPT
    	echo "1" > /proc/sys/net/ipv4/ip_forward
    		if [ "$INIET" != "" ]; then 
    			for innet in $INNET
    			do
    				iptables -r nat -A POSTROUTING -s $innet -o $EXTIF -j MASQUERADE
    			done
    		fi
    fi
    # 如果你的 MSN 一直無法連線,或者是某些網站 OK 某些網站不 OK ,可能是 MTU 的問題,那可以將下面這行取消批註,來啟動 MTU 的範圍
    iptables -A FORWARD -p tcp  -m tcp --tcp-flags STN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu
    
    # 4 . NAT 伺服器後端的 LAN 內對外值伺服器設定
    iptables -t nat -A PREROUTING -p tcp -i $EXTIF --dport 80 -j DNAT --tp-description 192.168.1.210:80   #WWW
    
    # 5 . 特殊的功能,包括 windows 遠端桌面產生的規則,假設桌面主機為 1.2.3.4
    # iptables -t nat -A PREROUTING -p tcp -s 1.2.3.4 --dport 6000 -j DNAT --to-description 192.168.100.10
    # iptables -t nat -A PREROUTING -p tcp -s 1.2.3.4 --sport 3389 -j DNAT --to-description 192.168.100.20
    
    # 6 . 最後將這些功能儲存下來
    /etc/init.d/iptables save
    
    

    假設我要讓140.116.44.0/24 這個網路的所有主機可以進入本機主機的話

    [root@CentOS iptables]# vim iptables.allow
    #!/bin/bash
    # 下面則填寫允許進入本機的其他網路的主機或網路
    iptables -A INPUT -i $EXTIF -s 140.116.44.0/24 -j ACCEPT
    
    # 下面則是關於阻擋的檔案設定法
    [root@CentOS iptables]# vim iptables.deny 
    #!/bin/bash
    # 下面填寫的是你要阻擋的那個東西
    iptables -A INPUT -i $EXTIF -s 140.116.44.254 -j DEOP
    
    [root@CentOS iptables]# chmod 700 iptables.*
    
    
    # 設定開機啟動
    [root@CentOS iptables]# vim /etc/re.d/rc.local
    # 1 . Firewall
    /usr/local/virus/iptables/iptables.rule
    
    

相關文章