防火牆的分類
防火牆大概可以分為以下三種:
網路拓樸
基礎網路協定認識
常見的協定:
iptabels manpages
man iptables
架構圖
指令結構圖
iptables 新增(刪除)鏈 比對的條件 -j 接受(丟棄)
iptables的比對流程圖
規則的建立(刪除)
- -A: Append, 新增
- -D: Delete, 刪除
- -I: Insert, 新增至最前面
- -L: List, 列出
- -F: Flush, 清空
- -Z: Zero, 計數歸零
比對成功,對它做...
- -j TARGET
- TARGET:
- ACCEPT: 接受
- DROP: 丟棄
- REJECT: 回傳帶錯誤訊息,然後丟棄此封包
- DNAT: 修改目的位址或連接埠,僅適用在 nat table 中的 PREROUTING, OUTPUT
- MASQUERADE: IP偽裝,僅適用在 nat table 中的 POSTROUTING
- REDIRECT: 修改目的位址為本機,且修改連接埠,僅適用在 nat table 中的 PREROUTING, OUTPUT
- MARK: 設定 mark 值,僅適用在 mangle table;通常搭配 iproute2 使用(QoS、路由導向等)
一般範例
# flush the iptable rules
iptables -F
iptables -Z
iptables -A INPUT -i lo -j ACCEPT
### IP Rule ##
iptables -A INPUT -s 210.240.172.81 -j ACCEPT
## UDP Rule ##
iptables -A INPUT -p udp --sport 53 -j ACCEPT
## TCP Rule ##
iptables -A INPUT -p tcp -m multiport --destination-ports 22,21,80,110 --syn -j ACCEPT
iptables -A INPUT -p tcp -s 210.240.172.0/24 --dport 25 --syn -j ACCEPT
# other
iptables -A INPUT -p tcp --syn -j DROP
iptables -A INPUT -p udp -j DROP
iptables -A INPUT -p icmp -j DROP
NAT範例
depmod -a
modprobe -a iptable_nat
modprobe ip_conntrack_irc
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe iptable_filter
## 啟用 IP_FORWARD 功能
echo 1 > /proc/sys/net/ipv4/ip_forward
## 下面三行是針對內部主機連線的調整
echo 81920 > /proc/sys/net/ipv4/ip_conntrack_max
echo 600 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# flush the iptables rules
iptables -F
iptables -t nat -F
## 針對連線至此主機
iptables -A INPUT -i eth0 -s 192.168.172.0/24 -p tcp --dport 22 --syn -j ACCEPT
iptables -A INPUT -i eth1 -p tcp --dport 80 --syn -j ACCEPT
# 其餘丟棄
iptables -A INPUT -p tcp --syn -j DROP
iptables -A INPUT -p udp -j DROP
## 底下是針對內部的 IP
# 針對 FORWARD chain
iptables -A FORWARD -i eth1 -d ! 210.240.172.137 -p tcp --dport 25 -j DROP
iptables -A FORWARD -i eth1 -s 192.168.0.0/16 -d 192.168.0.0/16 -j DROP
# 導向其他主機
iptables -t nat -A PREROUTING -i eth1 -p tcp -d ! 192.168.111.254 -j DNAT --to-destination 192.168.111.253
iptables -t nat -A PREROUTING -i eth1 -p tcp -d ! 192.168.111.254 -j REDIRECT --to-ports 80
# IP 偽裝
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.111.0/24 -j MASQUERADE
其他有趣的範例
1. 封包數限制:
iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j ACCEPT
iptables -A INPUT -p icmp -j DROP
2. QoS、路由導向
iptables -A PREROUTING -i eth2 -t mangle -p tcp --dport 25 -j MARK --set-mark 20
## QoS
tc qdisc del dev eth2 root 2> /dev/null
tc qdisc add dev eth2 root handle 10: htb default 10
tc class add dev eth2 parent 10: classid 10:1 htb rate 100kbps ceil 100kbps
tc class add dev eth2 parent 10:1 classid 10:10 htb rate 10kbps ceil 100kbps prio 2
tc class add dev eth2 parent 10:1 classid 10:20 htb rate 10kbps ceil 80kbps prio 3
tc qdisc add dev eth2 parent 10:10 handle 101: pfifo
tc qdisc add dev eth2 parent 10:20 handle 102: pfifo
tc filter add dev eth2 parent 10: protocol ip prio 100 handle 10 fw classid 10:10
tc filter add dev eth2 parent 10: protocol ip prio 100 handle 20 fw classid 10:20
## 路由導向
echo 202 anti.virus.forti >> /etc/iproute2/rt_tables
ip rule add fwmark 20 table anti.virus.forti
#ip route add default via 192.168.99.201 dev eth1 table anti.virus.forti
3. L7-filter
## 來源:
## 需重新編譯核心
iptables -A FORWARD -s 210.240.0.0/255.255.0.0 -i eth1 -m layer7 --l7proto bittorrent -j DROP
iptables -A FORWARD -s 210.240.0.0/255.255.0.0 -i eth1 -m layer7 --l7proto edonkey -j DROP
參考來源
- iptables manpages: man iptables
- OLS3: Linux 防火牆入門。