IPCop
时间:2007-01-27 来源:fishjin
IPCop一個簡單的防火牆設置。
有知道IPCop的進來討論討論。
#######################################################################
# 模塊的加載和設定為內核工作
#######################################################################
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-prefis “INVALID_FLAGS:”\ --log-level=3 –m limit –limit 1/s –limit-burst 10
iptables –A DROPFLAGS –j DROP
#檢查TCP Flag 的非法組合
#
iptables –N CHKFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags ACK,FIN FIN –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags ACK,PSH PSH –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags ACK,URG URG –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags FIN,RST FIN,RST –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags SYN,FIN SYN,FIN –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags SYN,RST SYN,RST –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags ALL ALL –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags ALL NONE –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags ALL FIN,PSH,URG –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags ALL SYN,FIN,PSH,URG –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags ALL SYN,RST,ACK,FIN,URG –j DROPFLAGS
#
# 拒絕Microsoft 網絡相關的FORWARD
#
iptables –N CHKFLAGS
iptables –A CHKFLAGS -p tcp –dport 42 –j DROP # wins dup
iptables –A CHKFLAGS -p tcp –dport 135 –j DROP # MS-RPC
iptables –A CHKFLAGS -p udp –dport 135 –j DROP #MS-RPC
iptables –A CHKFLAGS -p udp –dport 137:138 –j DROP # MS browse
iptables –A CHKFLAGS -p tcp –dport 139 –j DROP # SMB
$IPTABLES –A CHKFLAGS -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
iptables –A INPUT –p tcp --dport 8080 –m state –state NEW –j ACCEPT
iptables –A INPUT –p tcp --dport 443 –m state –state NEW –j ACCEPT
iptables –A INPUT –p tcp --dport 53 –m state –state NEW –j ACCEPT
iptables –A INPUT –p udp --dport 53 –m state –state NEW –j ACCEPT
#拒絕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 ACCETP
iptables –A INPUT –p icmp --icmp-type echo-reply –s $INNER_NET –j ACCETP
iptables –A INPUT –p icmp --icmp-type destination-unreachable –j ACCETP
iptables –A INPUT –p icmp --icmp-type source-quench –j ACCETP
iptables –A INPUT –p icmp --icmp-type time-exceeded –j ACCETP
iptables –A INPUT –p icmp --icmp-type parameter-roblem –j ACCETP
# 除了上面以外所有的包,都記錄下來,並通過Default Policy 丟棄
$IPTABLES –A INPUT –j LOG –log-prefix “UNDEFIND_INPUT:” \ --log-level=3 –m limit –limit 1/s –limit-burst 10
#############################################################################
# OUTUT 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_JPORT –o $INNER_PORT –d $INNER_NET –m state \ --state ESTABLISHED,RELATED –j ACCCEPT
#許可LAN到外部的連接
iptables –A FORWARD –I $INNER_PORT –o $OUTER_PORT –s $INNER_NET –m state \ --state NEW,ESTABLISHED,RELATED –j ACCEPT
# 模塊的加載和設定為內核工作
#######################################################################
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-prefis “INVALID_FLAGS:”\ --log-level=3 –m limit –limit 1/s –limit-burst 10
iptables –A DROPFLAGS –j DROP
#檢查TCP Flag 的非法組合
#
iptables –N CHKFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags ACK,FIN FIN –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags ACK,PSH PSH –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags ACK,URG URG –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags FIN,RST FIN,RST –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags SYN,FIN SYN,FIN –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags SYN,RST SYN,RST –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags ALL ALL –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags ALL NONE –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags ALL FIN,PSH,URG –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags ALL SYN,FIN,PSH,URG –j DROPFLAGS
iptables –N CHKFLAGS –p tcp –tcp-flags ALL SYN,RST,ACK,FIN,URG –j DROPFLAGS
#
# 拒絕Microsoft 網絡相關的FORWARD
#
iptables –N CHKFLAGS
iptables –A CHKFLAGS -p tcp –dport 42 –j DROP # wins dup
iptables –A CHKFLAGS -p tcp –dport 135 –j DROP # MS-RPC
iptables –A CHKFLAGS -p udp –dport 135 –j DROP #MS-RPC
iptables –A CHKFLAGS -p udp –dport 137:138 –j DROP # MS browse
iptables –A CHKFLAGS -p tcp –dport 139 –j DROP # SMB
$IPTABLES –A CHKFLAGS -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
iptables –A INPUT –p tcp --dport 8080 –m state –state NEW –j ACCEPT
iptables –A INPUT –p tcp --dport 443 –m state –state NEW –j ACCEPT
iptables –A INPUT –p tcp --dport 53 –m state –state NEW –j ACCEPT
iptables –A INPUT –p udp --dport 53 –m state –state NEW –j ACCEPT
#拒絕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 ACCETP
iptables –A INPUT –p icmp --icmp-type echo-reply –s $INNER_NET –j ACCETP
iptables –A INPUT –p icmp --icmp-type destination-unreachable –j ACCETP
iptables –A INPUT –p icmp --icmp-type source-quench –j ACCETP
iptables –A INPUT –p icmp --icmp-type time-exceeded –j ACCETP
iptables –A INPUT –p icmp --icmp-type parameter-roblem –j ACCETP
# 除了上面以外所有的包,都記錄下來,並通過Default Policy 丟棄
$IPTABLES –A INPUT –j LOG –log-prefix “UNDEFIND_INPUT:” \ --log-level=3 –m limit –limit 1/s –limit-burst 10
#############################################################################
# OUTUT 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_JPORT –o $INNER_PORT –d $INNER_NET –m state \ --state ESTABLISHED,RELATED –j ACCCEPT
#許可LAN到外部的連接
iptables –A FORWARD –I $INNER_PORT –o $OUTER_PORT –s $INNER_NET –m state \ --state NEW,ESTABLISHED,RELATED –j ACCEPT
相关阅读 更多 +