亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2771 | 回復: 0
打印 上一主題 下一主題

1個ipfw規(guī)則腳本(feebsd+ipfw+dummynet+http透明代理) [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-11-02 17:44 |只看該作者 |倒序瀏覽
本帖最后由 kkkggg 于 2013-11-21 17:01 編輯

備忘。
dummynet的動態(tài)帶寬分配功能很好用。在共享上網的環(huán)境下,要限制某些上傳流量過大堵塞網絡的ip的時候,按ip數動態(tài)分配帶寬比按優(yōu)先級或分配固定帶寬的方式要更有效。

下面先簡單描述一下數據包經過本防火墻規(guī)則匹配的流程,方便理清規(guī)則制定思路。復雜的地方在于本規(guī)則同時使用了透明代理和單ip流量控制以及狀態(tài)規(guī)則。
以下規(guī)則適用于系統(tǒng)參數net.inet.ip.fw.one_pass為1時的情況。即數據包只在同一方向放行一次。

如果把數據包按經過接口方向劃分類別的話,ipfw規(guī)則主要有in和out兩大方向,再乘以接口數就等于數據包接口方向類型總數。每種類型的數據包只匹配于同種類型的規(guī)則(一條規(guī)則可能屬于多種類型)。比方說通常一個數據包從內網傳輸到外網被看做是經過一個方向,但實際上這個數據包要至少匹配ipfw規(guī)則中的兩種規(guī)則:內網in方向和外網out兩種規(guī)則。
一般情況下(有一塊內網網卡,一塊外網網卡)的ipfw規(guī)則按接口方向分為6類
環(huán)路接口in
環(huán)路接口out
內網接口in
外網接口out
外網接口in
內網接口out


#環(huán)路接口in

放行所有數據包

#環(huán)路接口out

放行所有數據包

#內網接口in

拒絕指定的數據包
check-state
skipto跳轉需要放行并進行上行流量控制的數據包到拒絕規(guī)則后面,并加上keep-state
拒絕未匹配到的數據包
動態(tài)單個ip上行流量控制(因為涉及http代理,所以在這里進行每個ip上行流量控制。因為在外網接口那里已經分不出經過代理的http數據包原始源ip,無法很好的為每個ip分配帶寬)

#外網接口out

skipto跳轉不需要http代理的數據包到fwd規(guī)則后面
fwd重定向訪問http端口的數據包到本地http代理服務端口
nat源地址轉換

#外網接口in

拒絕指定的數據包
nat目的地址轉換

#內網接口out

check-stat
放行所有數據包


制定規(guī)則時,可以先按各個方向分別制定規(guī)則,然后把各個方向的規(guī)則根據優(yōu)先級順序拼在一起。規(guī)則匹配次數不一樣,對CPU造成的負荷不一樣。所以應該把匹配最頻繁、最多數量的數據包的規(guī)則盡量靠前。check-state規(guī)則在每個方向上都進行匹配,要特別小心。由于本規(guī)則在內網in和外網out方向均有跳轉語句,且跳轉到的規(guī)則動作不同。要想兩個這方向的規(guī)則互不影響的話,要把外網out規(guī)則放到前面,check-state放到中間,帶狀態(tài)的內網in規(guī)則放到后面。

下面是規(guī)則代碼,nat用的是libalias
  1. #定義網絡接口名變量

  2. ext_if="tun0"
  3. int_if="xl0"
  4. lan_net="10.0.0.0/22"

  5. #定義細分類端口變量(規(guī)則中不直接引用此類變量名,只為方便標識,后面會合并到主要分類中)

  6. general_tcp_ports="25,53,110,143,443,636,993,995"        #smtp,dns,pop3,imap,https,ldap,ipops,imaps
  7. general_udp_ports="53,123"                #dns,ntp
  8. msn_tcp_ports="569,1503,1863,5061,7001"
  9. government_tcp_ports="5222,5678,7002,7888,8980"                #某些政府服務器端口
  10. working_tcp_ports="212,1433,3306"        #,mssql,mysql
  11. qq_udp_ports="8000"

  12. #定義主要分類端口變量(會在規(guī)則中直接引用的變量名)

  13. http_proxy_ports="80"

  14. #用戶組1額外開放的端口
  15. group1_tcp_ports="22,6618,8000,8080,9898"      #ssh,酷狗,手機軟件,手機軟件,手機軟件
  16. group1_udp_ports="3545,6618"             #酷狗,酷狗

  17. #定義特殊應用1的目的端口
  18. special_app1_tcp_ports="8080"                #手機QQ

  19. #合并先前的細類,注意引號內不能有空格,一條規(guī)則端口參數項最多為30個
  20. permitted_tcp_ports_1="$general_tcp_ports,$msn_tcp_ports,$government_tcp_ports,$working_tcp_ports"
  21. permitted_udp_ports_1="$general_udp_ports,$qq_udp_ports"

  22. #本機開啟服務端口
  23. localhost_tcp_service="3000,3128,10000"                #ntop,squid,webmin
  24. localhost_udp_service="53,123"                #dns,dhcp,ntp

  25. #清空系統(tǒng)中已有的規(guī)則
  26. ipfw -q flush
  27. ipfw -q table all flush
  28. ipfw -q pipe flush

  29. #定義ip地址表

  30. #定義私有網絡地址表priv_net
  31. ipfw table 5 add 127.0.0.0/8
  32. ipfw table 5 add 192.168.0.0/16
  33. ipfw table 5 add 172.16.0.0/12
  34. ipfw table 5 add 10.0.0.0/8

  35. #定義拒絕的外網源地址
  36. ipfw table 10 add 200.0.0.1/32                #sample

  37. #定義無網絡權限客戶機ip
  38. ipfw table 15 add 10.0.1.25/32                #xxx

  39. #定義拒絕訪問目的地址ip
  40. ipfw table 20 add 220.164.144.207

  41. #無限制端口服務器地址
  42. ipfw table 25 add 202.105.113.38/32

  43. #定義允許訪問所有tcp端口的目的地址(http端口數據包依然要通過代理服務)
  44. ipfw table 30 add 116.228.70.245/32     #圓通物流

  45. #定義高訪問權限客戶機ip地址(除了不允許訪問的外網ip不能訪問外)
  46. ipfw table 35 add 10.0.0.9/32                #test
  47. ipfw table 35 add 10.0.0.63/32                #voip

  48. #定義不經過squid代理,直接訪問的服務器ip地址
  49. ipfw table 40 add 202.128.247.44/32        #海關物品編碼查詢
  50. ipfw table 40 add 58.61.142.185/32        #順豐快遞查單
  51. ipfw table 40 add 14.17.29.0/24                #qq離線文件服務器
  52. ipfw table 40 add 113.108.0.0/19        #qq離線文件服務器
  53. ipfw table 40 add 113.142.0.0/19        #qq離線文件服務器
  54. ipfw table 40 add 115.236.128.0/19        #qq離線文件服務器
  55. ipfw table 40 add 124.115.10.0/24        #qq離線文件服務器
  56. ipfw table 40 add 182.131.0.0/19        #qq離線文件服務器
  57. ipfw table 40 add 182.140.128.0/19        #qq離線文件服務器
  58. ipfw table 40 add 119.146.200.0/27        #網易云閱讀

  59. #定義不經過squid代理的客戶機ip
  60. ipfw table 45 add 10.0.1.64/32                #xxx

  61. #定義訪問與$special_app1_tcp_ports端口對應的地址
  62. ipfw table 50 add 121.14.64.0/18        #手機QQ

  63. #定義用戶組group1地址
  64. ipfw table 55 add 10.0.0.3/32                #xxx
  65. ipfw table 55 add 10.0.1.64/32                #xxx





  66. #規(guī)則開始


  67. #允許本地lo0接口雙向訪問
  68. ipfw -q add 100 allow all from any to any via lo0

  69. #放行發(fā)往內網的數據包
  70. ipfw -q add 200 allow all from any to $lan_net out xmit $int_if

  71. #丟棄指定外網ip發(fā)過來的數據包
  72. ipfw -q add 300 deny ip from table\(10\) to any in recv $ext_if

  73. #拒絕無網絡權限客戶機ip
  74. ipfw -q add 400 reject ip from table\(15\) to any in recv $int_if

  75. #丟棄ip分片包
  76. ipfw -q add 500 deny ip from any to any in frag

  77. #拒絕欺騙數據包進入
  78. ipfw -q add 600 deny ip from me to any in
  79. #ipfw -q add 700 deny ip from table\(5\) to any in recv $ext_if

  80. #NAT接收到的外網接口的數據包
  81. ipfw -q nat 1 config if $ext_if                #nat綁定到外網接口
  82. ipfw -q add 999 nat 1 ip from any to any in recv $ext_if                #nat從外網來的數據包

  83. #放行管理員客戶機
  84. #ipfw -q add 1100 allow ip from 10.0.1.10/32 to any in
  85. #ipfw -q add 1200 allow ip from any to 10.0.1.10/32 out

  86. #允許內網ssh連接本機(沒使用狀態(tài)規(guī)則,避免刷新規(guī)則時斷開連接)
  87. ipfw -q add 1300 allow tcp from any to me 22 in recv $int_if
  88. #ipfw -q add 1400 allow tcp from me 22 to any out xmit $int_if

  89. #允許本機dhcp服務
  90. ipfw -q add 1500 allow udp from any 68 to any 67 in recv $int_if
  91. #ipfw -q add 1600 allow udp from me 67 to any 68 out xmit $int_if

  92. #讓不使用http代理的數據包跳過下面的2999轉發(fā)規(guī)則
  93. ipfw -q add 1700 skipto 3999 tcp from any to table\(25\) out recv $int_if        #無限制外網ip
  94. ipfw -q add 1800 skipto 3999 tcp from table\(35\) to any out recv $int_if        #無限制用戶
  95. ipfw -q add 1900 skipto 3999 tcp from any to table\(40\) $http_proxy_ports out recv $int_if        #訪問指定不使用http代理的服務器地址
  96. ipfw -q add 2000 skipto 3999 tcp from table\(45\) to any $http_proxy_ports out recv $int_if        #指定不使用http代理的客戶機

  97. #轉發(fā)從內網接口進入的要出去的端口為$http_proxy_ports的非本機數據包到本機的3128端口(squid代理)
  98. ipfw -q add 2999 fwd 127.0.0.1,3128 tcp from $lan_net to not me $http_proxy_ports out recv $int_if

  99. #NAT要從外網接口出去的數據包
  100. ipfw -q add 3999 nat 1 ip from $lan_net to any out xmit $ext_if

  101. #狀態(tài)檢查
  102. ipfw -q add 4999 check-state

  103. #拒絕訪問指定目的地址
  104. ipfw -q add 5100 reject ip from any to table\(20\) in recv $int_if

  105. #允許指定放行的上行數據跳到規(guī)則10100進行流量控制

  106. #放行訪問指定本地服務端口的數據包(帶狀態(tài))
  107. ipfw -q add 5200 skipto 10100 udp from any to me $localhost_udp_service in recv $int_if keep-state
  108. ipfw -q add 5300 skipto 10100 tcp from any to me $localhost_tcp_service in setup recv $int_if keep-state

  109. #放行訪問任意端口的指定服務器地址
  110. ipfw -q add 5400 skipto 10100 ip from any to table\(25\) in recv $int_if keep-state

  111. #放行內網進入,訪問網頁代理端口$http_proxy_ports的數據包
  112. ipfw -q add 5500 skipto 10100 tcp from any to any $http_proxy_ports in recv $int_if

  113. #放行內網進入,$permitted_tcp_ports_1指定tcp端口的數據包
  114. ipfw -q add 5600 skipto 10100 tcp from any to any $permitted_tcp_ports_1 in setup recv $int_if keep-state

  115. #放行內網進入,$permitted_udp_ports_1指定udp端口的數據包
  116. ipfw -q add 5700 skipto 10100 udp from any to any $permitted_udp_ports_1 in recv $int_if keep-state

  117. #允許訪問所有tcp端口的指定目的地址(http依然要通過代理)
  118. ipfw -q add 5800 skipto 10100 tcp from any to table\(30\) in setup recv $int_if keep-state

  119. #放行高訪問權限客戶機
  120. ipfw -q add 5900 skipto 10100 ip from table\(35\) to any in recv $int_if keep-state

  121. #放行指定group1用戶組指定tcp端口的數據包
  122. ipfw -q add 6000 skipto 10100 tcp from table\(55\) to any $group1_tcp_ports in setup recv $int_if keep-state

  123. #放行指定group1用戶組指定udp端口的數據包
  124. ipfw -q add 6100 skipto 10100 udp from table\(55\) to any $group1_udp_ports in recv $int_if keep-state

  125. #放行訪問特殊應用1目的地址和tcp端口的數據包
  126. ipfw -q add 6200 skipto 10100 tcp from any to table\(50\) $special_app1_tcp_ports in setup recv $int_if keep-state        #手機QQ

  127. #放行icmp
  128. ipfw -q add 6300 skipto 10100 icmp from any to any in recv $int_if keep-state

  129. #拒絕以上規(guī)則未匹配到的內網數據包并返饋回源地址
  130. ipfw -q add 9999 reject ip from $lan_net to any in recv $int_if

  131. #流量控制(包括http代理在內的本機外出數據包沒有到達這里的流量控制規(guī)則)

  132. #內網接口上綁定隊列
  133. ipfw -q add 10100 queue 1 ip from $lan_net to not me in recv $int_if
  134. ipfw -q add 10200 queue 1 tcp from $lan_net to me 3128 in recv $int_if        #直接訪問本機http代理的數據包

  135. #為隊列指定pipe下,設定源地址匹配掩碼,按實時ip數平分帶寬
  136. ipfw -q queue 1 config pipe 1 mask src-ip 0x000003ff

  137. #設定管道帶寬(adsl上傳帶寬本應為500Kbit左右,但要為本機發(fā)出的數據包留出部分帶寬,否則http代理可能無法正常工作)
  138. ipfw -q pipe 1 config bw 420Kbit/s

  139. #最后一條
  140. ipfw -q add 65000 allow ip from any to any
復制代碼
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP