码迷,mamicode.com
首页 > 其他好文 > 详细

iptables基础配置

时间:2015-01-23 21:32:17      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:

iptables [-t TABLE] COMMAND CHAIN(链) Rule(匹配条件和规则) -j TARGET 
-t TABLE
        nat,mangle,raw,filter,默认为filter

COMMAND
        -F:flush,清空规则链
                # iptables -t nat -F ==>清空nat表上所有链上的规则   
        -Z:计数器归零
        -P:policy,设定默认策略对filter表来说,默认规则为ACCEPT或DROP
                # iptables -t mangle -P FORWARD DROP        ==>设置mangle表的FORWARD链默认策略为DROP
        -N:new 自定链,只能被主链调用 
                # iptables -N httpd        ==>在filter表中定义一条名为httpd的自定义链
        -E:rename,重命名自定义连
                iptables -E httpd http        ==>修改filter表中的自定义链httpd的名字为http
        -X:delete删除一条自定义的空链,但需0引用

链中的规则:
        -A:Append,添加规则(添加到规则的最后一条)
        -I:Insert,插入一条新规则(默认插入到规则的第一条)
        -D:Delete,删除规则
        -R:Replace,替换规则
                # iptables -D INPUT 2      

查询:
技术分享
        -L:list
        -n:以数字格式显示主机地址和服务,IP和端口不反解
        -v:详细格式-vv,-vvv
        --line-number:显示规则编号  
        -x:exactly,不要对计数器的计数结果做单位换算,而显示其精确数值
                # iptables -L -nvx        ==>查询filter表的规则

匹配条件:
通用匹配
    -s 地址:指定报文源IP地址匹配的范围;可以是IP,也可以是网段(格式为172.16.0.0/16或172.16.0.0/255.255.0.0);可使用!取反;
        --src, --source
    -d 地址:指定报文目标IP地址匹配的范围;
        --dst, --destination
    -p 协议:指定匹配报文的协议类型,一般有三种tcp, udp和icmp;
    -i INTERFACE: 数据报文流入的接口;PREROUTING, INPUT, FORWARD
    -o INTERFACE: 数据报文流出的接口;OUTPUT, FORWARD, POSTROUITING
 
扩展匹配:调用netfilter额外模块实现特殊检查机制,(使用到相关功能,使用iptables -m 哪个模块)
    隐式扩展:当使用-p {tcp|udp|icmp}中的一种时,可以直接使用扩展专用选项;
        -p tcp [-m tcp]
        --sport PORT[-PORT]: 指定源端口
        --dport PORT[-PORT]: 指定目标端口
        --tcp-flags:要检查标志位列表(用逗号分隔)    必须为1的标志位列表(逗号分隔)      
            例如:--tcp-filgs syn,ack,rst,fin syn  ==> 等于--syn
                all none    ==>全0
                all all ==>全1
        -p udp [-m udp]   
            --sport
            --dport
        -p icmp [-m icmp]
            --icmp-type
                0:echo-reply,ping响应
                8:echo-request,ping请求
        在filter表中INPUT和OUTPUT链默认策略为DROP,允许往外ping,外面主机不能ping本地主机
        # iptables -I OUTPUT -p icmp --icmp-type 8 -j ACCEPT
        # iptables -I INPUT -p icmp --icmp-type 0 -j ACCEPT
       放开环回口的流量,就可以ping 127.0.0.1了
        # iptables -I INPUT -i lo -j ACCEPT
        # iptables -I OUTPUT -o lo -j ACCEPT
    显式扩展:必须明确说明使用哪个模块进行扩展,而后才能使用其扩展专用选项;
            模块:iptables,netfilter各拥有一部分代码   
(1)mutiport:多端口匹配,可用于匹配非连续或连续端口;最多指定15个端口
    --source-ports,--sprots port[,port,port]  
    --destination-ports,--dports
    --ports
        在filter表中的INPUT和OUTPUT链放行22端口和80端口:
        # iptables -I INPUT -d 172.16.2.1 -p tcp -m multiport --dports 22,80 -j ACCEPT
        # iptables -I OUTPUT -s 172.16.2.1 -p tcp -m multiport --sports 22,80 -j ACCEPT

(2)iprange: 匹配指定范围内的地址;
匹配一段连续的地址而非整个网络时有用;
专用选项:
        [!] --src-range IP[-IP]
[!] --dst-range
                在filter表的INPUT和OUTPUT中允许172.16.2.1-172.16.2.100的地址范围访问本地的23端口
                # iptables -A INPUT -d 172.16.2.1 -p tcp --dport 23 -m iprange --src-range 172.16.2.1-172.16.2.100 -j ACCEPT
# iptables -A OUTPUT -s 172.16.2.1 -p tcp --sport 23 -m iprange --dst-range 172.16.2.1-172.16.2.100 -j ACCEPT

(3)string: 字符串匹配,能够检测报文应用层中的字符串
字符匹配检查高效算法
kmp, bm
专用选项:
--algo {kmp|bm}
--string "STRING"
--hex-string "HEX_STRING": HEX_STRING为编码成16进制格式的字串;
                在filter表中的OUTPUT链中有admin字符的就丢弃数据包
# iptables -I OUTPUT -m string --algo kmp --string "admin" -j DROP

(4)time: 基于时间做访问控制
专用选项:
--datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]
--datestop 
--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
--weekdays day[,day]        Mon, Tue,Thu,Fri
                在filter表的INPUT链上定义周二到周日的10:00-18:00拒绝到本机80端口流量
# iptables -I INPUT -d 172.16.2.1 -p tcp --dport 80 -m time --timestart 10:00 --timestop 18:00 ! --weekdays Mon -j REJECT

(5)connlimit: 连接数限制,对每IP所能够发起并发连接数做限制
专用选项:
[!] --connlimit-above [n]:有n个连接
# iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP

(6)limit: 速率限制
专用选项:
--limit n[/second|/minute|/hour|/day]        ==>按照固定的速率发通行证
--limit-burst n        ==>空闲时用的令牌桶,如在空闲时一次发放n个令牌
                限制ping包的数量,每分钟20个,空闲时一次响应5个,于实测有点差别
# iptables -R INPUT 1 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT        ==>修改filter表INPUT链中的第一条规则,允许ping请求
                # iptables -R OUTPUT 1 -p icmp --icmp-type 0 -j ACCEPT

(7)state: 状态检查,连接追踪,不管tcp或udp,并发请求很大不能启用
专用选项:
--state 
连接追踪中的状态:
NEW: 新建立一个会话
ESTABLISHED:已建立的连接(数据包触发ESTABLISHED状态的条件是Netfilter连接跟踪子系统在一个连接的两个方向上都己看到了数据包(如在一个数据己经经过交换的TCP连接中的确认数据包))
RELATED 有:关联关系的连接
INVALID:无法识别的连接(一个突然到达的TCP FIN数据包(即它不属于任何TCP会话)就将匹配INVALID状

/proc/sys/net/nf_conntrack_max        ==>调整连接追踪功能所能容纳的连接的最大数据
/proc/net/nf_conntrack        ==>当前追踪的所有连接
/proc/sys/net/netfilter目录        ==>不同协议或连接类型追踪时的属性
放行被动模式的ft
                /lib/modules/2.6.32-504.el6.x86_64/kernel/net/netfilter/nf_conntrack        ==>查看是否有这个模块
                # rpm -ql iptables | less
                # modprobe nf_conntrack_ftp        ==>临时有效
                # vim /etc/sysconfig/iptables-config        ==>修改IPTABLES_MODULES="nf_conntrack_ftp"永久有效
                # lsmod | less
                # iptables -A INPUT -d 172.16.2.1 -p tcp --dport 21 -m state --state RELATED -j ACCEPT
                # iptables -R OUTPUT 1 -s 172.16.2.1 -m state --state ESTABLISHED,RELATED -j ACCEPT

NAT:Network Address Translation
# vim /etc/sysctl.confg        ==>net.ipv4.ip_forward改为1开启IP转发
# sysctl -p        ==>立即生效
初衷为了安全隐藏真实的IP地址,后来为了节约IP的一个方案
技术分享
SNAT:POSTROUTING,OUTPUT
--to-source SIP        ==>转换成哪个源地址,适用于固定IP
MASQUERADE        ==>自动会挑一个合适的,用于动态拨号
        iptables -t nat -R POSTROUTING 1 -s 192.168.1.0/24 -p tcp --dport 80  -j SNAT --to-source 172.16.2.2        ==>C3访问C1时,源地址变为172.16.2.2;SNAT应用于Clinet->Server
DNAT:PREROUTING
 --to-destination
        # iptables -t nat -A PREROUTING -s 172.16.0.0/16 -p tcp --dport 80  -j DNAT --to-destination 192.168.1.5         ==>访问C2的web服务时转发到C3上,DNAT应用于Clinet->Server
PNAT:端口地址转换      
FULL NAT全地址转换

iptables基础配置

标签:

原文地址:http://www.cnblogs.com/kwstars/p/a809ed41a0d3dbfb10380fe585f63f38.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!