2017年10月10日 星期二

Fortigate 只接受特定外網IP 進行PING

Fortigate 只接受特定外網IP

要設定,讓特定外網IP Ping Fortigate,在執行上比較麻煩,意思是你不能特別關閉PING,再讓PING端口開啟給一個指定IP。

求其次,你只能設置讓特定IP能訪問Fortigate Firewall,順便能PING。

一般來說,Interfaces裡的Restricted Access功能,大家都很熟悉,裡面能讓WAN開啟HTTPS,SSH,PING服務去做管理,而這個Restricted Access部份,是設計給”Administrator”使用的。意思是指 System>Administrators 裡面的Users。



所以,只要修改Administrators>admin,裡面Enable “Restrict login to trust hosts” ,並加入管理者的常用外網IP,就能讓Fortigate只接受特定IP訪問,包括HTTPS和PING。



但有種情況,我只想要某IP,只能PING,而不能做其他訪問,要如何做? 以下解說:

1. 在System>Admin Profiles 新增一個Admin設置,老外都喜歡叫no_logon,Access Control設成全部None。
2. 在System>Administrators 新增一個User,例如ping_only, Administrator Profile設成剛剛的no_logon。
3. 把剛剛新增的User的Restrict login to trusted hosts. 並設置指定外網IP。
4. 單是限制這個User並不足夠,「所有」其他Admin帳戶都要設置Restrict login to trusted hosts. 並設置成管理者常用的外網IP。

增加no_logon的Admin Profile,設置為「無權限」


為ping_only新增一個trust host


結論可想而見, ping_only的trusted hosts可以PING到該Fortigate Firewall,但不能登錄。 而admin帳戶的Trust hosts就可以Ping可以登錄。


後記,有些管理者需要常在外地工作,在任何地方都要Access Firewall,建議就要先有一個固定IP的VPN,撥號後再登錄Fortigate。


2017年5月11日 星期四

SYN_FLOOD Apache 的 SYN_RECV數 最大只有 256 ?

環境 CentOS 7,Apache 2.4

新安裝的Server,的確如遭遇SYN_FLOOD時,很容易就達到預設的SYN上限256。Google了很多,很多文章都教直接修改 net.ipv4.tcp_max_syn_backlog=128 ,去一個更大的值例如 1024。 但在Kernel2.6之後呢,有些文章指出,Apache的Backlog是依據另一個參數 net.core.somaxconn=128去做Backlog。因為兩個值的預設值都是128,所以可能比較容易混淆。兩個值都設到1024或以上(視乎RAM)是比較好。 

我的機器設置了兩個IP,同一個Apache服務器,當其中一個IP受到SYN_FLOOD攻擊時,另一個IP的Virtual Host居然沒受到影響,可見系統資源是遊刃有餘,可是因為SYN_RECV的上限是256,所以過長的隊列讓Virtual Host變得不穩定。

正題,設置
sysctl -w net.core.somaxconn=1024   

#修改 httpd.conf
vi httpd.conf
增加 ListenBacklog 800  #註: 如果沒加這句,預設值是511,因為ListenBacklog是mpm類,所以我是加到mpm中。如果不設置,他的值就是511,所以不設置也是OK的。

#重啟Apache
systemctl stop httpd.service
systemctl start httpd.service


#測試
輸入指令 ss -lti '( sport = :http )'
得出以下類似結果,注意Send-Q的Listen有你剛剛設置的數值
State      Recv-Q Send-Q Local Address:Port                 Peer Address:Port   
LISTEN     0      800       :::http                    :::*
         cubic rto:1000 mss:536 cwnd:10 lastsnd:2605019262 lastrcv:2605019262 lastack:2605019262

以下是Send-Q的意義


而實際上,在你未設置時,他會選擇 min(somaxconn, ListenBacklog),作為backlog的數列大小,於是新安裝時這個Send-Q Listen值是 128。 而 Syn_RECV 是Send-Q x2 =256。 那麼設置後就是 800x2 = 1600個。  可以頂得住一時三刻,以效能去稍為舒緩SYN_FLOOD帶來的不穩定。 

後記
sysctl -w 是用作暫時性的修改變量,重開機後就變回預設值。要永久設置請

vi /etc/sysctl.conf
直接在下方空白處Insert

net.core.somaxconn=1024

每次重開機,都會調用/etc/sysctl.conf這個檔案。


參考文獻


Google