Chinaunix首页 | 论坛 | 博客
  • 博客访问: 565231
  • 博文数量: 204
  • 博客积分: 245
  • 博客等级: 二等列兵
  • 技术积分: 1293
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-16 10:29
文章分类

全部博文(204)

文章存档

2024年(1)

2023年(4)

2022年(21)

2021年(7)

2020年(5)

2019年(1)

2018年(6)

2017年(11)

2016年(15)

2015年(52)

2014年(37)

2013年(26)

2012年(18)

我的朋友

分类:

2012-12-25 12:57:22

原文地址:iptables 作者:lll0905

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程序中。脚本实例请参考我的其它相关文章

 

阅读(807) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~