多图杀猫,流量党渗入
以下内容总结自鸟哥的 Linux 私房菜 -- 服务器(第三版),同时推荐喜欢Linux的同学们学习阅读。
For Linux Kernel 2.6+
图解防火墙
三表五链
上面的图示很复杂喔!不过基本上你依旧可以看出来,我们的 iptables 可以控制三种封包的流向:
- 封包进入 Linux 主机使用资源 (路径 A): 在路由判断后确定是向 Linux 主机要求数据的封包,主要就会透过 filter 的 INPUT 链来进行控管;
- 封包经由 Linux 主机的转递,没有使用主机资源,而是向后端主机流动 (路径 B): 在路由判断之前进行封包表头的修订作业后,发现到封包主要是要透过防火墙而去后端,此时封包就会透过路径 B 来跑动。 也就是说,该封包的目标并非我们的 Linux 本机。主要经过的链是 filter 的 FORWARD 以及 nat 的 POSTROUTING, PREROUTING。 这路径 B 的封包流向使用情况,我们会在本章的 9.5 小节来跟大家作个简单的介绍。
- 封包由 Linux 本机发送出去 (路径 C): 例如响应客户端的要求,或者是 Linux 本机主动送出的封包,都是透过路径 C 来跑的。先是透过路由判断, 决定了输出的路径后,再透过 filter 的 OUTPUT 链来传送的!当然,最终还是会经过 nat 的 POSTROUTING 链。
图解防火墙(隐藏不常用的mangle)
防火墙操作
防火墙实例1
[root@www ~]# vim bin/firewall.sh | |
#!/bin/bash | |
PATH=/sbin:/bin:/usr/sbin:/usr/bin; export PATH | |
# 1. 清除规则 | |
iptables -F | |
iptables -X | |
iptables -Z | |
# 2. 设定政策 | |
iptables -P INPUT DROP | |
iptables -P OUTPUT ACCEPT | |
iptables -P FORWARD ACCEPT | |
# 3~5. 制订各项规则 | |
iptables -A INPUT -i lo -j ACCEPT | |
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT | |
#iptables -A INPUT -i eth0 -s 192.168.1.0/24 -j ACCEPT | |
# 6. 写入防火墙规则配置文件 | |
/etc/init.d/iptables save | |
[root@www ~]# sh bin/firewall.sh | |
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ] |
防火墙实例2
[root@www ~]# mkdir -p /usr/local/virus/iptables | |
[root@www ~]# cd /usr/local/virus/iptables | |
[root@www iptables]# vim iptables.rule | |
#!/bin/bash | |
# 请先输入您的相关参数,不要输入错误了! | |
EXTIF="eth0" # 这个是可以连上 Public IP 的网络接口 | |
INIF="eth1" # 内部 LAN 的连接接口;若无则写成 INIF="" | |
INNET="192.168.100.0/24" # 若无内部网域接口,请填写成 INNET="" | |
export EXTIF INIF INNET | |
# 第一部份,针对本机的防火墙设定!########################################## | |
# 1. 先设定好核心的网络功能: | |
echo "1" > /proc/sys/net/ipv4/tcp_syncookies | |
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts | |
for i in /proc/sys/net/ipv4/conf/*/{rp_filter,log_martians}; do | |
echo "1" > $i | |
done | |
for i in /proc/sys/net/ipv4/conf/*/{accept_source_route,accept_redirects,\ | |
send_redirects}; do | |
echo "0" > $i | |
done | |
# 2. 清除规则、设定默认政策及开放 lo 与相关的设定值 | |
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin; export PATH | |
iptables -F | |
iptables -X | |
iptables -Z | |
iptables -P INPUT DROP | |
iptables -P OUTPUT ACCEPT | |
iptables -P FORWARD ACCEPT | |
iptables -A INPUT -i lo -j ACCEPT | |
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT | |
# 3. 启动额外的防火墙 script 模块 | |
if [ -f /usr/local/virus/iptables/iptables.deny ]; then | |
sh /usr/local/virus/iptables/iptables.deny | |
fi | |
if [ -f /usr/local/virus/iptables/iptables.allow ]; then | |
sh /usr/local/virus/iptables/iptables.allow | |
fi | |
if [ -f /usr/local/virus/httpd-err/iptables.http ]; then | |
sh /usr/local/virus/httpd-err/iptables.http | |
fi | |
# 4. 允许某些类型的 ICMP 封包进入 | |
AICMP="0 3 3/4 4 11 12 14 16 18" | |
for tyicmp in $AICMP | |
do | |
iptables -A INPUT -i $EXTIF -p icmp --icmp-type $tyicmp -j ACCEPT | |
done | |
# 5. 允许某些服务的进入,请依照你自己的环境开启 | |
# iptables -A INPUT -p TCP -i $EXTIF --dport 21 --sport 1024:65534 -j ACCEPT # FTP | |
# iptables -A INPUT -p TCP -i $EXTIF --dport 22 --sport 1024:65534 -j ACCEPT # SSH | |
# iptables -A INPUT -p TCP -i $EXTIF --dport 25 --sport 1024:65534 -j ACCEPT # SMTP | |
# iptables -A INPUT -p UDP -i $EXTIF --dport 53 --sport 1024:65534 -j ACCEPT # DNS | |
# iptables -A INPUT -p TCP -i $EXTIF --dport 53 --sport 1024:65534 -j ACCEPT # DNS | |
# iptables -A INPUT -p TCP -i $EXTIF --dport 80 --sport 1024:65534 -j ACCEPT # WWW | |
# iptables -A INPUT -p TCP -i $EXTIF --dport 110 --sport 1024:65534 -j ACCEPT # POP3 | |
# iptables -A INPUT -p TCP -i $EXTIF --dport 443 --sport 1024:65534 -j ACCEPT # HTTPS | |
# 第二部份,针对后端主机的防火墙设定!############################### | |
# 1. 先加载一些有用的模块 | |
modules="ip_tables iptable_nat ip_nat_ftp ip_nat_irc ip_conntrack | |
ip_conntrack_ftp ip_conntrack_irc" | |
for mod in $modules | |
do | |
testmod=`lsmod | grep "^${mod} " | awk '{print $1}'` | |
if [ "$testmod" == "" ]; then | |
modprobe $mod | |
fi | |
done | |
# 2. 清除 NAT table 的规则吧! | |
iptables -F -t nat | |
iptables -X -t nat | |
iptables -Z -t nat | |
iptables -t nat -P PREROUTING ACCEPT | |
iptables -t nat -P POSTROUTING ACCEPT | |
iptables -t nat -P OUTPUT ACCEPT | |
# 3. 若有内部接口的存在 (双网卡) 开放成为路由器,且为 IP 分享器! | |
if [ "$INIF" != "" ]; then | |
iptables -A INPUT -i $INIF -j ACCEPT | |
echo "1" > /proc/sys/net/ipv4/ip_forward | |
if [ "$INNET" != "" ]; then | |
for innet in $INNET | |
do | |
iptables -t nat -A POSTROUTING -s $innet -o $EXTIF -j MASQUERADE | |
done | |
fi | |
fi | |
# 如果你的 MSN 一直无法联机,或者是某些网站 OK 某些网站不 OK, | |
# 可能是 MTU 的问题,那你可以将底下这一行给他取消批注来启动 MTU 限制范围 | |
# iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss \ | |
# --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu | |
# 4. NAT 服务器后端的 LAN 内对外之服务器设定 | |
# iptables -t nat -A PREROUTING -p tcp -i $EXTIF --dport 80 \ | |
# -j DNAT --to-destination 192.168.1.210:80 # WWW | |
# 5. 特殊的功能,包括 Windows 远程桌面所产生的规则,假设桌面主机为 1.2.3.4 | |
# iptables -t nat -A PREROUTING -p tcp -s 1.2.3.4 --dport 6000 \ | |
# -j DNAT --to-destination 192.168.100.10 | |
# iptables -t nat -A PREROUTING -p tcp -s 1.2.3.4 --sport 3389 \ | |
# -j DNAT --to-destination 192.168.100.20 | |
# 6. 最终将这些功能储存下来吧! | |
/etc/init.d/iptables save |