iptables 防火牆(三)| 規則的導出 / 導入、使用防火牆腳本程序

這是我參與更文挑戰的第 14 天,活動詳情查看:更文挑戰安全


一名致力於在技術道路上的終身學習者、實踐者、分享者,一位忙起來又偶爾偷懶的原創博主,一個偶爾無聊又偶爾幽默的少年。bash

歡迎各位掘友們微信搜索「傑哥的IT之旅」關注!服務器

原文連接:iptables 防火牆(三)- 規則的導出 / 導入、使用防火牆腳本程序 |(附體系思惟導圖)微信

一、防火牆規則的備份及還原

防火牆規則的批量備份還原兩個命令,分別是:iptables-saveiptables-restore,用來保存和恢復。markdown

iptables-save 命令

iptables-save 命令:用來批量導出 Linux 防火牆規則。cookie

直接執行iptables-save 命令時,將顯示出當前啓用的全部規則。網絡

# iptables-save
# Generated by iptables-save v1.4.7 on Mon Oct  7 20:09:30 2019
*nat
:PREROUTING ACCEPT [134:12724]
:POSTROUTING ACCEPT [10:645]
:OUTPUT ACCEPT [10:645]
-A PREROUTING -d 192.168.1.4/32 -i eth2 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.3.112 
COMMIT
# Completed on Mon Oct  7 20:09:30 2019
# Generated by iptables-save v1.4.7 on Mon Oct  7 20:09:30 2019
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [257:22057]
-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 Mon Oct  7 20:09:30 2019
複製代碼

上述輸出的各項含義:

  • #號開頭的內容表示註釋;
  • *表名:表示所在的表;例如:*nat
  • :鏈名 默認策略:表示相應的鏈及默認策略,具體規則部分省略了iptables命令名;
  • COMMIT:表示提交前面的規則設置;

iptables-save 命令:只是把規則內容輸出到屏幕上,當須要保存爲固定的文件時,結合重定向輸出的操做來完成備份。tcp

將當前已設置的全部防火牆規則備份爲iptables_beifen.txt文件,可執行以下命令便可,備份完成後,可查看所備份到的路徑下是否存在該文件;oop

# iptables-save > /root/iptables_beifen.txt
# ll | grep iptables_beifen.txt 
-rw-r--r--. 1 root root   782 10月  7 20:26 iptables_beifen.txt
複製代碼

iptables-restore 命令

iptables-restore 命令:用來批量導入 Linux 防火牆規則,與iptables-save 命令相結合重定向輸入來指定備份文件的位置。post

# iptables-restore < /root/iptables_beifen.txt
複製代碼

二、使用 iptables 服務

iptables 服務使用的規則文件位於 /etc/sysconfig/iptables 文件中。

經過 iptables 系統服務,可快速啓用、清空防火牆規則。

自動啓用防火牆規則

使用iptables-save備份爲默認的規則配置文件 /etc/sysconfig/iptables 而後能夠經過 iptables 服務來調用。

將保存當前的防火牆規則,並設置在每次開機後根據已保存的規則內容自動進行重建。

# iptables-save > /etc/sysconfig/iptables
# chkconfig --level 2345 iptables on
# chkconfig --list iptables
iptables           0:關閉    1:關閉    2:啓用    3:啓用    4:啓用    5:啓用    6:關閉
複製代碼

啓用 /etc/sysconfig/iptables 文件中的規則設置時,只須要啓動 iptables 服務便可。

# service iptables start
複製代碼

清空全部防火牆規則

調試各類防火牆規則的過程當中,爲了排除其餘規則的干擾,需清空某些表的規則。

須要依次清空全部表的規則時,停用 iptables 服務是最好的辦法。

# service iptables stop
iptables:將鏈設置爲政策 ACCEPT:nat filter                [肯定]
iptables:清除防火牆規則:                                 [肯定]
iptables:正在卸載模塊:                                   [肯定]
# service iptables status
iptables:未運行防火牆。
複製代碼

三、防火牆腳本的組成

有同窗可能會有疑問,防火牆還有腳本應用?具體都有哪些內容組成呢?等等;

防火牆腳本的優點:便於使用 Shell 變量、程序控制邏輯、做爲獨立的文件在須要重用、移植使用時更方便;

定義基本變量

防火牆的網卡、IP 地址、局域網段、iptables 命令的路徑等定義爲變量,便於對腳本程序的維護和移植使用。

規則多時,一旦網絡環境出現問題,只需對變量值進行修改就可使用了。

# vi /opt/myiptables.sh
#!/bin/bash
#### 3.1 定義基本變量
INET_IF="eth1"                     # 外網接口
INET_IP="192.168.3.111"            # 外網接口地址
LAN_IF="eth2"                      # 內網接口
LAN_IP="192.168.1.4"               # 內網接口地址
LAN_NET="192.168.1.0/24"           # 內網網段
LAN_WWW_IP="192.168.3.112"         # 網站服務器的內部地址
IPT="/sbin/iptables"               # iptables 命令路徑
MOD="/sbin/modprobe"               # modprobe 命令路徑
CTL="/sbin/sysctl"                 # sysctl 命令路徑
複製代碼

設置好變量後,就能夠直接引用了,添加必要的註釋之外,變量名稱最好使用必定含義的字符串。

加載內核模塊

iptables 命令的模塊均可以根據須要動態載入內核,個別須要手動加載。

需啓用的規則數量多時,可提升規則設置的效率,保持防火牆的穩定性,並將各模塊提早加載到內核中。

#### 3.2 加載必要的內核模塊
$MOD ip_tables                      # iptables 基本模塊
$MOD ip_conntrack                   # 鏈接跟蹤模塊
$MOD ipt_REJECT                     # 拒絕操做模塊
$MOD ipt_LOG                        # 日誌記錄模塊
$MOD ipt_iprange                    # 支持 IP 範圍匹配
$MOD xt_state                       # 支持狀態匹配
$MOD xt_multiport                   # 支持多端口匹配
$MOD xt_mac                         # 支持 MAC 地址匹配
$MOD ip_nat_ftp                     # 支持 FTP 地址轉換
$MOD ip_conntrack_ftp               # 支持 FTP 鏈接跟蹤
複製代碼

調整 /proc 參數

/proc 是 Linux 或 UNIX 系統中的一種僞文件系統機制,提供訪問內核運行結構、改變內核設置的實時數據。

/proc 中的數據存放在內存而不是硬盤上。

/proc/sys 存放着與系統相關的一些可控參數,可用來改變內核的行爲,做爲 Linux 內核調優的實時入口。

使用echo、sysctl 命令能夠修改相關參數,也能夠寫到/etc/sysctl.conf文件中,(執行 sysctl -p 後生效)其主要包括是否打開 IP 轉發、是否響應 ICMP 廣播、設置好 TCP 響應超時等;

如下爲最多見的 /proc 參數調整

icmp 相關參數:可以使本機忽略其餘主機的 ping 測試;

TCP 相關參數:可適當提升本機抵抗 DOS 攻擊的能力;

#### 3.3 Linux 內核控制及調優
$CTL -w net.ipv4.ip_forward=1                     # 打開路由轉發功能
$CTL -w net.ipv4.ip_default_ttl=128               # 修改 ICMP 響應超時
$CTL -w net.ipv4.icmp_echo_ignore_all=1           # 拒絕響應 ICMP 請求
$CTL -w net.ipv4.icmp_echo_ignore_broadcasts=1    # 拒絕響應 ICMP 廣播
$CTL -w net.ipv4.tcp_syncookies=1                 # 啓用 SYN Cookie 機制
$CTL -w net.ipv4.tcp_syn_retries=3                # 最大 SYN 請求重試次數
$CTL -w net.ipv4.tcp_synack_retries=3             # 最大 ACK 確認重試次數
$CTL -w net.ipv4.tcp_fin_timeout=60               # TCP 鏈接等待超時
$CTL -w net.ipv4.tcp_max_syn_backlog=3200         # SYN 請求的隊列長度
複製代碼

設置具體的 iptables 規則

清理已有的規則

避免已有的防火牆規則形成干擾,需先進行清理,刪除全部表中用戶自定義的鏈,清空全部鏈內的規則。

#### 3.4 具體的防火牆規則
$IPT -t filter -X                                 # 刪除各表中自定義的鏈
$IPT -t nat -X
$IPT -t filter -F                                 # 清空各表中已有的規則
$IPT -t nat -F
複製代碼
設置規則鏈的默認策略

實際環境中,防火牆過濾規則需採起默認拒絕的策略,可提升安全性。

學習過程當中,仍是建議採起默認容許的策略,需將默認策略中的DROP改成ACCEPT

$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
複製代碼
設置 nat 表中的各類規則

nat 表主要用在 Linux 網關服務器中,需根據實際狀況編寫相應的SNATDNAT規則。

$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
複製代碼
設置 filter 表中的各類規則

filter 表主要用來過濾數據包。

主機型防火牆主要使用INPUTOUTPUT鏈。

網絡型防火牆主要使用FORWARD鏈。

默認拒絕的狀況下,要實現共享上網,除了設置SNAT策略外,還需放行內網 PC 與 Internet 中的 DNS、HTTPD 等相關服務通訊;

注意: 在實際工做中,建議你們仍是根據實際網絡狀況進行設置相應的規則,並在測試環境中進行測試,確保規則無誤,避免致使網絡通訊出現故障。

$IPT -A FOEWARD -s $LAN_NET -o $INET_IF -p udp 53 -j ACCEPT
$IPT -A FOEWARD -s $LAN_NET -o $INET_IF -p udp 80 -j ACCEPT
$IPT -A FOEWARD -d $LAN_NET -i $INET_IF -m state ESTABLISHED,RELATED -j ACCEPT
複製代碼

添加執行權限

# chmod +x /opt/myiptables.sh
複製代碼

執行/opt/myiptables.sh腳本文件

# /opt/myiptables.sh 
net.ipv4.ip_forward = 1
net.ipv4.ip_default_ttl = 128
net.ipv4.icmp_echo_ignore_all = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_fin_timeout = 60
net.ipv4.tcp_max_syn_backlog = 3200
複製代碼

查看防火牆規則

# iptables -nL FORWARD
複製代碼

/opt/myiptables.sh腳本文件設置爲開機自動執行

# vi /etc/rc.local
/opt/myiptables.sh
複製代碼

推薦閱讀

iptables 防火牆(一)| 四表/五鏈、數據包匹配流程、編寫 iptables 規則

iptables 防火牆(二)| SNAT / DNAT 策略及應用


原創不易,若是你以爲這篇文章對你有點用的話,麻煩你爲本文點個贊、評論或轉發一下,由於這將是我輸出更多優質文章的動力,感謝!

咱們下期再見!

相關文章
相關標籤/搜索