一個對IpCop有用的Iptables指令碼

來源:互聯網
上載者:User

  一個對IpCop有用的iptables指令碼(朋友寫的),不記得是哪一個寫的了,麻煩你mail(ayihu@qq.com)下告訴我一聲:

#!/bin/sh
#
# firewall starting firewall
#
# chkconfig: 2345 98 01
# description: setting firewall
##########################################################################
# 設定參數
##########################################################################
INNER_NET=192.168.0.0/24 # LAN 區域網路 自由設定
FWALL_IP=192.168.0.1 # 防火牆的IP 你的機器的真實IP
INNER_PORT=eth1 # 區域網路端IP
OUTER_PORT=ppp0 # Wan端IP
IPTABLES="/sbin/iptables" # iptables 命令
MODPROBE="/sbin/modprobe" # modprobe 命令
##########################################################################
# 模組的載入和設定為核心工作
##########################################################################
$MODPROBE ip_tables
$MODPROBE iptable_filter
$MODPROBE ip_conntrack
$MODPROBE iptable_nat
$MODPROBE ip_nat_ftp
$MODPROBE ip_conntrack_ftp
$MODPROBE ipt_state
$MODPROBE ipt_MASQUERADE
$MODPROBE ipt_LOG
$MODPROBE ipt_REJECT
$MODPROBE ipt_limit
# 允許IP masquerade(變換)
echo 1 > /proc/sys/net/ipv4/ip_forward
# 忽視ping的broadcast
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# 檢查源IP
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f; done
# 記錄不可能的(虛假)IP
for f in /proc/sys/net/ipv4/conf/*/log_martians; do echo "1" > $f; done
# 忽視ICMP redirect message
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do echo 1 > $f; done
##########################################################################
# 初始化規則
##########################################################################
$IPTABLES -P INPUT DROP # 清空INPUT原始定義
$IPTABLES -P OUTPUT DROP # 清空OUPUT原始定義
$IPTABLES -P FORWARD DROP # 清空FORWARD原始定義
$IPTABLES -F # flash chain
$IPTABLES -F -t nat
$IPTABLES -X # 刪除使用者定義的Chain
##########################################################################
# 使用者定義的chain
##########################################################################
#
# 記錄並丟棄非法的包
#
$IPTABLES -N DROPPACKET # DROPPACKT chain的產生
$IPTABLES -A DROPPACKET -j LOG --log-prefix "INVALID_PACKET: "
--log-level=3 -m limit --limit 1/s --limit-burst 10
$IPTABLES -A DROPPACKET -j DROP
#
# 檢查SYNFlood攻擊的chain
#
$IPTABLES -N SYNFLOOD # SYNFLOOD chain的產生
# 沒有超過限定值的話返回
$IPTABLES -A SYNFLOOD -m limit --limit 10/s --limit-burst 20 -j RETURN
# 超過限定值,就視為SYNFLOOD攻擊,記錄並丟棄
$IPTABLES -A SYNFLOOD -m limit --limit 1/s --limit-burst 10 -j LOG
--log-level=1 --log-prefix "SYNFLOOD: "
$IPTABLES -A SYNFLOOD -j DROP
#
# 記錄非法的Flag TCP,並丟棄
#
$IPTABLES -N DROPFLAGS # DROPFLAGS chain的產生
$IPTABLES -A DROPFLAGS -j LOG --log-prefix "INVALID_FLAGS: "
--log-level=3 -m limit --limit 1/s --limit-burst 10
$IPTABLES -A DROPFLAGS -j DROP
#
# 檢查TCP Flag的非法組合
#
$IPTABLES -N CHKFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ACK,FIN FIN -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ACK,PSH PSH -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ACK,URG URG -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags FIN,RST FIN,RST -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags SYN,RST SYN,RST -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL ALL -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL NONE -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL FIN,PSH,URG -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROPFLAGS
#
# 拒絕 Microsoft 網路相關的FORWARD
#
$IPTABLES -N CHKMSNET
$IPTABLES -A CHKMSNET -p tcp --dport 42 -j DROP # wins dup
$IPTABLES -A CHKMSNET -p tcp --dport 135 -j DROP # MS-RPC
$IPTABLES -A CHKMSNET -p udp --dport 135 -j DROP # MS-RPC
$IPTABLES -A CHKMSNET -p udp --dport 137:138 -j DROP # MS browse
$IPTABLES -A CHKMSNET -p udp --dport 137:138 -j DROP # MS browse
$IPTABLES -A CHKMSNET -p tcp --dport 139 -j DROP # SMB
$IPTABLES -A CHKMSNET -p tcp --dport 445 -j DROP # DHSMB
##########################################################################
# INPUT Chain
##########################################################################
# Localhost的話,全部許可
$IPTABLES -A INPUT -i lo -j ACCEPT
# 檢查包的正確性
$IPTABLES -A INPUT -m state --state INVALID -j DROPPACKET
# 檢查包是否是SYN攻擊
$IPTABLES -A INPUT -p tcp --syn -j SYNFLOOD
# TCP FLAG的檢查
$IPTABLES -A INPUT -p tcp -j CHKFLAGS
# 許可LAN內的串連
$IPTABLES -A INPUT -i $INNER_PORT -s $INNER_NET -j ACCEPT
# 許可已經建立的串連
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 檢查是否是IP偽裝
$IPTABLES -A INPUT -i $OUTER_PORT -s $INNER_NET -j DROP
#
# 許可的服務(對外部公開的服務,在下面記述)
#
$IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT # SSH
$IPTABLES -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT # HTTP
$IPTABLES -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT # HTTPS
$IPTABLES -A INPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT # DOMAIN(DNS)
$IPTABLES -A INPUT -p udp --dport 53 -m state --state NEW -j ACCEPT # DOMAIN(DNS)
# 拒絕AUTH請求
$IPTABLES -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
# icmp(IN)
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -s $INNER_NET -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type echo-reply -s $INNER_NET -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type source-quench -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type parameter-problem -j ACCEPT
# 除了上面以外所有的包,都記錄下來,並通過Default Policy丟棄
$IPTABLES -A INPUT -j LOG --log-prefix "UNDEFIND_INPUT: "
--log-level=3 -m limit --limit 1/s --limit-burst 10
##########################################################################
# OUTPUT Chain
##########################################################################
# 許可由localhost出來的包
$IPTABLES -A OUTPUT -o lo -j ACCEPT
# TCP FLAG的檢查
$IPTABLES -A OUTPUT -p tcp -j CHKFLAGS
# 許可從伺服器到Lan的串連
$IPTABLES -A OUTPUT -o $INNER_PORT -s $FWALL_IP -j ACCEPT
# 檢查Microsoft網路
$IPTABLES -A OUTPUT -j CHKMSNET
# 許可已經串連的包
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 許可由伺服器到互連網的新加串連
$IPTABLES -A OUTPUT -m state --state NEW -j ACCEPT
# icmp(OUT)
$IPTABLES -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type fragmentation-needed -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type source-quench -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type parameter-problem -j ACCEPT
# 除了上面以外所有的包,都記錄下來,並通過Default Policy丟棄
$IPTABLES -A OUTPUT -j LOG --log-prefix "UNDEFIND_ICMP: " --log-level=3
-m limit --limit 1/s --limit-burst 10
##########################################################################
# IP變換
##########################################################################
# 檢查Microsoft網路
$IPTABLES -A FORWARD -j CHKMSNET
# 許可Lan內機器的IP變換
$IPTABLES -t nat -A POSTROUTING -o $OUTER_PORT -s $INNER_NET -j MASQUERADE
# 從外部到Lan的串連,許可已經串連的FROWARD
$IPTABLES -A FORWARD -i $OUTER_PORT -o $INNER_PORT -d $INNER_NET -m state
--state ESTABLISHED,RELATED -j ACCEPT
# 許可LAN到外部的串連
$IPTABLES -A FORWARD -i $INNER_PORT -o $OUTER_PORT -s $INNER_NET -m state
--state NEW,ESTABLISHED,RELATED -j ACCEPT
exit 0



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。