大话iptables-tag

iptables简介
iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表。
filter负责过滤数据包,包括的规则链有,input,output和forward;
nat则涉及到网络地址转换,包括的规则链有,prerouting,postrouting和output;
mangle表则主要应用在修改数据包内容上,用来做流量整形的,默认的规则链有:INPUT,OUTPUT,NAT,POSTROUTING,PREROUTING;
input匹配目的IP是本机的数据包,forward匹配流经本机的数据包,prerouting用来修改目的地址用来做DNAT,postrouting用来修改源地址用来做SNAT。
iptables主要参数
-A 向规则链中添加一条规则,默认被添加到末尾
-T指定要操作的表,默认是filter
-D从规则链中删除规则,可以指定序号或者匹配的规则来删除
-R进行规则替换
-I插入一条规则,默认被插入到首部
-F清空所选的链,重启后恢复
-N新建用户自定义的规则链
-X删除用户自定义的规则链
-p用来指定协议可以是tcp,udp,icmp等也可以是数字的协议号,
-s指定源地址
-d指定目的地址
-i进入接口
-o流出接口
-j采取的动作,accept,drop,snat,dnat,masquerade
–sport源端口
–dport目的端口,端口必须和协议一起来配合使用
注意:所有链名必须大写,表明必须小写,动作必须大写,匹配必须小写
*****
http://blog.chinaunix.net/uid-26495963-id-3279216.html
http://www.cnblogs.com/davidwang456/p/3540837.html
http://blog.csdn.net/liangyuannao/article/details/8621606
http://www.linuxe.cn/post-193.html
三个表 filter nat and mangle
filter 是默认的表,有三个链 INPUT OUTPUT AND FORWARD
filter表(默认使用的表):用于过滤数据包的进出,其中又包含了3个链:
INPUT:负责过滤进入主机的数据包
OUTPUT:负责过滤主机发出的数据包
FORWARD:负责转发该主机的数据包到其他目标地址
nat表(网络地址转换):多用于内外网地址转换,包含了3个链:
PREROUTING:实现DNAT功能,改变数据包的目的地址,多用于局域网接收公网数据时将目标的地址转换为局域网的一个地址
POSTROUTING:实现SNAT功能,改变数据包的源地址,多用于局域网向公网发送数据时将地址转换为公网地址
OUTPUT:同filter
mangle表与raw表很少使用,这里略过
详细语法:
iptables [-t 表名] <-A| I| D| R>[链名][规则编号][-i|o 网卡名称] [-p 协议类型] [-s 源ip地址|源子网][–sport 源端口号] [-d 目标ip地址|目标子网] [–dport 目标端口号][-j 匹配到以后的动作]
iptables [-t 要操作的表]<操作命令>[要操作的链][规则号码][匹配条件][-j匹配到以后的动作]
举例说明
-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
-i 输入接口
-o 输出接口
显式扩展(-m)
扩展各种模块
-m multiport:表示启用多端口扩展
#所有的扩展匹配表示要使用-m来指定扩展的名称来引用,而每个扩展模块一般都会有自己特有的专用选项,在这些选项中,有些是必备的:
使用-m来指定其状态并赋予匹配规则,语法如下
-mstate –state 状态
NEW,ESTABLISHED,RELATED,INVALID
#!/bin/bash
#my iptables.sh for web server
#删除
iptables -F
#数据包计数器和流量计数器归0
iptables -X
modprobe ip_tables
#这个默认要开才行
#modprobe ip_tables_nat
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
#
#modprobe ipt_MASQUERADE
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
#iptables -A INPUT -o lo -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT
iptables -A INPUT -m state --state new -m tcp -p tcp --dport 4505 -j ACCEPT
iptables -A INPUT -m state --state new -m tcp -p tcp --dport 4506 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
#-I INPUT -m state --state new -m tcp -p tcp --dport 4505 -j ACCEPT
#-I INPUT -m state --state new -m tcp -p tcp --dport 4506 -j ACCEPT
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
#-A FORWARD -j REJECT --reject-with icmp-host-prohibited
#COMMIT

保存方法一
对于RHEL和ceontos系统可以使用service iptables save将当前内存中的规则保存到/etc/sysconfig/iptables文件中
service iptables save
保存方法二
修改/etc/sysconfig/iptables-config 将里面的IPTABLES_SAVE_ON_STOP=”no”, 这一句的”no”改为”yes”这样每次服务在停止之前会自动将现有的规则保存在 /etc/sysconfig/iptables 这个文件中去。
折中的方案,也是打多少硬件防火墙厂商所采用的方案,他们都是采用INPUT默认禁用所有,OUTPUT默认允许所有,你只要关注INPUT规则即可。
-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
*****
规则表之间的优先顺序:
Raw——mangle——nat——filter
规则链之间的优先顺序(分三种情况):
-m –match 匹配的模块 指定数据包规则所使用的过滤模块
对于RHEL和ceontos系统可以使用service iptables save将当前内存中的规则保存到/etc/sysconfig/iptables文件中
service iptables save
11、参数 -m multiport –destination-port
范例 :iptables -A INPUT -p tcp -m multiport –destination-port 22,53,80,110 -j ACCEPT
说明:用来比对不连续的多个目的地端口号,设定方式同上。
12、参数 -m multiport –port
范例:iptables -A INPUT -p tcp -m multiport –port 22,53,80,110 -j ACCEPT
说明:这个参数比较特殊,用来比对来源端口号和目的端口号相同的数据包,设定方式同上。注意:在本范例中,如果来源端口号为 80,目的地端口号为 110,这种数据包并不算符合条件。
Iptables详解
http://blog.csdn.net/reyleon/article/details/12976341
iptable基本操作
ptables -L -n 列出iptables规则
iptables -F 清除iptables内置规则
iptables -X 清除iptables自定义规则
设定默认规则
在iptables规则中没有匹配到规则则使用默认规则进行处理
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
用以一次匹配多个端口
iptables -A INPUT -p tcp -m muliport --dports 21,22,25,80,110 -j ACCEPT
存储于恢复iptables规则
iptables-save > somefile
iptables-restore < somefile eg 设置仅22、80端口可访问 iptables -A INPUT -p tcp –dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp –sport 22 -j ACCEPT
iptables -A INPUT -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp –sport 80 -m state –state NEW,ESTABLISHED -j ACCEPT

取消其他端口的访问规则
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

##保持已有连接不中断 以redis 作例子
iptables -A INPUT -p tcp --dport 6379 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.12 -p TCP --dport 6379 -j ACCEPT
iptables -A INPUT -p TCP --dport 6379 -j DROP
/etc/init.d/iptables save

iptables -A INPUT -p tcp -m tcp –dport 21 -j ACCEPT //开放21端口
A默认是插入到尾部的,可以-I来插入到指定位置
#这个平时一般为了删除而查看 哈哈
iptables -L -n --line-number |grep 21 # //--line-number可以显示规则序号,在删除的时候比较方
iptables -D INPUT 3 # //删除input的第3条规则
iptables -R INPUT 3 -j DROP # //将规则3改成DROP

http://blog.51yip.com/linux/1404.html
iptables命令详解
http://www.liusuping.com/ubuntu-linux/iptables-firewall-setting.html
http://lym6520.iteye.com/blog/1931239