ITPub博客

首页 > Linux操作系统 > Linux操作系统 > iptables 读书笔记

iptables 读书笔记

原创 Linux操作系统 作者:liiinuuux 时间:2012-11-23 14:19:48 0 删除 编辑
原创文章,转载请标明出处
http://space.itpub.net/26239116/viewspace-749818

iptables有多个表(table),每个表里有一系列规则链。
默认的表叫filter,用来根据包来做过滤。filter表中有三个默认的链:
FORWARD链:过滤转发包的规则
INPUT链:过滤输入包规则
OUTPUT链:过滤输出包规则

iptables还有nat和mangle两个表,nat用在地址转换中,mangle可以过滤和修改filter和net之外的包,如修改IP包的TTL等。

每条链有一个target,filter表中的规则可以使用的target有ACCEPT、DROP、REJECT、LOG、MIRROR、QUEUE、REDIRECT、RETURN、ULOG。
当一条规则落在ACCEPT上的时候,匹配这个规则的包就可以通过。
DROP和REJECT会把包丢弃,DROP是默默丢弃,REJECT会返回一个ICMP错误信息。
REJECT把包分流到一个代理,而不是直接让它通过,比如引导web流量。

iptables命令形式:
iptables -F chainName
iptables -P chainName target
iptables -A chainName -i interface -j target

-F:清除链条中的所有规则。
-p:设置默认策略。
-A:给链条附加规则,可以用-t指定表名,否则默认添加到filter表中。-j指定目标。
其它参数:
-p:协议,如tcp udp icmp
-s:源IP
-d:目标IP
--sport:源端口
--dport:目标端口
--icmp-type:ICMP类型
!:否定条件
-t:指定表名,如果不指定,则默认是filter表

举例
假设一台linux服务器充当网关角色,有两个网络接口:
     ppp0
          通往internet
          IP地址128.138.101.4
     eth0
          通往内网
          IP地址10.1.1.1
需要iptables保护内网中10.1.1.2服务器

首先需要确保加载了iptables模块,并启用ip forwarding。
vi /etc/sysctl.conf
添加 net.ipv4.ip_forward=1
然后执行sysctl -p
(如果怕参数名写错,可以看有个文件叫/proc/sys/net/ipv4/ip_forward
把/proc/sys/去掉,然后把斜杠换成点就是net.ipv4.ip_forward。)

首先初始化filter表:
iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP

给FORWARD链定义通过规则:
iptables -A FORWARD -i eth0 -p ANY -j ACCEPT (信任内网的一切包)
iptables -A FORWARD -d 10.1.1.2 -p tcp --dport 22 -j ACCEPT (允许外网访问10.1.1.2的SSH)
iptables -A FORWARD -d 10.1.1.2 -p tcp --dport 80 -j ACCEPT  (允许外网访问10.1.1.2的80端口)
iptables -A FORWARD -d 10.1.1.2 -p tcp --dport 443 -j ACCEPT(允许外网访问10.1.1.2的https端口)

给网关自己设置规则:
iptables -A INPUT -i eth0 -d 10.1.1.1 -p tcp --dport 22 -j ACCEPT (允许来自内网的SSH连接)
iptables -A INPUT -i lo -d 10.1.1.1 -p ANY -j ACCEPT (网关通过loopback地址自己连自己)
iptables -A INPUT -i eth0 -d 10.1.1.1 -p icmp --icmp-type 8 -j ACCEPT (允许来自内网的ping)

开放各种icmp包
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 5 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 11 -j ACCEPT
iptables -A FORWARD -d 10.1.1.2 -p icmp --icmp-type 0 -j ACCEPT
iptables -A FORWARD -d 10.1.1.2 -p icmp --icmp-type 3 -j ACCEPT
iptables -A FORWARD -d 10.1.1.2 -p icmp --icmp-type 5 -j ACCEPT
iptables -A FORWARD -d 10.1.1.2 -p icmp --icmp-type 11 -j ACCEPT

为net表的PREROUTING设置策略,可以应用于所有其他链条。
iptables -t nat -A PREROUTING -i ppp0 -s 10.0.0.0/8 -j DROP
iptables -t nat -A PREROUTING -i ppp0 -s 172.16.0.0/12 -j DROP
iptables -t nat -A PREROUTING -i ppp0 -s 192.168.0.0/16 -j DROP
iptables -t nat -A PREROUTING -i ppp0 -s 127.0.0.0/8 -j DROP
iptables -t nat -A PREROUTING -i ppp0 -s 224.0.0.0/4 -j DROP

为外来的包记录日志
iptables -A INPUT -i ppp0 -j LOG
iptables -A FORWARD -i ppp0 -j LOG

查看当前规则
iptables -nL --line-numbers (还会显示行号,删除时用行号)

删除规则
iptables -D INPUT 1 (删除INPUT链条的1号规则)









来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26239116/viewspace-749818/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: BBED测试
请登录后发表评论 登录
全部评论

注册时间:2012-11-12

  • 博文量
    94
  • 访问量
    353432