1. 程式人生 > >iptables防火墻(二)

iptables防火墻(二)

icm ofo tro 客戶機 條件 目的 ppp cto tina

SNAT策略的典型應用環境
局域網主機共享單個公網IP地址接入Internet

SNAT策略的原理
源地址轉換,Source Network Address Translation
修改數據包的源地址
局域網共享上網

技術分享圖片

未作SNAT轉換時的情況
技術分享圖片

進行SNAT轉換後的情況
技術分享圖片

前提條件
局域網各主機正確設置IP地址/子網掩碼
局域網各主機正確設置默認網關地址
Linux網關支持IP路由轉發

實現方法
編寫SNAT轉換規則

[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24  -o eth0 -j SNAT --to-source 218.29.30.31
POSTRIYTING;路由選擇後再處理
192.168.1.0/24;局域網短地址
193.eth0;外網接口名稱
194.218.29.30.31;外網接口IP

-
驗證SNAT結果
在局域網主機 192.168.1.234 中能夠訪問外網的Web服務器 58.63.236.45
查看Web主機 58.63.236.45 的訪問日誌,記錄的來訪者應是網關主機的外網IP地址 218.29.30.31

MASQUERADE —— 地址偽裝
適用於外網IP地址非固定的情況
對於ADSL撥號連接,接口通常為 ppp0、ppp1
將SNAT規則改為MASQUERADE即可

DNAT策略的典型應用環境
在Internet中發布位於企業局域網內的服務器

DNAT策略的原理
目標地址轉換,Destination Network Address Translation
修改數據包的目標地址
進行DNAT轉換後的情況
技術分享圖片

在Internet中發布內網服務器
技術分享圖片
前提條件
局域網的Web服務器能夠訪問Internet
網關的外網IP地址有正確的DNS解析記錄
Linux網關支持IP路由轉發

實現方法
編寫DNAT轉換規則

[root@localhost ~]# iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 
-p tcp --dport 80 -j DNAT --to-destination 192.168.1.6
PRETOUTING;路由選擇之前處理
218.29.30.31;外網接口IP地址
80;發布服務器端口
192.168.1.6;web主機內網IP地址

驗證DNAT結果
在外網客戶機 173.96.97.98 中能夠訪問位於企業內網的Web服務,訪問地址為 http://218.29.30.31/
查看Web服務器 192.168.1.6 的訪問日誌,記錄了外網客戶機的IP地址 173.96.97.98
技術分享圖片

發布時修改目標端口
在DNAT規則中以“IP:Port”的形式指定目標地址

[root@localhost ~]# iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31
 -p tcp --dport  2346 -j DNAT --to-destination 192.168.1.6:22
 2346;訪問的目的端口
 :22;實際提供服務的端口

-
導出(備份)規則
iptables-save工具

[root@localhost ~]# iptables-save 
 Generated by iptables-save v1.4.7 on Wed Sep 24 08:25:33 2014
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [54:7037]
-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 Sep 24 08:25:33 2014
[root@localhost ~]# iptables-save > /opt/iprules_all.txt

-
導入(還原)規則
iptables-restore工具
可結合重定向輸入指定規則來源
[root@localhost ~]# iptables-restore < /opt/iprules_all.txt

iptables服務
腳本位置:/etc/init.d/iptables
規則文件位置:/etc/sysconfig/iptables

[root@localhost ~]# service iptables start
iptables:應用防火墻規則:                                          [確定]

[root@localhost ~]# service iptables stop
iptables:將鏈設置為政策 ACCEPT:filter                   [確定]
iptables:清除防火墻規則:                                           [確定]
iptables:正在卸載模塊:                                               [確定]

[root@localhost ~]# service iptables status
iptables:未運行防火墻

——
1.定義基本變量
便於腳本的維護、重用

#!/bin/bash
INET_IF= "eth0"
INET_IP="218.29.30.31"
LAN_IF="eth1"
LAN_IP= "192.168.1.1"
LAN_NET="192.168.1.0/24"
LAN_WWW_IP="192.168.1.6"
IPT="/sbin/iptables"
MOD="/sbin/modprobe"
CTL="/sbin/sysctl“
……

2.加載必要的內核模塊
將頻繁用到的模塊載入內核

……
$MOD ip_tables
$MOD ip_conntrack
$MOD ipt_REJECT
$MOD ipt_LOG
$MOD ipt_iprange
$MOD xt_tcpudp
$MOD xt_state
$MOD xt_multiport
$MOD xt_mac
$MOD ip_nat_ftp
$MOD ip_conntrack_ftp
……

支持FTP訪問的地址轉換連接狀態跟蹤

3.調整/proc參數
Linux內核控制及調優

$CTL -w net.ipv4.ip_forward=1
$CTL -w net.ipv4.ip_default_ttl=128
$CTL -w net.ipv4.icmp_echo_ignore_all=1
$CTL -w net.ipv4.icmp_echo_ignore_broadcasts
$CTL -w net.ipv4.tcp_syncookies=1
$CTL -w net.ipv4.tcp_syn_retries=3
$CTL -w net.ipv4.tcp_synack_retries=3
$CTL -w net.ipv4.tcp_fin_timeout=60
$CTL -w net.ipv4.tcp_max_syn_backlog=3200

優化TCP響應能力

4. 具體的防火墻規則
按表、鏈分別設置規則,包括默認策略
……

$IPT -t filter -X
$IPT -t nat -X
$IPT -t filter -F
$IPT -t nat -F
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
$IPT -t nat -A POSTROUTING -s $LAN_NET -o $INET_IF -j SNAT --to-source $INET_IP
$IPT -t nat -A PREROUTING -i $INET_IF -d $INET_IP -p tcp --dport 80 -j DNAT --to-destination $LAN_WWW_IP
-t 清空原有規則
-P 設置默認策略
-t nat 其他具體規則

-
“主機型”防火墻腳本
針對本機進行保護
filter表中的INPUT、OUTPUT鏈

[root@localhost ~]# vi /opt/myipfw.hostonly
#!/bin/bash
 1. 定義基本變量
IPT= "/sbin/iptables"
……
 2 定義默認策略
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
3 設置filter表中的各種規則
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables防火墻(二)