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
原文地址:http://blog.51cto.com/gdutcxh/2121092