分類彙整:Linux
ip_conntrack: table full, dropping packet
之前架設一台vpn時, 由dmesg看到一個警告訊息 "ip_conntrack: table full, dropping packet" google了一下發現似乎是個還蠻常見的問題,通常是NAT user過多或是同時建立太多tcp connection,導致table爆炸,因為Linux Kernel在NAT預設的tcp timeout是五天,難怪user多就爆炸。所以改法很簡單,就是把table加大,timeout縮短即可,要注意的是table所使用的memory為 ip_conntrack_max * 232 Bytes 所以要小心大小,不要改的太爽,加到超過你記憶體能夠負擔的能力,步驟如下: 首先查看一下table size以及timeout預設是多少: cat /proc/sys/net/ipv4/ip_conntrack_max cat /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established 上面兩行指令能告訴你,目前機器上的table大小及tcp timeout時間 改法有二, 選一個你喜歡的作法即可 :Q 方法一: sysctl -w net.ipv4.ip_conntrack_max=131072 (or 任何妳喜歡且不會爆的值) sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=600 (把這兩行寫到你的開機啟動檔裡面) 方法二: 編輯/etc/sysctl.conf, … 繼續閱讀
高效率的iptables GEOIP模組
手邊有台vpn server上面用iptables跑policy routing,連往大陸地區就從特定interface出去,之前的做法是到apnic取得大陸地區最新的ip list後,再利用script一行一行餵進去iptables裡面,即使做過CIDR merge後,還是快要達到800筆record,每每上線使用者一多、或是流量變大時機器的loading就會增加,這種作法不用分析也大概猜得出來,iptables內部作rule match是採用list match,當rule量很大的時候,效能當然會變差。
使用MRTG觀察VPN(pptpd)上線人數
我的VPN伺服器是使用Poptop套件架設在Debian上,一旦有新的服務在手上,自然會好奇到底有多少人在使用,馬上浮現在腦海中的便是利用MRTG來做,實作起來也相當簡單,只需要編輯一個專屬的MRTG config檔以及自行撰寫一個shell script即可完成。
在Tomato firmware下直接連線到ADSL Modem
Tomato Firmware支援許多搭載broadcom晶片的無線網路分享器,在網路上廣受好評,我也是他的愛用者之一。一般家庭擁有無線網路的家庭最常見的網路配置方式應該如下圖所示: 如此的架構下,無線網路分享器下面的機器便無法直接連線進去ADSL modem中去看一些資訊(圖中192.168.1.1乃中華電信modem預設的IP),要解決這個問題只需幾個簡單的動作。 使用瀏覽器進入Tomato管理介面 到Administration -> Scripts -> Init標籤頁面,輸入: ifconfig vlan1:0 192.168.1.2 netmask 255.255.255.0 接著到Administration -> Scripts ->Firewall標籤頁面,輸入: /usr/sbin/iptables -I POSTROUTING -t nat -o vlan1 -d 192.168.1.0/24 -j MASQUERADE 最後使用瀏覽器,看看是否能成功連線至Modem設定頁面。
使用iptables來抵擋brute force ssh攻擊
每天都會有script kids到處亂掃機器,嘗試使用一些簡單常見的組合,看看能不能瞎貓碰到死號子,成功矇進去機器裡面,相信這是手邊有機器的朋友們共同的遭遇,打開log應該都是一整片try and error的紀錄。雖然透過這種方式成功的機會實在不高,但是機器三不五時就讓人家這樣try還是很不爽,有時候遇到機車一點的,還用個超長字典檔來嘗試,導致系統loading增高,感覺實在不好受。 網路上有許多現成的script或是套件來幫忙阻擋,雖然多了一些比較彈性的設定以及美美的統計,但是對我來說,只要能達到阻擋目的即可,所以我選擇不安裝額外套件的方式,採取已經就存在的iptables中的recent module來抵擋。只要短短兩行就搞定了: iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –set –name SSH -j ACCEPT iptables -A INPUT -p tcp –dport 22 -m recent –update –seconds 60 –hitcount 4 –rttl –name … 繼續閱讀
如何送command至第n層的Screen
使用*nix的朋友應該都對screen這個方便的工具相當熟悉。今天一個朋友向我求救他遇到的問題,他在A機器的screen中ssh到了B機器,在B機器上面reattch之前的screen session (使用screen -r),當他工作結束後,打算detach在B機器的screen session,很自然的按了 Ctrl a + d的命令,卻發現竟然是A機器的screen被detach掉而非B機上的! 解法很簡單: Ctrl + a + a + d 即可 換句話說,你要送給第n個screen指令時,就按幾次"a"就對啦!!希望對遇到相同問題的人有幫助。
