顯示具有 router 標籤的文章。 顯示所有文章
顯示具有 router 標籤的文章。 顯示所有文章

2021年2月4日 星期四

routeros常用指令

  1. 設定網卡名稱
    1. /interface
    2. print
    3. set 0 name=lan
    4. set 1 name=wan
  2. 設定IP
    1. /ip address
    2. print
    3. add address=172.16.1.11/16 interface=lan //新增介面lan之IP
    4. remove 編號 //刪除某介面之IP
    5. set 編號 address=172.16.1.11/16 interface=lan
    6. 新增ADSL連線(pppoe client連線)
      1. /interface ppoe-client
      2. add disable=no name="自訂名稱" interface=網卡名稱 user=xxxx@ip業者 password=密碼 profile=default add-default-route=no(三大) dial-on-demand=no(三大) use-peer-dns=no(三大) allow=chap,mschap1,mschap2
  3. 新增路由
    1. /ip route
    2. print
    3. /add gateway=遠端路由IP
    4. add dst-address=192.168.2.0/24 gateway=172.16.1.2
  4. 設定Dns
    1. /ip dns
    2. print
    3. set servers=8.8.8.8,168.95.1.1 allow-remote-requests=no
  5. Nat上網
    1. SNAT
      1. add chain=srcnat action=src-nat to-addresses=對外代表IP src-address=172.16.0.0/16
      2. add chain=srcnat action=masquerade to-addresses=218.32.127.167 out-interface=pppoe-sdtv(三大)
    2. DNAT
      1. add chain=dstnat action=dst-nat to-addresses=172.16.1.2 dst-address=163.23.115.68
  6. 網路偵測
    1. /ping ip
    2. /tool traceroute ip
  7. 建立dhcp server
    1. 新增 ip pool
      1. /ip pool
      2. print
      3. add name=pool名稱 range=ip範圍
    2. 新增 dhcp server服務
      1. /ip dhcp-server
      2. print
      3. add disabled=no name=名稱 address-pool=pool名稱 interface=網卡名竹木月土月
  8. 使用者管理
    1. /user
    2. print
    3. add name=test group=read 
  9. 關閉dhcp相關log檔
    1. /log
    2. print
    3. /system/logging
    4. add action=memory disabled=yes prefix=dhcp topics=debug
  10. vpn(使用pptp協定)
    1. 建立vpn_pool
      1. /ip pool
      2. print
      3. add name=vpn_pool ranges=172.16.4.100-172.16.4.200
    2. 建立PPTP Server 的環境(local-address校內網路預設路由,remote-address登入後之IP)
      1. /ppp profile
      2. print
      3. add dns-server=8.8.8.8 local-address=172.16.1.254 name=PPTP_Profile remote-address=vpn_pool change-tcp-mss=yes use-encryption=yes(配合windows系統可使用required,但ubuntu使用有點問題,故採用yes)
    3. 設定與啟(停)用 pptp server
      1. /interface pptp-server server
      2. print
      3. set authentication=chap,mschap1,mschap2 default-profile=PPTP_profile enabled=yes
      4. set enabled=yes(or no)
    4. 設定Client端之連線帳號(從家中登入的帳號密碼)
      1. /ppp secret
      2. print (密碼會以明碼呈現)
      3. add name=帳號 password=密碼 profile=PPTP_Profile service=pptp
    5. 防火牆過濾予通過(pptp使用1723port)
      1. add chain=input dst-port=1723 protocol=tcp
      2. add chain=input protocol=gre
  11. CLOSE_WAIT連接過多的現象分析與處理(原因參見)
    • 縮短client的keep-alive時間
    • 延長server的keep-alive時間
  12. 整合第二外線(參見阿堯老師)

2021年1月31日 星期日

wireshark捕獲/過濾封包

一、捕獲過濾:先在capture option中設定,僅捕獲符合條件的封包,可避免記憶體佔用。

Protocol(協議):
可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp.
如果沒有特別指明是什麼協議,則預設使用所有支援的協議。

Direction(方向):
可能的值: src, dst, src and dst, src or dst
如果沒有特別指明來源或目的地,則預設使用 “src or dst” 作為關鍵字。
例如,”host 10.2.2.2″與”src or dst host 10.2.2.2″是一樣的。

Host(s):
可能的值: net, port, host, portrange.
如果沒有指定此值,則預設使用”host”關鍵字。
例如,”src 10.1.1.1″與”src host 10.1.1.1″相同。

Logical Operations(邏輯運算):
可能的值:not, and, or.
否(“not”)具有最高的優先順序。或(“or”)和與(“and”)具有相同的優先順序,運算時從左至右進行。
例如,
“not tcp port 3128 and tcp port 23″與”(not tcp port 3128) and tcp port 23″相同。
“not tcp port 3128 and tcp port 23″與”not (tcp port 3128 and tcp port 23)”不同。

  • host 192.168.1.1      //抓取192.168.1.1 收到和發出的封包
  • src host 192.168.1.1    //抓取來源地址192.168.1.1發出的封包
  • dst host 192.168.1.1    //揝取目標地址192.168.1.1收到的封包
  • src host hostname    //根據主機名過濾
  • ether host 80:05:09:03:E4:35    //根據MAC地址過濾
  • net 192.168.1    //過濾網段
  • src net 192.168 //過濾來源網段
  • dst net 192 //過濾目標網段
  • 抓取所有目的地址是192.168.1.2 或192.168.1.3 埠是80 的TCP 資料
    (tcp port 80) and ((dst host 192.168.1.2) or (dst host 192.168.1.3)) 
  • 抓取所有目標MAC 地址是80:05:09:03:E4:35 的ICMP 資料
    (icmp) and ((ether dst host 80:05:09:03:E4:35))
  • 抓取所有目的網路是192.168,但目的主機不是192.168.1.2 的TCP 資料
    (tcp) and ((dst net 192.168) and (not dst host 192.168.1.2))
  • 捕獲主機192.168.1.1 和主機192.168.1.2 或192.168.1.3的通訊
    host 192.168.1.1 and  (192.168.1.2 or 192.168.1.3 )
  • 獲取主機192.168.1.1除了和主機192.168.1.2之外所有主機通訊的封包
    host 192.168.1.1 and ! 192.168.1.2
  • 獲取主機192.168.1.1接收或發出的telnet包,telnet使用tcp 23埠
    tcp port 23 and host 192.168.1.1

二、顯示過濾:完整的復現網路環境再加以過濾,較佔用記憶體

  • 表達式
    • 數據鏈路層:
      • 篩選mac地址為04:f9:38:ad:13:26的數據包:eth.addr == 04:f9:38:ad :13:26
      • 篩選源mac地址為04:f9:38:ad:13:26的數據包:eth.src == 04:f9:38:ad:13:26
      • 抓取所有目標MAC 地址是80:05:09:03:E4:35 的ICMP 資料
      • icmp && eth.dst==80:05:09:03:E4:35
    • 網絡層:
      • 篩選ip地址為192.168.1.1的數據包:ip.addr == 192.168.1.1
      • 篩選192.168.1.0網段的數據:ip contains "192.168.1"
      • 篩選192.168.1.1和192.168.1.2之間的數據包:ip.addr == 192.168.1.1 && ip.addr == 192.168.1.2
      • 篩選從192.168.1.1到192.168.1.2的數據包:ip.src == 192.168.1.1 && ip.dst = = 192.168.1.2
      • ip.addr ==192.168.1.1 //顯示所有與192.168.1.1相關的封包
      • ip.dst==192.168.1.1 //顯示目標是192.168.1.1的封包
      • ip.src ==192.168.1.1 //顯示來源是192.168.1.1的封包
      • ip.src==192.168.0.0/16   //網路過濾,過濾一個網段
    • 傳輸層:
      • 篩選tcp協議的數據包:tcp
      • 篩選除tcp協議以外的數據包:!tcp
      • 篩選端口為80的數據包:tcp.port == 80
      • 篩選12345端口和80端口之間的數據包:tcp.port == 12345 && tcp.port == 80
      • 篩選從12345端口到80端口的數據包:tcp.srcport == 12345 && tcp. dstport == 80
      • 抓取所有目的地址是192.168.1.2 或192.168.1.3 埠是80 的TCP 資料
        tcp.port==80 && (ip.dst==192.168.1.2 || ip.dst==192.168.1.3)
    • 應用層:
      • http中http.request表示請求頭中的第一行(如GET index.jsp HTTP/1.1)
      • http.response表示響應頭中的第一行(如HTTP/1.1 200 OK),其他頭部都用http.header_name形式。
      • 篩選url中包含.php的http數據包:http.request.uri contains ".php"
      • 篩選內容包含username的http數據包:http contains "username"
      • http.request.method == POST
      • http.request.method == GET
      • http.response.code == 200
  • 抓取所有目的網路是192.168,但目的主機不是192.168.1.2 的TCP 資料
    tcp&&ip.dst==192.168.0.0/16&&!(ip.dst==192.168.1.2)
  • 捕獲主機192.168.1.1 和主機192.168.1.2 或192.168.1.3的通訊
    ip.addr==192.168.1.1&&(ip.addr==192.168.1.2||ip.addr==192.168.1.3)
  • 獲取主機192.168.1.1除了和主機192.168.1.2之外所有主機通訊的封包
    ip.addr==192.168.1.1&&!ip.addr==192.168.1.2
  • 獲取主機192.168.1.1接收或發出的telnet包,telnet使用tcp 23埠
    tcp.port==23&&ip.addr==192.168.1.1
  • 過濾特定Protocol,可直接輸入協定名稱,例如http、https、ssl及ssh等。
    • http.request //顯示GET(單純請求下載) or POST上傳資料
    • http and not http.request //顯示網頁資料內容
  • packet lost的查看
    • tcp.analysis.flags tcp.flags.syn == 1
    • tcp包的syn字段為1
    • tco.flags.reset == 1
本文參考自 ITREAD01,語法可參見程式前沿

2016年12月16日 星期五

GS-2210-24交換器操作備忘

  1. 交換機上各埠的燈號顏色
    • 琥珀色100MB網路連線(不是壞掉了)
    • 綠色1000MB網路連線
  2. 同步設備時間
    • Basic Setting->General Setup
      • Use Time Server when Bootup NTP(RFC-1350)
      • Time Server IP Address 211.22.103.158
      • Time Zone UTC+0800
  3. DHCP Snoopping (非法DHCP阻擋)
    • Advanced ApplicationIP Source GuardIPv4 Source Guard Setup Click Here
      • IP Source GuardDHCP SnoopingConfigure
        1. Port (25~28埠設定為Trusted) 設定完點選Configure
        2. VLAN
          • Show VLAN (1~1)
          • 點選 VID 1 Enabled 點選Yes 設定完點選Configure
        3. 在DHCP Snooping Configure界面
          • Active 勾選
          • DHCP Vlan 1
    • Advanced ApplicationIP Source GuardIPv4 Source Guard Setup Click Here 檢視DHCP IP 配送情形
  4. Loop Guard (網路Loopa偵測阻擋)
    • Advanced Application > Loop Guard
      • 25~28埠(上層信任port)不勾選,其餘port勾選 
      • Active 勾選
    • 檢視Loop Guard狀態
      • Advanced ApplicationErrdisableErrdisable Status Click here
        • 檢視Active項目、Status為Forwarding為正常(Err-disable不正常)
    • 檢視port狀態
      • ManagementPort Status
        • status FORWARDING 為正常運作
        • status STOP 未連線
        • Err-disable 表示異常,請檢查錯誤項目
  5. 錯誤回復時間設定
    • Advanced Application > Errdisable > Errdisable Recovery
      • 預設為5分後回復
本文參考彰化縣教育訓練文件
課程講義下載:https://goo.gl/9xcwDF
報不進的老師可以從網頁下載講義及範例
如有技術問題,可直接聯絡本案技術窗口陳先生
04-37076400#8421     E-Mail:yukai.chen@zyxel.com.tw

2016年3月21日 星期一

建置PPTP VPN Server與家中電腦藉VPN取得外部資源

  1. 設定PPTP Server 的 IP 分配範圍(家中電腦登陸學校後取得的IP)
    /ip pool
    add name=PPTP_pool ranges=172.16.4.100-172.16.4.200
  2. 設定PPTP Server 的環境(local-address校內網路預設路由,remote-address登入後之IP)
    /ppp profile
    add dns-server=163.23.115.65 local-address=172.16.1.254 name=PPTP_Profile \
    remote-address=PPTP_pool change-tcp-mss=yes use-encryption=yes(配合windows系統可使用required,但ubuntu使用有點問題,故採用yes)
  3. 設定PPPoE Client之連線帳號(從家中登入的帳號密碼)
    /ppp secret
    add name=帳號 password=密碼 profile=PPTP_Profile service=pptp
  4. 啟用PPTP Server
    /interface pptp-server server (L2TP則為/interface l2tp-server server 並多加use-ipsec=yes,ipsec-secret=密碼選項)
    set authentication=chap,mschap1,mschap2 default-profile=PPTP_profile enabled=yes
    • 使用winbox啟用PPTP Server
      /PPP Interface > PPTP Server(L2TP Server)
      1. 啟用 Enable
      2. Default Profile=PPTP_Profile
      3. 認證方式:mschap2、mschap1、chap、pap(安全性低,不建議使用)
  5. 防火牆設定予通過
    /ip firewall filter
    add chain=input dst-port=1723 protocol=tcp
    add chain=input protocol=gre

=================================================================

/ip pool
add name=L2TP_Pool ranges=192.168.1.118-192.168.1.125

#注意自己閘道位置,例如192.168.1.254
/ppp profile
add change-tcp-mss=yes dns-server=168.95.1.1 local-address=192.168.1.254 \
name=L2tp-in remote-address=L2TP_Pool use-encryption=yes

#建立使用者帳號 test1 密碼test123 
/ppp secret
add name=test1 password=test123 profile=L2tp-in service=l2tp

#設定認證通道密碼及認證模式
/ppp interface l2tp-server server (Terminal /interface l2tp-server server)
set caller-id-type=number default-profile=L2tp-in enabled=yes \
ipsec-secret=12345678 use-ipsec=yes

client客端設定
參考星知苑

D-Link DWL-3200AP設定

僅當作一般AP使用
  1. AP接上電源。
  2. LAN插孔接上PC
  3. 將PC之IP改成192.168.0.100與AP 預設IP(192.168.0.50)為同一網域。
  4. 啟動瀏覽器輸入http://192.168.0.50/
  5. 輸入帳號admin
  6. 輸入密碼:預設是空白
  7. 修改wireless資料(在Basic Setting功能選項中)
    • mode->Access Point
    • SSID->MCJHAP240(自己命名)
    • channel->1(隔開不要干擾)
    • Authentication.->Open System/Shared Key
    • Encryption->Enabled
    • Key Type->ASCII
    • Key Size->64 Bits
    • Valid Key ->First
    • First Key->自己設密碼
    • APPLY
    • 重新登入
  8. 修改DHCP Server資料(在Advanced Settings功能選項中)
    • Function Enable/Disable->Enabled
    • IP Assigned From->172.16.53.2 (分配IP的起始IP,注意本AP不是NAT模式)
    • The Range of Pool (1-255)->252(有幾個IP讓AP分配)
    • SubMask->255.255.255.0
    • Gateway->172.16.0.254(預 設網路之Gateway)
    • DNS->210.240.11.1
    • Lease Time->36000
    • Stats->On
    • Apply
    • 重新登入
  9. 選Tool修改AP密碼
    • New Password
    • Confirm New Password
    • Apply
    • 請重新登入
    •  
  10. 修改LAN資料
    • IP address-> 172.16.53.1(輸入自己所規劃的,本次規劃一個AP負責一個C Class,自己是第一個IP)
    • Subnet Mask->255.255.255.0
    • Default Gateway-& gt;172.16.0.254(學校內部Gateway)
    • Apply
  11. 如果您要看看一看設定時,需將PC之IP改成172.16.53..100(與新設AP之IP同網域)
  12. 瀏覽器輸入(新設定 AP之ip) http:/172.16.53.1
  13. 完工後,將 AP之LAN接在學校一般網路中即可。
  14. 完成。

2016年3月15日 星期二

SYN攻擊原理以及檢測防範技術

據 統計,在所有駭客攻擊事件中,SYN攻擊是最常見又最容易被利用的一種攻擊手法。相信很多人還記得2000年YAHOO網站遭受的攻擊事例,當時駭客利用 的就是簡單而有效的SYN攻擊,有些網路蠕蟲病毒配合SYN攻擊造成更大的破壞。本文介紹SYN攻擊的基本原理、工具及檢測方法,並全面探討SYN攻擊防 範技術。
  一、TCP握手協議
  在TCP/IP協定中,TCP協定提供可靠的連接服務,採用三次握手建立一個連接。
  第一次握手:建立連接時,用戶端發送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;
第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;
  第三次握手:用戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此包發送完畢,用戶端和伺服器進入ESTABLISHED狀態,完成三次握手。
  完成三次握手,用戶端與伺服器開始傳送資料,在上述過程中,還有一些重要的概念:
未連接佇列:在三次握手協議中,伺服器 維護一個未連接佇列,該佇列為每個用戶端的SYN包(syn=j)開設一個條目,該條目表明伺服器已收到SYN包,並向客戶發出確認,正在等待客戶的確認 包。這些條目所標識的連接在伺服器處於Syn_RECV狀態,當伺服器收到客戶的確認包時,刪除該條目,伺服器進入ESTABLISHED狀態。
Backlog參數:表示未連接佇列的最大容納數目。
  SYN-ACK 重傳次數 伺服器發送完SYN-ACK包,如果未收到客戶確認包,伺服器進行首次重傳,等待一段時間仍未收到客戶確認包,進行第二次重傳,如果重傳次數超 過系統規定的最大重傳次數,系統將該連接資訊從半連接佇列中刪除。注意,每次重傳等待的時間不一定相同。
  半連接存活時間:是指半連接佇列的條目存活的最長時間,也即服務從收到SYN包到確認這個報文無效的最長時間,該時間值是所有重傳請求包的最長等待時間總和。有時我們也稱半連接存活時間為Timeout時間、SYN_RECV存活時間。
  二、SYN攻擊原理
  SYN攻擊屬於DOS攻擊的一種, 它利用TCP協議缺陷,通過發送大量的半連接請求,耗費CPU和記憶體資源。SYN攻擊除了能影響主機外,還可以危害路由器、防火牆等網路系統,事實上 SYN攻擊並不管目標是什麼系統,只要這些系統打開TCP服務就可以實施。從上圖可看到,伺服器接收到連接請求(syn=j),將此資訊加入未連接佇列, 並發送請求包給客戶(syn=k,ack=j+1),此時進入SYN_RECV狀態。當伺服器未收到用戶端的確認包時,重發請求包,一直到超時,才將此條 目從未連接佇列刪除。配合IP欺騙,SYN攻擊能達到很好的效果,通常,用戶端在短時間內偽造大量不存在的IP位址,向伺服器不斷地發送syn包,伺服器 回復確認包,並等待客戶的確認,由於源位址是不存在的,伺服器需要不斷的重發直至超時,這些偽造的SYN包將長時間佔用未連接佇列,正常的SYN請求被丟 棄,目標系統執行緩慢,嚴重者引起網路堵塞甚至系統癱瘓。
三、SYN攻擊工具
  SYN攻擊實現起來非常的簡單,互聯網上有大量現成的SYN攻擊工具。
  1、windows系統下的SYN工具
  以synkill.exe為例,執 行工具,選擇隨機的源位址和源端囗,並填寫目的機器位址和TCP端囗,啟動執行,很快就會發現目標系統執行緩慢。如果攻擊效果不明顯,可能是目的機器並未 開啟所填寫的TCP端囗或者防火牆拒絕訪問該端囗,此時可選擇允許訪問的TCP端囗,通常,windows系統開放tcp139端囗,UNIX系統開放 tcp7、21、23等端囗。
  四、檢測SYN攻擊
  檢測SYN攻擊非常的方便,當你在伺服器上看到大量的半連接狀態時,特別是源IP位址是隨機的,基本上可以斷定這是一次SYN攻擊。我們使用系統自帶的netstat 工具來檢測SYN攻擊:
  # netstat -n -p TCP
tcp 0  0 10.11.11.11:23  124.173.152.8:25882  SYN_RECV -
tcp 0  0 10.11.11.11:23  236.15.133.204:2577  SYN_RECV -
tcp 0  0 10.11.11.11:23  127.160.6.129:51748  SYN_RECV -
tcp 0  0 10.11.11.11:23  222.220.13.25:47393  SYN_RECV -
tcp 0  0 10.11.11.11:23  212.200.204.182:60427 SYN_RECV -
tcp 0  0 10.11.11.11:23  232.115.18.38:278   SYN_RECV -
tcp 0  0 10.11.11.11:23  239.116.95.96:5122  SYN_RECV -
tcp 0  0 10.11.11.11:23  236.219.139.207:49162 SYN_RECV -
...
  上面是在LINUX系統中看到的,很多連接處於SYN_RECV狀態(在WINDOWS系統中是SYN_RECEIVED狀態),源IP位址都是隨機的,表明這是一種帶有IP欺騙的SYN攻擊。
  我們也可以通過下面的命令直接查看在LINUX環境下某個端囗的未連接佇列的條目數:
  #netstat -n -p TCP   grep SYN_RECV   grep :22   wc -l
324
  顯示TCP端囗22的未連接數有324個,雖然還遠達不到系統極限,但應該引起管理員的注意。
五、SYN攻擊防範技術 
  關於SYN攻擊防範技術,人們研究 得比較早。歸納起來,主要有兩大類,一類是通過防火牆、路由器等過濾閘道防護,另一類是通過加固TCP/IP協議棧防範.但必須清楚的是,SYN攻擊不能 完全被阻止,我們所做的是盡可能的減輕SYN攻擊的危害,除非將TCP協議重新設計。
  1、過濾閘道防護
  這裏,過濾閘道主要指明防火牆,當然路由器也能成為過濾閘道。防火牆部署在不同網路之間,防範外來非法攻擊和防止保密資訊外泄,它處於用戶端和伺服器之間,利用它來防護SYN攻擊能起到很好的效果。過濾閘道防護主要包括超時設定,SYN閘道和SYN代理三種。
  ■閘道超時設定:防火牆設定SYN 轉發超時參數(狀態檢測的防火牆可在狀態表裏面設定),該參數遠小於伺服器的timeout時間。當用戶端發送完SYN包,服務端發送確認包後 (SYN+ACK),防火牆如果在計數器到期時還未收到用戶端的確認包(ACK),則往伺服器發送RST包,以使伺服器從佇列中刪去該半連接。值得注意的 是,閘道超時參數設定不宜過小也不宜過大,超時參數設定過小會影響正常的通訊,設定太大,又會影響防範SYN攻擊的效果,必須根據所處的網路應用環境來設 定此參數。
  ■SYN閘道:SYN閘道收到用戶 端的SYN包時,直接轉發給伺服器;SYN閘道收到伺服器的SYN/ACK包後,將該包轉發給用戶端,同時以用戶端的名義給伺服器發ACK確認包。此時伺 服器由半連接狀態進入連接狀態。當用戶端確認包到達時,如果有資料則轉發,否則丟棄。事實上,伺服器除了維持半連接佇列外,還要有一個連接佇列,如果發生 SYN攻擊時,將使連接佇列數目增加,但一般伺服器所能承受的連接數量比半連接數量大得多,所以這種方法能有效地減輕對伺服器的攻擊。
  ■SYN代理:當用戶端SYN包到 達過濾閘道時,SYN代理並不轉發SYN包,而是以伺服器的名義主動回復SYN/ACK包給客戶,如果收到客戶的ACK包,表明這是正常的訪問,此時防火 牆向伺服器發送ACK包並完成三次握手。SYN代理事實上代替了伺服器去處理SYN攻擊,此時要求過濾閘道自身具有很強的防範SYN攻擊能力。
2、加固tcp/ip協議棧
  防範SYN攻擊的另一項主要技術是 調整tcp/ip協定棧,修改tcp協定實現。主要方法有SynAttackProtect保護機制、SYN cookies技術、增加最大半連接和縮短超時時間等。tcp/ip協議棧的調整可能會引起某些功能的受限,管理員應該在進行充分瞭解和測試的前提下進行 此項工作。
  ■SynAttackProtect機制
  為防範SYN攻擊,win2000 系統的tcp/ip協定棧內嵌了SynAttackProtect機制,Win2003系統也採用此機制。SynAttackProtect機制是通過關 閉某些socket選項,增加額外的連接指示和減少超時時間,使系統能處理更多的SYN連接,以達到防範SYN攻擊的目的。預設情況下,Win2000作 業系統並不支援SynAttackProtect保護機制,需要在登錄檔以下位置增加SynAttackProtect鍵值:
  HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  當SynAttackProtect值(如無特別說明,本文提到的登錄檔鍵值都為十六進位)為0或不設定時,系統不受SynAttackProtect保護。
  當SynAttackProtect值為1時,系統通過減少重傳次數和延遲未連接時路由緩衝項(route cache entry)防範SYN攻擊。
當SynAttackProtect值 為2時(Microsoft推薦使用此值),系統不僅使用backlog佇列,還使用附加的半連接指示,以此來處理更多的SYN連接,使用此鍵值 時,tcp/ip的TCPInitialRTT、window size和可滑動窗囗將被禁止。

  我們應該知道,平時,系統 是不啟用SynAttackProtect機制的,僅在檢測到SYN攻擊時,才啟用,並調整tcp/ip協議棧。那麼系統是如何檢測SYN攻擊發生的呢? 事實上,系統根據TcpMaxHalfOpen,TcpMaxHalfOpenRetried 和TcpMaxPortsExhausted三個參數判斷是否遭受SYN攻擊。
  TcpMaxHalfOpen 表示能同時處理的最大半連接數,如果超過此值,系統認為正處於SYN攻擊中。Win2000 server預設值為100,Win2000 Advanced server為500。
   TcpMaxHalfOpenRetried定義了保存在backlog佇列且重傳過的半連接數,如果超過此值,系統自動啟動 SynAttackProtect機制。Win2000 server預設值為80,Win2000 Advanced server為400。
  TcpMaxPortsExhausted 是指系統拒絕的SYN請求包的數量,預設是5。
  如果想調整以上參數的預設值,可以在登錄檔裏修改(位置與SynAttackProtect相同)
  ■ SYN cookies技術
  我們知道,TCP協議開闢了一個比較大的記憶體空間backlog佇列來存儲半連接條目,當SYN請求不斷增加,並這個空間,致使系統丟棄SYN連接。為使半連接佇列被塞滿的情況下,伺服器仍能處理新到的SYN請求,SYN cookies技術被設計出來。
  SYN cookies應用於linux、FreeBSD等作業系統,當半連接佇列滿時,SYN cookies並不丟棄SYN請求,而是通過加密技術來標識半連接狀態。
在TCP實現中,當收到用戶端的SYN 請求時,伺服器需要回復SYN+ACK包給用戶端,用戶端也要發送確認包給伺服器。通常,伺服器的初始序列號由伺服器按照一定的規律計算得到或採用亂數, 但在SYN cookies中,伺服器的初始序列號是通過對用戶端IP地址、用戶端端囗、伺服器IP地址和伺服器端囗以及其他一些安全數值等要素進行hash運算,加 密得到的,稱之為cookie。當伺服器遭受SYN攻擊使得backlog佇列滿時,伺服器並不拒絕新的SYN請求,而是回復cookie(回復包的 SYN序列號)給用戶端, 如果收到用戶端的ACK包,伺服器將用戶端的ACK序列號減去1得到cookie比較值,並將上述要素進行一次hash運算,看看是否等於此 cookie。如果相等,直接完成三次握手(注意:此時並不用查看此連接是否屬於backlog佇列)。
  在RedHat linux中,啟用SYN cookies是通過在啟動環境中設定以下命令來完成:
  # echo 1 > /proc/sys/net/ipv4/tcp_syncookies
  ■ 增加最大半連接數
  大量的SYN請求導致未連接佇列被塞滿,使正常的TCP連接無法順利完成三次握手,通過增大未連接佇列空間可以緩解這種壓力。當然backlog佇列需要佔用大量的記憶體資源,不能被無限的擴大。
  WIN2000:除了上面介紹的 TcpMaxHalfOpen, TcpMaxHalfOpenRetried參數外,WIN2000作業系統可以通過設定動態backlog(dynamic backlog)來增大系統所能容納的最大半連接數,配置動態backlog由AFD.SYS驅動完成,AFD.SYS是一種內核級的驅動,用於支援基於 window socket的應用程式,比如ftp、telnet等。AFD.SYS在登錄檔的位置:
HKLM\System\CurrentControlSet\Services\AFD\ParametersEnableDynamicBacklog值為1時,表示啟用動態backlog,可以修改最大半連接數。 
MinimumDynamicBacklog 表示半連接佇列為單個TCP端囗分配的最小空閒連接數,當該TCP端囗在backlog佇列的空閒連接小於此臨界值時,系統為此端囗自動啟用擴展的空閒連 接(DynamicBacklogGrowthDelta),Microsoft推薦該值為20。

  MaximumDynamicBacklog是當前活動的半連接和空閒連接的和,當此和超過某個臨界值時,系統拒絕SYN包,Microsoft推薦MaximumDynamicBacklog值不得超過2000。
   DynamicBacklogGrowthDelta值是指擴展的空閒連接數,此連接數並不計算在MaximumDynamicBacklog內,當半連 接佇列為某個TCP端囗分配的空閒連接小於MinimumDynamicBacklog時,系統自動分配 DynamicBacklogGrowthDelta所定義的空閒連接空間,以使該TCP端囗能處理更多的半連接。Microsoft推薦該值為10。
  LINUX:Linux用變數 tcp_max_syn_backlog定義backlog佇列容納的最大半連接數。在Redhat 7.3中,該變數的值預設為256,這個值是遠遠不夠的,一次強度不大的SYN攻擊就能使半連接佇列占滿。我們可以通過以下命令修改此變數的值:
  # sysctl -w net.ipv4.tcp_max_syn_backlog="2048"
  Sun Solaris Sun Solaris用變數tcp_conn_req_max_q0來定義最大半連接數,在Sun Solaris 8中,該值預設為1024,可以通過add命令改變這個值:
  # ndd -set /dev/tcp tcp_conn_req_max_q0 2048
  HP-UX:HP-UX用變數tcp_syn_rcvd_max來定義最大半連接數,在HP-UX 11.00中,該值預設為500,可以通過ndd命令改變預設值:
  #ndd -set /dev/tcp tcp_syn_rcvd_max 2048
  ■縮短超時時間
  上文提到,通過增大backlog 佇列能防範SYN攻擊;另外減少超時時間也使系統能處理更多的SYN請求。我們知道,timeout超時時間,也即半連接存活時間,是系統所有重傳次數等 待的超時時間總和,這個值越大,半連接數佔用backlog佇列的時間就越長,系統能處理的SYN請求就越少。為縮短超時時間,可以通過縮短重傳超時時間 (一般是第一次重傳超時時間)和減少重傳次數來實現。
  Win2000第一次重傳之前等待 時間預設為3秒,為改變此預設值,可以通過修改網路接囗在登錄檔裏的TcpInitialRtt註冊值來完成。重傳次數由 TcpMaxConnectResponseRetransmissions 來定義,登錄檔的位置是:HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters registry key。
  當然我們也可以把重傳次數設定為0次,這樣伺服器如果在3秒內還未收到ack確認包就自動從backlog佇列中刪除該連接條目。
  LINUX:Redhat使用變數tcp_synack_retries定義重傳次數,其預設值是5次,總超時時間需要3分鐘。
  Sun Solaris Solaris 預設的重傳次數是3次,總超時時間為3分鐘,可以通過ndd命令修改這些預設值。