91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux軟件防火墻iptables詳解

馬哥Linux運維 ? 來源:博客園空白的旋律 ? 2025-03-01 14:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

軟件防火墻

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)實現

40062e82-f031-11ef-9310-92fbcf53809c.png

它們的優先級由高到低的順序為:

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] 和 firewalld
    發表于 07-17 10:34 ?1671次閱讀
    <b class='flag-5'>Linux</b>系統<b class='flag-5'>iptables</b>和firewall<b class='flag-5'>防火墻</b>的配置方法

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

    Linux中使用Iptables實現一個簡單的網站防火墻可以幫助我們保護服務器不受到惡意請求的攻擊。一個現實的場景是我們想要阻止某個IP地址訪問我們的網站。
    發表于 09-22 10:11 ?1059次閱讀
    <b class='flag-5'>Linux</b>中使用<b class='flag-5'>Iptables</b>實現簡單的網站<b class='flag-5'>防火墻</b>

    Linux內核防火墻netfilter的原理和應用

    Linux內核防火墻netfilter的原理和應用在分析ipchains缺陷的基礎上,著重介紹了Linux2.4版內核防火墻netfilter的結構框架、數據包的處理過程及配置工具
    發表于 09-19 09:22

    Linux下關閉防火墻的關閉及開放端口

    :service iptables stop3.查看防火墻狀態serviceiptablesstatus重啟服務service iptables restart實現配置文件及時生效source文件路徑
    發表于 07-09 06:23

    Linux如何關閉防火墻

    1、查看防火墻規則vim /etc/sysconfig/iptables放開某個端口號不被防火墻攔截,適用于部署tomcat,nginx等之類的軟件
    發表于 07-12 06:31

    Linux防火墻入門教程分享

    合理的防火墻是你的計算機防止網絡入侵的第一道屏障。你在家里上網,通常互聯網服務提供會在路由中搭建一層防火墻。當你離開家時,那么你計算機上的那層防火墻就是僅有的一層,所以配置和控制好你 Linu
    發表于 12-28 06:54

    請問如何自動加載iptables防火墻規則?

    系統啟動后,如何自動加載iptables防火墻規則?
    發表于 01-07 08:46

    基于Linux防火墻技術研究

    介紹了防火墻的基本概念及其主要功能,分析了Linux 內核防火墻Netfilter 的架構、構建防火墻的工作原理及其與內核的交互.最后給出了Netfilter 構建
    發表于 06-10 14:40 ?15次下載

    基于Linux防火墻的可視化管理系統的研究與實現

    針對Iptables 命令配置防火墻規則的復雜性,本系統研究和實現了基于linux 防火墻的可視化管理系統。關鍵詞:Iptables
    發表于 07-16 08:47 ?16次下載

    Linux新型內核防火墻研究和應用

    Linux新型防火墻netfilter框架原理及工作機制基礎上,研究了該防火墻的應用設計, 提出了用netfilter/iptables構建門戶服務器
    發表于 08-25 11:35 ?14次下載

    如何列出和刪除防火墻規則UFW

    UFW意為簡單的防火墻,是用于管理iptables/netfilter防火墻規則的用戶友好的前端。
    的頭像 發表于 12-06 17:52 ?7792次閱讀

    Linux防火墻配置(iptables和firewalld)

    防火墻就是根據系統管理員設定的規則來控制數據包的進出,主要是保護內網的安全,目前 Linux 系統的防火墻類型主要有兩種:分別是 [iptables] 和 firewalld
    的頭像 發表于 03-31 10:09 ?1460次閱讀

    硬件防火墻軟件防火墻區別

    電子發燒友網站提供《硬件防火墻軟件防火墻區別.doc》資料免費下載
    發表于 10-21 11:03 ?1次下載

    Linux系統中iptables防火墻配置詳解

    iptablesLinux內核中用于配置防火墻規則的工具。它基于Netfilter框架,可以對通過網絡接口的數據包進行過濾、修改等操作。通過設置一系列規則,iptables能夠控制哪
    的頭像 發表于 06-18 15:25 ?259次閱讀

    Linux系統中iptables與firewalld防火墻的區別

    防火墻是一種網絡安全設備,用于監控和控制網絡流量,根據預定義的安全規則來允許或阻止數據包通過。Linux系統中主要有兩種防火墻解決方案:iptables和firewalld。
    的頭像 發表于 07-14 11:24 ?118次閱讀
    主站蜘蛛池模板: 在线免费视频观看 | 久热久| 影院成人区精品一区二区婷婷丽春院影视 | 成人国产日本亚洲精品 | 性欧美久久 | 深深激情网 | 西西人体44renti大胆亚洲 | 色噜噜狠狠大色综合 | 好爽好深太大了再快一点 | 91福利社在线观看 | 五月婷婷综合激情 | 浮荡视频在线观看免费 | 色视频免费观看高清完整 | 亚洲精品美女 | 久久综合九色综合97_ 久久久 | 久久久夜夜夜 | 亚洲免费资源 | 日日爽视频| 亚洲一级免费毛片 | 五月天婷婷在线观看视频 | 欧美色视频在线 | 俄罗斯一级成人毛片 | 福利姬 magnet | 最近2018年中文字幕免费图片 | 好爽~~~~嗯~~~再快点明星 | 在线视频精品免费 | 亚洲视屏一区 | 中文4480yy私人免费影院 | 四虎国产欧美成人影院 | 丁香婷婷九月 | 午夜视频在线观看国产 | 欧美深夜福利 | www.婷婷| 男人j桶进女人免费视频 | 日本三级香港三级三级人!妇久 | 欧美日韩一区二区三区视频在线观看 | 免费一级欧美片在线观免看 | 午夜手机福利视频 | 美女扒开尿口给男人桶爽视频 | 天堂网址 | 一级片视频播放 |