Jack Posted November 8, 2021 Share Posted November 8, 2021 (edited) ---------------------------------------------------- 你的雲主機需要有 noVNC Console / 远程连接 ---------------------------------------------------- 當你限制SSH只有你的IP才能連線 你的雲主機需要有 noVNC Console / 远程连接 避免之後你的IP位址變動,你的IP再也不能連接SSH 這時候如果雲主機有 noVNC Console / 远程连接,你將能夠修改防火牆規則 cd /usr/local/bin 將你的舊IP位址修改為新的IP位址,你的IP位址才能再次SSH連線 vi firewall.sh ------------------------------------------ iptables防火牆使用的規則 firewall.sh ------------------------------------------ 將以下內容複製貼上到 firewall.sh #!/bin/sh # 網段說明: # (1)1.2.3.0/24的意思是:1.2.3.0所屬的網路,子網路遮罩為255.255.255.0(24/8=3),整個網段的範圍是1.2.3.0到1.2.3.255。 # (2)1.2.3.0/16的意思是:1.2.3.0所屬的網路,子網路遮罩為255.255.0.0(16/8=2),整個網段的範圍是1.2.0.0到1.2.255.255。 # (3)1.2.3.0/8的意思是:1.2.3.0所屬的網路,子網路遮罩為255.0.0.0(8/8=1),整個網段的範圍是1.0.0.0到1.255.255.255。 ## -------------------------- 防火牆規則設定區段 -------------------------- ## # 設定禁止連線的IP,可使用空白分隔多個IP,也可以使用網段的寫法 BADIPS="198.108.0.0/16" # 設定不可能出現的內網IP # 若您的IP為 192.168.x.x ,請刪除 192.168.0.0/16 IMPOSSIBLE_IPS="10.0.0.0/8 192.168.0.0/16 172.16.0.0/16" # 允許對內連線的 TCP 通訊埠 # # 如果你使用軍哥LNMP一鍵安裝包,防火牆只需要打開 22 888 80 443這四個 # IN_TCP_PORTALLOWED="22,你的IP地址 888,你的IP地址 80 443" # # 如果你使用寶塔面板,防火牆只需要打開 22 888 8888 80 443這五個 # IN_TCP_PORTALLOWED="22,你的IP地址 888,你的IP地址 8888,你的IP地址 80 443" IN_TCP_PORTALLOWED="22,你的IP地址 888,你的IP地址 80 443" IN_UDP_PORTALLOWED="" IN_ICMP_ALLOWED="8" echo -n "Initiating iptables..." iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -t filter -F iptables -t nat -F iptables -t filter -X iptables -t nat -X echo "OK" [ "$1" = "start" ] && skiptest="1" echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses # 阻擋來源路由封包 for i in /proc/sys/net/ipv4/conf/*/accept_source_route; do echo "0" > $i done # 阻擋 ICMP Redirect 封包 for i in /proc/sys/net/ipv4/conf/*/accept_redirects; do echo "0" > $i done # 禁止送出 ICMP Redirect 封包 for i in /proc/sys/net/ipv4/conf/*/send_redirects; do echo "0" > $i done # 開啟核心的逆向路徑過濾功能 for i in /proc/sys/net/ipv4/conf/*/rp_filter; do echo "1" > $i done # 使用 SYN cookies 功能防止 SYN Flood 攻擊 echo 1 > /proc/sys/net/ipv4/tcp_syncookies # 縮短 TCP 連線的重試次數與逾時時間 echo 3 > /proc/sys/net/ipv4/tcp_retries1 echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout echo 1400 > /proc/sys/net/ipv4/tcp_keepalive_time echo 0 > /proc/sys/net/ipv4/tcp_window_scaling echo 0 > /proc/sys/net/ipv4/tcp_sack echo 0 > /proc/sys/net/ipv4/tcp_timestamps ## ---------------------- 預設阻擋所有連線的基本原則 ---------------------- ## echo -n "Setting firewall rules......" iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP iptables -A INPUT -i lo -j ACCEPT ## -------------------------- 阻擋可疑狀態的封包 -------------------------- ## iptables -N BADPKT iptables -A BADPKT -j DROP iptables -A INPUT -m state --state INVALID -j BADPKT iptables -A INPUT -p tcp ! --syn -m state --state NEW -j BADPKT iptables -A INPUT -p tcp --tcp-flags ALL NONE -j BADPKT iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j BADPKT iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j BADPKT iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j BADPKT iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j BADPKT iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j BADPKT iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j BADPKT iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j BADPKT iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j BADPKT iptables -A INPUT -p tcp --tcp-flags ALL ALL -j BADPKT iptables -A INPUT -p tcp --tcp-flags ALL FIN -j BADPKT # 允許已建立連線和回應的封包通過 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ## -------------------------- 阻擋特定 IP 的連線 -------------------------- ## # 新增一個名為 BADIP 的新鏈 iptables -N BADIP # 丟棄所有進入 BADIP 鏈的封包 iptables -A BADIP -j DROP # 阻擋特定 IP 的連線 for ip in $BADIPS $IMPOSSIBLE_IPS ; do iptables -A INPUT -s $ip -j BADIP done ## -------------------------- 允許特定 IP 的連線 -------------------------- ## for i in $IN_TCP_PORTALLOWED ; do IFS=',' set $i unset IFS ipt_option port="$1" [ -n "$2" ] && ipt_option="-s `echo $2 | sed 's/^!/! /'`" iptables -A INPUT -p tcp $ipt_option --dport $port --syn -m state --state NEW -j ACCEPT done # 允許特定 UDP 埠號的對內新連線 for i in $IN_UDP_PORTALLOWED ; do IFS=',' set $i unset IFS ipt_option port="$1" [ -n "$2" ] && ipt_option="-s `echo $2 | sed 's/^!/! /'`" iptables -A INPUT -p udp $ipt_option --dport $port -m state --state NEW -j ACCEPT done # 允許特定 ICMP 類型封包進入 for i in $IN_ICMP_ALLOWED ; do IFS=',' set $i unset IFS ipt_option type="$1" [ -n "$2" ] && ipt_option="-s `echo $2 | sed 's/^!/! /'`" iptables -A INPUT -p icmp $ipt_option --icmp-type $type -m state --state NEW -j ACCEPT done # 不管制對外連線,所以開放所有對外連線 iptables -A OUTPUT -m state --state NEW -j ACCEPT ## ------------------------------- 結束訊息 ------------------------------- ## echo "OK" # ----------------------------------------------------------------------------- if [ "$skiptest" = "1" ]; then exit ;fi echo -e "\n TEST MODE" echo -n "All chains will be cleaned after 7 sec." i=1; while [ "$i" -le "7" ]; do echo -n "." i=`expr $i + 1` sleep 1 done echo -en "\nFlushing ruleset..." iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -t filter -F iptables -t nat -F iptables -t filter -X iptables -t nat -X echo "OK" # ----------------------------------------------------------------------------- Edited November 8, 2021 by Jack Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now