防火墙的主要类别有:
1、netfilter
2、tcp wrappers
3、proxy

Linux的数据包过滤软件:iptables
//规则的顺序非常重要

三张表:filter、nat、mangle
五条链:input、output、forward、prerouting、postrouting

规则的查看与清除

iptables [-t tables] [-L] [-nv]
-t:nat/filter
-L:列出当前的规则
-n:不进行IP的反查,显示速度快
-v:列出更多的信息

iptables-save [-t tables]
#列出完整的防火墙规则

iptables [-t tables] [-FXZ]
-F:清除所有已制定的规则
-X:除掉所有用户自定义的chain(tables)
-Z:清零所有chain的计数和流量统计

定义默认策略

iptables [-t nat] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]

语法:

[root@www ~]# iptables [-AI [INPUT|OUTPUT|FOREARD...]] [-io [eth0|eth1...]] \
> [-p [tcp|udp|icmp...]] [-s [sip|net]] [-d [dip|net]] -j [ACCEPT|DROP|REJECT|LOG]

--sport、--dport

[-m state] [--state 状态]

[-m mac] [--mac-source xxx]

iptables设置脚本:
1、清除已有规则
2、制定默认策略
3、设置各项规则
4、保存

#!/bin/bash

# 请先输入相关参数,不要输入错误

EXTIF="eth0"  # 这个是可以来你上public ip 的网络接口
INIF="eth1"   #内部LAN 的网络连接,若无则写成 INIF=""
INNET="192.168.100.0/24"   # 若无内网络接口,请填写 INNET=""
export EXTIF INIF INNEF 

# 第一部分,针对本机的防火墙设置

# 1 . 先设置好内核的网络功能

echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4icmp_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 FPRWARD ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -nm 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/iptables/iptables.http ]; then 
    sh  /usr/local/virus/iptables/iptables.http
fi

# 4 . 允许某些类型的 ICMP 数据包进入

AICMP ="0 3 3/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:65535 -j ACCEPT # FTP
# iptables -A INPUT -p TCP -i $EXTIF --dport 22 --sport 1024:65535 -j ACCEPT # SSH
# iptables -A INPUT -p TCP -i $EXTIF --dport 25 --sport 1024:65535 -j ACCEPT # SMTP
# iptables -A INPUT -p TCP -i $EXTIF --dport 53 --sport 1024:65535 -j ACCEPT # DNS
# iptables -A INPUT -p TCP -i $EXTIF --dport 53 --sport 1024:65535 -j ACCEPT # DNS
# iptables -A INPUT -p TCP -i $EXTIF --dport 80 --sport 1024:65535 -j ACCEPT # WWW
# iptables -A INPUT -p TCP -i $EXTIF --dport 110 --sport 1024:65535 -j ACCEPT # POP3
# iptables -A INPUT -p TCP -i $EXTIF --dport 443 --sport 1024:65535 -j ACCEPT # HTTPS

# 第二部分,针对后端主机的防火墙设置

# 1 . 先加载一些有用的模块

modules="ip_tables iptables_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

# 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 [ "$INIET" != "" ]; then 
            for innet in $INNET
            do
                iptables -r 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 STN,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 --tp-description 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-description 192.168.100.10
# iptables -t nat -A PREROUTING -p tcp -s 1.2.3.4 --sport 3389 -j DNAT --to-description 192.168.100.20

# 6 . 最后将这些功能存储下来

/etc/init.d/iptables save