首页 > 收集 > iptables防火墙技术要点 转

iptables防火墙技术要点 转

2008年8月28日 admin 发表评论 阅读评论

 编写:姜道友

 
 
 
1.    内核要求………………………………………………………… 2
2.    流程图……………………………………………………………. 2
3.    语法………………………………………………………………. 2
4.    NAT……………………………………………………………….. 3
5.    模块的加载:………………………………………………….. 4
6.    循环执行:……………………………………………………… 5
7.    vpn相关规则…………………………………………………… 5
8.    脚本编写………………………………………………………… 5
 


 

 
要求Linux内核在2.4以上,部分新的应用层检查功能要求在2.6内核中

 

–>PREROUTING–>[ROUTE]–>FORWARD–>POSTROUTING–>
     mangle        |       mangle        ^ mangle
      nat          |       filter           |  nat
                   |                     |
                   |                     |
                   v                     |
                 INPUT                 OUTPUT
                   | mangle               ^ mangle
                   | filter                  |  nat
                   v ——>local—  ——->   | filter
其中:
£     
      filter     顾名思义,用于过滤的时候
      nat        顾名思义,用于做 NAT 的时候
£     
      INPUT      位于 filter 表,匹配目的 IP 是本机的数据包
      FORWARD    位于 filter 表,匹配穿过本机的数据包,
      PREROUTING 位于 nat 表,用于修改目的地址(DNAT
      POSTROUTING:位于 nat 表,用于修改源地址  SNAT
 
iptables –nL –v查看防火墙的规则
iptables –nL –t nat –v 查看防火墙的NAT规则
iptables –nL –vv查看连接状态信息
iptables –A FORWARD  FORWARD链后面增加一个规则
iptables –I FORWARD  FORWARD链最前面插入一个规则
iptables –D FORWARD  FORWARD链删除相应的一个规则
 
iptables -P INPUT DROP设置INPUT链的默认为DROP
iptables –F 清空相应链中的所有规则
iptables –s 192.168.x.x/xx 匹配源地址
iptables –d 192.168.x.x/xx 匹配目的地址
iptables –p tcp匹配tcp协议
iptables –-sport匹配源端口 –dport匹配目的端口
 
iptables  -m state –state 状态
状态:NEWRELATEDESTABLISHEDINVALID
      NEW:有别于 tcp syn
      ESTABLISHED:连接态
      RELATED:衍生态,与 conntrack 关联(FTP
      INVALID:不能被识别属于哪个连接或没有任何状态
如:
    iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
 
iptables  -m mac –mac-source MAC 匹配某个 MAC 地址
iptables -A INPUT -p tcp -m multiports –ports 21,22,25,80,110 -j ACCEPT 多端品匹配
 
iptables -t nat -A POSTROUTING -s 192.168.0.0/24  -j SNAT –to 1.1.1.1
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
 
iptables -t nat -A PREROUTING -i ppp0 -p tcp –dport 80 -j DNAT –to 192.168.0.1
 
modprobe ip_tables             > /dev/null 2>&1
modprobe ip_conntrack          > /dev/null 2>&1
modprobe iptable_nat           > /dev/null 2>&1
modprobe ip_nat_ftp            > /dev/null 2>&1
modprobe ip_conntrack_ftp      > /dev/null 2>&1
modprobe ip_conntrack_irc      > /dev/null 2>&1
modprobe ip_conntrack_h323     > /dev/null 2>&1
modprobe ip_nat_h323           > /dev/null 2>&1
modprobe ip_conntrack_irc      > /dev/null 2>&1
modprobe ip_nat_irc            > /dev/null 2>&1
modprobe ip_conntrack_mms      > /dev/null 2>&1
modprobe ip_nat_mms            > /dev/null 2>&1
modprobe ip_conntrack_pptp     > /dev/null 2>&1
modprobe ip_nat_pptp           > /dev/null 2>&1
modprobe ip_conntrack_proto_gre > /dev/null 2>&1
modprobe ip_nat_proto_gre      > /dev/null 2>&1
modprobe ip_conntrack_quake3   > /dev/null 2>&1
modprobe ip_nat_quake3         > /dev/null 2>&1
 
##############################################
 
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
 
echo 1 >/proc/sys/net/ipv4/conf/all/rp_filter
#echo 1 > /proc/sys/net/ipv4/ip_dynaddr
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
如下脚本,只要在HTTP_LAN中加入IP地址,即可上网
HTTP_LAN=”192.168.0.2 192.168.0.3 192.168.0.4″
################################################# ACCEPT http hosts
 
if [ "$ACCEPT_HTTP_LAN" != "" ] ; then
 
  for LAN in ${ACCEPT_HTTP_LAN} ; do
 
  $IPTABLES -A FORWARD -p tcp -i $LAN_IFACE  -s ${LAN} -m multiport –dport 80,443 -j ACCEPT
 
  echo “”
  echo ${LAN}   Access to Externel…..ACCEPT http port                 [OK]
  done
fi
 
echo -e “\033[1;034m \n”
echo “……………………………………………………………..”
echo “……………………………………………………………..”
echo “……………………………………………………………..”
echo “”
echo -e “\033[1;032m \n”
 
iptables –A FORWARD –i-o ipsec+ 如果Linux网关上启用了VPN服务,在对VPN网络进行限制时,接口不能在eth0ppp0上做,而是在ipsec+上做(ipsec+代表ipsec0ipsec1……
对于防火墙脚本,最好编写一个规则脚本文件运行,如:firewall.sh 运行时输入:./firewall.sh start 停止时:./firewall.sh stop即可。如果是网关,可以把此命令加入到/etc/rc.d/rc.local启用程序中;如果是ADSL拨号网关,可以把此命令加入到ip-up程序中。

来源:http://xiong.blog.51cto.com/811/17725

分类: 收集 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.