Banana Pi 測試 – Bananian 篇 iptables 防火牆

為了系統的安全,所以加上了 iptables 防火牆規則,主要是參考 ols3 的防火牆規則。

# vim /etc/firewall.server[@more@]#! /bin/bash
#
# $IPTABLES 範本
# written by OLS3 (ols3@lxer.idv.tw)
#
# 請自行參考修改,把註解拿掉即可啟用該項設定
#

###—————————————————–###
# 設定 $IPTABLES 的路徑
###—————————————————–###
echo “Set path of iptables”
echo

IPTABLES=”/sbin/iptables”

#載入相關模組
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp

###—————————————————–###
# 外部網段 IP 及介面
###—————————————————–###
echo “Set external ……”
echo

#FW_IP=”192.168.1.1″
#FW_IP_RANGE=”192.168.1.0/24″
FW_IFACE=”ppp0″

# loopback interface
LO_IFACE=”lo”
LO_IP=”127.0.0.1″

## 設定核心的安全相關參數
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
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 “Flush fiter table ……”
echo

# Flush filter
$IPTABLES -F
$IPTABLES -X

echo “Flush mangle table ……”
echo
# Flush mangle
$IPTABLES -F -t mangle
$IPTABLES -t mangle -X

echo “Flush nat table ……”
echo
# Flush nat
$IPTABLES -F -t nat
$IPTABLES -t nat -X

###—————————————————–###
# 設定 filter table 的預設政策
###—————————————————–###
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP

# 允許流經 lookback 介面的封包進出
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

# 阻可疑封包
$IPTABLES -A INPUT -i $FW_IFACE -m state –state INVALID -j DROP
$IPTABLES -A INPUT -i $FW_IFACE -p tcp ! –syn -m state –state NEW -j DROP
$IPTABLES -A INPUT -i $FW_IFACE -p tcp –tcp-flags ALL NONE -j DROP
$IPTABLES -A INPUT -i $FW_IFACE -p tcp –tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A INPUT -i $FW_IFACE -p tcp –tcp-flags SYN,RST SYN,RST -j DROP
$IPTABLES -A INPUT -i $FW_IFACE -p tcp –tcp-flags FIN,RST FIN,RST -j DROP
$IPTABLES -A INPUT -i $FW_IFACE -p tcp –tcp-flags ACK,FIN FIN -j DROP
$IPTABLES -A INPUT -i $FW_IFACE -p tcp –tcp-flags ACK,URG URG -j DROP
$IPTABLES -A INPUT -i $FW_IFACE -p tcp –tcp-flags ACK,PSH PSH -j DROP
$IPTABLES -A INPUT -i $FW_IFACE -p tcp –tcp-flags ALL FIN,URG,PSH -j DROP
$IPTABLES -A INPUT -i $FW_IFACE -p tcp –tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPTABLES -A INPUT -i $FW_IFACE -p tcp –tcp-flags ALL ALL -j DROP
$IPTABLES -A INPUT -i $FW_IFACE -p tcp –tcp-flags ALL FIN -j DROP

# 允許已建立連線和回應的封包通過
$IPTABLES -A INPUT -i eth0 -m state –state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -o eth0 -m state –state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $FW_IFACE -m state –state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -o $FW_IFACE -m state –state ESTABLISHED,RELATED -j ACCEPT

# 開放本機的 ssh port 22 服務
$IPTABLES -A INPUT -i eth0 -p tcp –dport 22 -j ACCEPT
$IPTABLES -A INPUT -i $FW_IFACE -p tcp –dport 22 -j ACCEPT

# 開放本機的 http port 80 服務
$IPTABLES -A INPUT -i eth0 -p tcp –dport 80 -j ACCEPT
$IPTABLES -A INPUT -i $FW_IFACE -p tcp –dport 80 -j ACCEPT

# 開放本機的 https port 443 服務
$IPTABLES -A INPUT -i eth0 -p tcp –dport 443 -j ACCEPT
$IPTABLES -A INPUT -i $FW_IFACE -p tcp –dport 443 -j ACCEPT

$IPTABLES -A INPUT -p icmp -s 0/0 –icmp-type 8 -j ACCEPT
$IPTABLES -A INPUT -p icmp -s 0/0 –icmp-type 0 -j ACCEPT

更改檔案權限
# chmod 700 /etc/firewall.server

設定開機時執行
/etc/rc.local 最後一行 exit 0 之前加入 sh /etc/firewall.server
# sed -i ‘/^exit 0/ish /etc/firewall.server’ /etc/rc.local