軟件防火墻
Linux提供的軟件防火墻,名為iptables,它可以理解為是一個客戶端代理,通過iptables的代理,將用戶配置的安全策略執行到對應的安全框架中,這個安全框架稱之為netfilter。
iptables是一個命令行的工具,位于用戶空間,我們用這個工具操作真正的框架,也就是netfilter
真正實現流量過濾的防火墻框架是netfilter,位于內核空間,它倆共同組成了Linux的軟件防火墻,一般用來代替昂貴的硬件防火墻,實現數據包過濾,網絡地址轉換等。
在Centos7發行版本下,firewalld防火墻又取代了iptables防火墻
iptables是將配置好的規則交給內核層的netfilter網絡過濾器來處理 filrewalld服務是將配置好的防火墻規則交給內核層的nftables網絡過濾器處理 這倆工具二選一即可,都只是命令行工具,
iptables是什么
iptables是開源的基于數據包過濾的防火墻工具。
Iptables使用場景
1、主機防火墻(filter表的INPUT鏈)。 2、局域網共享上網(nat表的POSTROUTING鏈)。半個路由器,NAT功能。 3、端口及IP映射(nat表的PREROUTING鏈),硬防的NAT功能。 4、IP一對一映射。
netfilter 中五個勾子函數和報文流向
Netfilter在內核中選取五個位置放了五個hook(勾子) function(INPUT、OUTPUT、FORWARD、 PREROUTING、POSTROUTING),而這五個hook function向用戶開放,用戶可以通過一個命令工具 (iptables)向其寫入規則 由信息過濾表(table)組成,包含控制IP包處理的規則集(rules),規則被分組放在鏈(chain)上
三種報文流向
1)流入本機:PREROUTING--> INPUT --> 用戶空間進程 2)流出本機:用戶空間進程--> OUTPUT --> POSTROUTING 3)轉發:PREROUTING -->FORWARD -->POSTROUTING
iptables組成
五表五鏈以及一些規則組成
鏈chain: 1)內置鏈:每個內置鏈對應于一個鉤子函數 2)自定義鏈:用于對內置鏈進行擴展或補充,可實現更靈活的規則組織管理機制;只有HOOK鉤子調用自定義鏈時,才生效 五個內置鏈chain INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING 五個表 table:filter,nat,mangle,raw,security 1)filter:過濾規則表,根據預定義的規則過濾符號條件的數據包,默認表 2)nat:network address translation地址轉換規則表 3)mangle:修改數據標記位規則表 4)raw:關閉啟用的連接跟蹤機制,加快封包穿越防火墻速度 5)security:用于強制訪問控制(MAC)網絡規則,由Linux安全模塊(如SELINUX)實現
它們的優先級由高到低的順序為:
security---> raw---> mangle---> nat---> filter
內核中數據包的傳輸過程
1)當一個數據包進入網卡時,數據包首先進入PREROUTING鏈,內核根據數據包目的IP判斷是否需要轉送出去 2)如果數據包是進入本機的,數據包就會沿著圖向下移動,到達INPUT鏈。數據包到達INPUT鏈后,任何進程都會收到它。本機上運行的程序可以發送數據包,這些數據包經過OUTPUT鏈,然后到達POSTROUTING鏈輸出 3)如果數據包是要轉發出去的,且內核允許轉發,數據包就會向右移動,經過FORWARD鏈,然后到達POSTROUTING鏈輸出
范例,查看默認的表
[root@localhost ~]# iptables -vnL Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination [root@localhost ~]# iptables -vnL -t filter Chain INPUT (policy ACCEPT 24 packets, 1600 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 14 packets, 1784 bytes) pkts bytes target prot opt in out source destination
iptables規則添加時考量點
1)要實現哪種功能:判斷添加在哪張表上 2)報文流經的路徑:判斷添加在哪個鏈上 3)報文的流向:判斷源和目的 4)匹配規則:業務需要
iptables常見的處理動作:
1)內建處理動作:ACCEPT,DROP,REJECT,SNAT,DNAT,MASQUERADE,MARK,LOG...;其中最常用的只有,允許:ACCEPT,拋棄:DROP,拒絕:REJECT 2)自定義處理動作:自定義chain,利用分類管理復雜情形;規則要添加在鏈上,才生效;添加在自定義鏈上不會自動生效。 3)白名單:只有指定的特定主機可以訪問,其它全拒絕 4)黑名單:只有指定的特定主機拒絕訪問,其它全允許,默認方式
因為CentOS7,8都是Firewalls防火墻,所以需要關閉才能更好的使用iptables我們定義的防火墻規則
[root@localhost ~]# systemctl disable --now firewalld
iptables 用法說明
幫助:man 8 iptables
格式:
iptables [-t table] {-A|-C|-D} chain rule-specification iptables [-t table] -I chain [rulenum] rule-specification iptables [-t table] -R chain rulenum rule-specification iptables [-t table] -D chain rulenum iptables [-t table] -S [chain [rulenum]] iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...] iptables [-t table] -N chain iptables [-t table] -X [chain] iptables [-t table] -P chain target iptables [-t table] -E old-chain-name new-chain-name rule-specification = [matches...] [target] match = -m matchname [per-match-options] target = -j targetname [per-target-options]
iptables命令格式詳解:
iptables [-t table] SUBCOMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]
1、-t table:指定表
raw, mangle, nat, [filter]默認
2、SUBCOMMAND:子命令
鏈管理類:
-N:new, 自定義一條新的規則鏈 -E:重命名自定義鏈;引用計數不為0的自定義鏈不能夠被重命名,也不能被刪除 -X:delete,刪除自定義的空的規則鏈 -P:Policy,設置默認策略;對filter表中的鏈而言,其默認策略有:ACCEPT:接受, DROP:丟棄
查看類:
-L:list,列出指定鏈上的所有規則,本選項需置后 -n:numberic,以數字格式顯示地址和端口號 -v:verbose,詳細信息 -vv:更詳細 -x:exactly,顯示計數器結果的精確值,而非單位轉換后的易讀值 --line-numbers:顯示規則的序號 -S selected,以iptables-save命令格式顯示鏈上規則
規則管理類:
-A:append,追加 -I:insert,插入,要指明插入至的規則編號,默認為第一條 -D:delete,刪除 1)指明規則序號 2)指明規則本身 -R:replace,替換指定鏈上的指定規則編號 -F:flush,清空指定的規則鏈 -Z:zero,置零 iptables的每條規則都有兩個計數器 1)匹配到的報文的個數 2)匹配到的所有報文的大小之和
范例:
[root@localhost ~]# iptables -F OUTPUT
常用組合
-vnL -vvnxL --line-numbers
范例
[root@localhost ~]# iptables -vnL Chain INPUT (policy ACCEPT 177 packets, 12622 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 106 packets, 9596 bytes) pkts bytes target prot opt in out source destination [root@localhost ~]# iptables -vnL --line-numbers Chain INPUT (policy ACCEPT 1606 packets, 3268K bytes) num pkts bytes target prot opt in out source destination 1 22 1824 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 2 2 120 REJECT all -- * * 172.31.0.18 0.0.0.0/0 reject-with icmp-port-unreachable 3 1 60 REJECT all -- * * 172.31.0.7 0.0.0.0/0 reject-with icmp-port-unreachable Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 1338 packets, 98490 bytes) num pkts bytes target prot opt in out source destination
匹配條件
1)基本:通用的,PARAMETERS 2)擴展:需加載模塊,MATCH EXTENTIONS
擴展動作:
REJECT:--reject-with:icmp-port-unreachable默認 RETURN:返回調用鏈 REDIRECT:端口重定向 LOG:記錄日志,dmesg MARK:做防火墻標記 DNAT:目標地址轉換 SNAT:源地址轉換 MASQUERADE:地址偽裝 自定義鏈
iptables基本匹配條件
基本匹配條件:無需加載模塊,由iptables/netfilter自行提供
[!] -s, --source address[/mask][,...]:源IP地址或者不連續的IP地址 [!] -d, --destination address[/mask][,...]:目標IP地址或者不連續的IP地址 [!] -p, --protocol protocol:指定協議,可使用數字如0(all) protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or“all“ 參看:/etc/protocols [!] -i, --in-interface name:報文流入的接口;只能應用于數據報文流入環節,只應用于INPUT、 FORWARD、PREROUTING鏈 [!] -o, --out-interface name:報文流出的接口;只能應用于數據報文流出的環節,只應用于 FORWARD、OUTPUT、POSTROUTING鏈
范例:
準備好一個可以訪問的網站頁面 [root@localhost ~]# yum install -y httpd;echo 172.31.0.17 > /var/www/html/index.html;systemctl start httpd 沒有添加iptables規則時其他機器可以訪問 [root@localhost ~]# curl 172.31.0.17 172.31.0.17 iptables設置 [root@localhost ~]# iptables -vnL Chain INPUT (policy ACCEPT 365 packets, 25579 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 215 packets, 23508 bytes) pkts bytes target prot opt in out source destination [root@localhost ~]# iptables -A INPUT -s 172.31.0.18,172.31.0.7 -j REJECT [root@localhost ~]# iptables -I INPUT -i lo -j ACCEPT 添加完iptables規則后,只有本機可以訪問,被規則限制的ip不能訪問 [root@localhost ~]# curl 127.0.0.1 172.31.0.17 [root@localhost ~]# curl 172.31.0.17 curl: (7) Failed connect to 172.31.0.17:80; Connection refused [root@sz-kx-centos8 ~]# curl 172.31.0.17 curl: (7) Failed to connect to 172.31.0.17 port 80: Connection refused
范例:添加某個固定ip并允許
[root@localhost ~]# iptables -A INPUT -s 172.31.0.1 -j ACCEPT
范例:添加某個固定ip并丟棄
[root@localhost ~]# iptables -A INPUT 1 -s 172.31.0.18 -j DROP
范例:添加整個網段并拒絕連接(謹慎使用)
[root@localhost ~]# iptables -A INPUT -s 172.31.0.0/16 -j REJECT
范例:在序號3插入
[root@localhost ~]# iptables -I INPUT 3 -s 172.31.0.100 -j ACCEPT [root@localhost ~]# iptables -vnL --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 22 1824 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 2 405 32145 ACCEPT all -- * * 172.31.0.1 0.0.0.0/0 3 0 0 ACCEPT all -- * * 172.31.0.100 0.0.0.0/0 4 2 120 REJECT all -- * * 172.31.0.18 0.0.0.0/0 reject-with icmp-port-unreachable 5 1 60 REJECT all -- * * 172.31.0.7 0.0.0.0/0 reject-with icmp-port-unreachable 6 40 2473 REJECT all -- * * 172.31.0.0/16 0.0.0.0/0 reject-with icmp-port-unreachable Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 51 packets, 5936 bytes) num pkts bytes target prot opt in out source destination
范例:刪除序號3這條規則
[root@localhost ~]# iptables -D INPUT 3
范例:替換序號4的規則把拒絕替換成允許
[root@localhost ~]# iptables -R INPUT 4 -s 172.31.0.7 -j ACCEPT
范例:清空所有規則
[root@localhost ~]# iptables -F
范例:iptables默認是黑名單,改成白名單
[root@localhost ~]# iptables -P INPUT DROP # 實現效果如下: [root@localhost ~]# iptables -vnL Chain INPUT (policy ACCEPT 48 packets, 4965 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 40 packets, 5824 bytes) pkts bytes target prot opt in out source destination [root@localhost ~]# iptables -A INPUT -i lo -j ACCEPT [root@localhost ~]# iptables -A INPUT -s 172.31.0.17 -j ACCEPT [root@localhost ~]# iptables -A INPUT -s 172.31.0.1 -j ACCEPT [root@localhost ~]# iptables -A INPUT -s 172.31.0.1 -j REJECT [root@localhost ~]# iptables -P INPUT DROP [root@localhost ~]# iptables -vnL Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- * * 172.31.0.17 0.0.0.0/0 103 6840 ACCEPT all -- * * 172.31.0.1 0.0.0.0/0 0 0 REJECT all -- * * 172.31.0.1 0.0.0.0/0 reject-with icmp-port-unreachable Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 21 packets, 2152 bytes) pkts bytes target prot opt in out source destination
規則優化最佳實踐
1. 安全放行所有入站和出站的狀態為ESTABLISHED狀態連接,建議放在第一條,效率更高 2. 謹慎放行入站的新請求 3. 有特殊目的限制訪問功能,要在放行規則之前加以拒絕 4. 同類規則(訪問同一應用,比如:http ),匹配范圍小的放在前面,用于特殊處理 5. 不同類的規則(訪問不同應用,一個是http,另一個是mysql ),匹配范圍大的放在前面,效率更 高 6. 應該將那些可由一條規則能夠描述的多個規則合并為一條,減少規則數量,提高檢查效率 7. 設置默認策略,建議白名單(只放行特定連接) iptables -P,不建議,容易出現“自殺現象” 規則的最后定義規則做為默認策略,推薦使用,放在最后一條
iptables保存規則
以上命令都是臨時生效,持久保存規則需要如下操作:
方法一:
# 保存規則 [root@localhost ~]# iptables-save > /home/iptables.ruls # 執行導入保存的規則 [root@localhost ~]# iptables-restore < /home/iptables.ruls 寫入開機啟動配置 [root@localhost ~]# vim /etc/rc.d/rc.local iptables-restore < /home/iptables.ruls # 加執行權限 [root@localhost ~]# chmod +x /etc/rc.d/rc.local
方法二:(CentOS7,8)
# 安裝 [root@localhost ~]# yum install iptables-services 添加到配置文件里面 [root@localhost ~]# iptables-save > /etc/sysconfig/iptables 啟動 [root@localhost ~]# systemctl start iptables 設置開機啟動 [root@localhost ~]# systemctl enable --now iptables
擴展模塊的使用幫助:
CentOS 7,8: man iptables-extensions CentOS 6: man iptables
iptables 在使用-p選項指明了特定的協議時,無需再用-m選項指明擴展模塊的擴展機制,不需要手動加
載擴展模塊
tcp 協議的擴展選項
[!] --source-port, --sport port[:port]:匹配報文源端口,可為端口連續范圍 [!] --destination-port,--dport port[:port]:匹配報文目標端口,可為連續范圍 [!] --tcp-flags mask comp mask 需檢查的標志位列表,用,分隔 , 例如 SYN,ACK,FIN,RST comp 在mask列表中必須為1的標志位列表,無指定則必須為0,用,分隔tcp協議的擴展選項
范例:
--tcp-flags SYN,ACK,FIN,RST SYN 表示要檢查的標志位為SYN,ACK,FIN,RST四個,其中SYN必 須為1,余下的必須為0,第一次握手 --tcp-flags SYN,ACK,FIN,RST SYN,ACK 第二次握手 #錯誤包 --tcp-flags ALL ALL --tcp_flags ALL NONE
[!] --syn:用于匹配第一次握手, 相當于:--tcp-flags SYN,ACK,FIN,RST SYN
udp 協議的擴展選項
[!] --source-port, --sport port[:port]:匹配報文的源端口或端口范圍 [!] --destination-port,--dport port[:port]:匹配報文的目標端口或端口范圍
icmp 協議的擴展選項
[!] --icmp-type {type[/code]|typename} type/code 0/0 echo-reply icmp應答 8/0 echo-request icmp請求
范例:限制某個固定IP不能ssh端口遠程連接,21:23是區間
[root@localhost ~]# iptables -A INPUT -s 172.31.0.7 -p tcp --dport 21:23 -j REJECT
范例:限制某個固定IP,icmp請求就拒絕
[root@localhost ~]# iptables -A INPUT -s 172.31.0.7 -p icmp --icmp-type 8 -j REJECT
隱式擴展
# 在序號3插入一條允許固定ip訪問80端口 [root@localhost ~]# iptables -I INPUT 3 -s 172.31.0.7 -p tcp --dport 80 -j ACCEPT
范例:實現了本機能ping通某個ip,但是對方不能ping通本機
[root@localhost ~]# iptables -A INPUT -s 172.31.0.18 -p icmp --icmp-type 8 -j REJECT
multiport擴展
以離散方式定義多端口匹配,最多指定15個端口
#指定多個源端口 [!] --source-ports,--sports port[,port|,port:port]... # 指定多個目標端口 [!] --destination-ports,--dports port[,port|,port:port]... #多個源或目標端 [!] --ports port[,port|,port:port]...
范例:使用multiport模塊拒絕訪問多個不連續的端口號
[root@localhost ~]# iptables -A INPUT -s 172.31.0.18 -p tcp -m multiport --dports 80,22,21 -j REJECT
iprange擴展
指明連續的(但一般不是整個網絡)ip地址范圍
[!] --src-range from[-to] 源IP地址范圍 [!] --dst-range from[-to] 目標IP地址范圍
范例:拒絕某個網段的IP地址范圍
[root@localhost ~]# iptables -A INPUT -m iprange --src-range 172.31.0.1-172.31.0.7 -j REJECT
mac擴展
mac 模塊可以指明源MAC地址,,適用于:PREROUTING, FORWARD,INPUT chains
[!] --mac-source XXXXXX:XX
范例:通過某臺機器的mac拒絕
[root@localhost ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:43:04:9b -j REJECT
string擴展
對報文中的應用層數據做字符串模式匹配檢測
--algo {bm|kmp} 字符串匹配檢測算法 bm:Boyer-Moore kmp:Knuth-Pratt-Morris --from offset 開始偏移 --to offset 結束偏移 [!] --string pattern 要檢測的字符串模式 [!] --hex-string pattern要檢測字符串模式,16進制格式
范例:規則遇到相對應的字符串就拒絕
[root@localhost ~]# iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62 --string "google" -j REJECT
time擴展
注意:CentOS 8 此模塊有問題
根據將報文到達的時間與指定的時間范圍進行匹配
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期 --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]] --timestart hh:mm[:ss] 時間 --timestop hh:mm[:ss] [!] --monthdays day[,day...] 每個月的幾號 [!] --weekdays day[,day...] 星期幾,1 – 7 分別表示星期一到星期日 --kerneltz:內核時區(當地時間),不建議使用,CentOS 7版本以上系統默認為 UTC 注意: centos6 不支持kerneltz ,--localtz指定本地時區(默認)
范例:某個網段IP不能在某個時間拒絕訪問主機80端口
[root@localhost ~]# iptables -A INPUT -s 172.31.0.0/16 -d 172.31.0.17 -p tcp --dport 80 -m time --timestart 16:00 --timestop 16:10 -j REJECT
connlimit擴展
根據每客戶端IP做并發連接數數量匹配
可防止Dos(Denial of Service,拒絕服務)攻擊
--connlimit-upto N #連接的數量小于等于N時匹配 --connlimit-above N #連接的數量大于N時匹配
范例:連接數超過2個就拒絕
[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 2 -j REJECT
limit擴展
基于收發報文的速率做匹配 , 令牌桶過濾器
--limit-burst number #前多少個包不限制 --limit #[/second|/minute|/hour|/day]
范例:前5個請求包不限制,后續每1分鐘10個,其他不符合規則執行下面的
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT [root@localhost ~]# iptables -A INPUT -p icmp -j REJECT
state擴展
state 擴展模塊,可以根據”連接追蹤機制“去檢查連接的狀態,較耗資源
conntrack機制:追蹤本機上的請求和響應之間的關系
狀態類型:
NEW:新發出請求;連接追蹤信息庫中不存在此連接的相關信息條目,因此,將其識別為第一次發 出的請求 ESTABLISHED:NEW狀態之后,連接追蹤信息庫中為其建立的條目失效之前期間內所進行的通信 狀態 RELATED:新發起的但與已有連接相關聯的連接,如:ftp協議中的數據連接與命令連接之間的關 系 INVALID:無效的連接,如flag標記不正確 UNTRACKED:未進行追蹤的連接,如:raw表中關閉追蹤
記錄舊信息路徑
[root@localhost ~]# cat /proc/net/nf_conntrack
范例:老用戶允許連接,新用戶拒絕連接
[root@localhost ~]# iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT [root@localhost ~]# iptables -A INPUT -m state --state NEW -j REJECT
范例:本機可以訪問172.31.0.18,但是172.31.0.18不能訪問本機
[root@localhost ~]# iptables -A INPUT -s 172.31.0.18 -m state --state NEW -j REJECT
連接數測試案例:
# 連接數給一個最少的數值 [root@localhost ~]# echo 1 > /proc/sys/net/netfilter/nf_conntrack_max # 查看日志 [root@localhost ~]# tail -f /var/log/messages May 8 16:34:27 localhost kernel: nf_conntrack: table full, dropping packet May 8 16:34:28 localhost kernel: nf_conntrack: table full, dropping packet ... # 建議修改適當加大連接數 [root@localhost ~]# echo 655350 > /proc/sys/net/netfilter/nf_conntrack_max
Target
target 包括以下類型
自定義鏈, ACCEPT, DROP, REJECT,RETURN,LOG,SNAT,DNAT,REDIRECT,MASQUERADE LOG:非中斷target,本身不拒絕和允許,放在拒絕和允許規則前,并將日志記錄在/var/log/messages系 統日志中 --log-level level 級別: debug,info,notice, warning, error, crit, alert,emerg --log-prefix prefix 日志前綴,用于區別不同的日志,最多29個字符
范例:某個網段訪問80,21:23端口的在日志重新生成日志并打印出來到系統日志,提示語句開頭new connections:
[root@localhost ~]# iptables -A INPUT -s 172.31.0.0/16 -p tcp -m multiport --dports 80,21:23 -m state --state NEW -j LOG --log-prefix "new connections: " 查看日志 [root@localhost ~]# tail -f /var/log/messages May 8 15:34:30 localhost systemd: Started Vsftpd ftp daemon. May 8 16:01:01 localhost systemd: Started Session 470 of user root. full, dropping packet May 8 16:55:20 localhost kernel: new connections: IN=eth0 OUT= MAC=00:0c:29:51:7200:0c:29:43:04:9b:08:00 SRC=172.31.0.18 DST=172.31.0.17 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=60599 DF PROTO=TCP SPT=35722 DPT=80 WINDOW=29200 RES=0x00 SYN URGP=0
規則優化最佳實踐
1. 安全放行所有入站和出站的狀態為ESTABLISHED狀態連接,建議放在第一條,效率更高 2. 謹慎放行入站的新請求 3. 有特殊目的限制訪問功能,要在放行規則之前加以拒絕 4. 同類規則(訪問同一應用,比如:http ),匹配范圍小的放在前面,用于特殊處理 5. 不同類的規則(訪問不同應用,一個是http,另一個是mysql ),匹配范圍大的放在前面,效率更 高 6. 應該將那些可由一條規則能夠描述的多個規則合并為一條,減少規則數量,提高檢查效率 7. 設置默認策略,建議白名單(只放行特定連接) iptables -P,不建議,容易出現“自殺現象” 規則的最后定義規則做為默認策略,推薦使用,放在最后一條
iptables保存規則
以上命令都是臨時生效,持久保存規則需要如下操作:
方法一:
# 保存規則 [root@localhost ~]# iptables-save > /home/iptables.ruls # 執行導入保存的規則 [root@localhost ~]# iptables-restore < /home/iptables.ruls 寫入開機啟動配置 [root@localhost ~]# vim /etc/rc.d/rc.local iptables-restore < /home/iptables.ruls # 加執行權限 [root@localhost ~]# chmod +x /etc/rc.d/rc.local
方法二:(CentOS7,8)
# 安裝 [root@localhost ~]# yum install iptables-services 添加到配置文件里面 [root@localhost ~]# iptables-save > /etc/sysconfig/iptables 啟動 [root@localhost ~]# systemctl start iptables 設置開機啟動 [root@localhost ~]# systemctl enable --now iptables
鏈接:https://www.cnblogs.com/xuanlv-0413/p/14748275.html
-
Linux
+關注
關注
87文章
11509瀏覽量
213719 -
軟件
+關注
關注
69文章
5150瀏覽量
89206 -
防火墻
+關注
關注
0文章
435瀏覽量
36186
原文標題:網絡工程師必備:拆解iptables四表五鏈底層架構與防御實戰
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
Linux系統iptables和firewall防火墻的配置方法

Linux中使用Iptables實現簡單的網站防火墻

評論