iptables
-
简述
-
基础知识
-
命令使用
简述
iptables是什么?netfilter又是什么?
iptables是位于用户控件的一个防火墙规则控制管理工具。netfilter是位于内核中的真正的防火墙,由五个钩子函数(hooks)而组成。
iptables的作用是什么?
用来添加,删除,管理netfilter规则。
netfilter的作用是什么?
起到过滤封包,转换与映射IP地址和端口,拆分和修改封包内容,追踪封包等功能,这些构成了四个功能表。
基础知识
组成部分
iptables:规则控制管理工具。 netfilter:位于内核空间的过滤器,实际上生效的部分。 四表:大致根据功能可以分为四个,也就是在内部维护了四个表。 五链:netfilter一共会在五个地方设置hooks,钩子函数,也就是说在五个地方会有关卡来过滤,依据不同的表,需要用到的链也是不同的。
五链(five hooks)
PREROUTING:进入路由前。 POSTROUTING:出路由前。 INPUT:进度内存空间前。 OUTPUT:出内存空间前。 FORWARD:转发链。 根据进入到出去的顺序为: PREROUTING -> INPUT -> OUTOUT -> POSTROUTING 进入本机用户空间处理。 PREROUTING -> FORWARD -> POSTROUTING 进入本机后直接转发处理。
四表
根据优先级从低到高为: filter:过滤。 INPUT OUTPUT FORWARD nat:网络地址转换。 PREROUTING POSTROUTING OUTPUT mangle:报文拆分已经重装,修改报文内容。 INPUT OUTPUT PREROUTING POSTROUTING FOEWARD raw:关闭NAT上启动的连接追踪机制。 PREROUTING OUTPUT
协议类型
tcp:传输控制协议,可建立的是可靠的连接。 udp:用户数据包协议,建立的为不可靠的连接。 icmp:网络控制报文协议,iptables中主要用来控制ping报文。
常用的端口
ftp: tcp/20,21 ssh: tcp/22 telnet: tcp/23 smtp:tcp/25 http: tcp/80,8080 dns: tcp,udp/53 portmapper: tcp,udp/111 samba: udp/137,138 tcp/139,445,901 https: tcp/443 nfs: tcp,udp/2049 mysql: tcp/3306 php-fpm: tcp/9000
命令使用
格式:
iptables [-t tables] -A|I|R [chain [num]] -[par] [value] -p [protocol [value]] -m [option [value]] -j [active [value]]
保存与重载:
Cnetos6: iptables-save > /PATH/TO/FILE iptables-restore < /PATH/TP/FILE Centos7:引入了新的iptables管理工具,firewall。 firewalld-cmd firewalld-config *具体的使用方法可自行查阅官方文档。
常用参数:
iptables [-t table] {-A|-D} chain rule-specification -A:添加 iptables [-t table] -I chain [rulenum] rule-specification -I:插入 iptables [-t table] -R chain rulenum rule-specification -R:替换 iptables [-t table] -D chain rulenum -D:删除 iptables [-t table] -S [chain [rulenum]] -S:保存 iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...] -F:清空规则 -L:列出规则 -Z:清零所有计数器 iptables [-t table] -N chain -N:创建一个新的用户自定义链 iptables [-t table] -X [chain] -X:删除用户自定义链 iptables [-t table] -P chain target -P:为一个链设定默认的策略,ACCEPT DROP REJECT iptables [-t table] -E old-chain-name new-chain-name -E:重命名一个自定义链
通用匹配(-par [value])
-i [intface] :指定作用的网卡。 -s [source-ip]:指定源地址。 -d [destination-ip]:指定目标地址。 -f:匹配包分片后的除了第一个包外的其他包。
隐式扩展参数(-p protocol parm):
-tcp --dport|sport port --tcp-flags LIST1 LIST2 表示在list1的标记列表中,list所指定的值为1即被标识的包。 例: -p tcp --tcp-flags ACK,SYN,FIN ACK :匹配ACK被设置,但是SYN和FIN没有被标识的包。 udp --dport|sport port 例: -p udp --dport 80 :标识匹配目标地址的80端口,所对应的如果为sport就为源地址的80端口。 icmp --icmp-type 0|8 0:响应报文 8:请求报文 例: -p icmp --icmp-type 0 :匹配icmp响应报文,详细的icmp code对照表会在最后附加。
显示扩展参数(-m parm):
mutilport --dports|sports|ports port1,port2... 例: -m mutilport --dports 22,80 :匹配目标地址端口22和80,可以指定一起指定多个端口,对应的sports源地址端口。 iprange [!] --src-range|--dst-range ipsfrom-toip 例: -m iprange --dst-range 192.168.1.1-192.168.1.10 :匹配目标地址为192.168.1.1-192.168.1.10范围内的主机。 -m iptange ! --src-range 192.168.1.100 :匹配源地址不是192.168.1.100的所有主机。 string --algo bm|kmp [!] --string 'parrern' --algo bm|kmp 指定字符串查找算法。 例: -m string --algo bm --string 'chrome' :匹配所有报文中出现了chrome字符的报文。 -m string --algo kmp --sring 'ie8' :匹配所有报文中除了ie8字符外的所有报文。 limit --limit rate[/second|/minute|/hour|/day] --limit-burst num 例: -m limit --limite 30/minute :报文传输速率为每分钟最多30封报文,即2秒一封最大速率 -m limit --limit-burst 100 :令牌桶允许存放100个令牌,如果存放的令牌超过100则开始丢弃令牌。 connlimit --connlimit-above num --conlimit-upto num 例: -m connlimit --connlimit-above 30 :允许并发连接数量要小于30. -m connlimit --connlimit-upto 10 : 允许并发连接数量大于10. recent --name #设定列表名称,默认DEFAULT。 --rsource:源地址,此为默认。 --rdest:目的地址 --seconds:指定时间内 --hitcount:命中次数 --set:将地址添加进列表,并更新信息,包含地址加入的时间戳。 --rcheck:检查地址是否在列表,以第一个匹配开始计算时间。 --update:和rcheck类似,以最后一个匹配计算时间。 --remove:在列表里删除相应地址,后跟列表名称及地址。 例: -m recent --name web --set -m recent --name web --update --seconds 300 -hitconut 10 -j DROP mac [!] --mac-source address 例: -m mac --mac-source 00:00:00:00:00:00 :匹配mac地址为00:00:00:00:00:00的报文。 time --datastart yyyy-mm-dd --datastop yyyy-mm-dd --timestart hh:mm[:ss] --timestop hh:mm[:ss] [!] --monthdays day1,day2... [!] --weekdays day1,day2... 例: -m time --datastart 2016-05-30 --datastop 2016-06-01 :匹配两个日期段内的报文。 -m time --timestart 10:00:00 --tiomestop 18:30:00 :匹配两个时间段内的报文。 -m time ! --monthdays 1-20 :匹配月除了1-20号外的所有天数。 -m time --monthdays 25- :匹配25号之后的所有天数。 -m time --weekdays 1-3 :匹配周的周一周二周三。 -m time ! --weekdays 3,5 :匹配除了周三与周五的所有天。 state [!] --state INVALID|ESTABLISHED|NEW|RELATED INVALID:无法识别的连接。 ESTABLISHED:建立新连接后,在此连接失效前的所有连接。 NEW:新连接。 RELATED:相关的连接,建立连接后产生的新连接等,如ftp协议第一次连接21命令通道后产生的20端口的数据通道连接。 例: -m state --state NEW,WSTABLISHED :新连接与ESTABLISHED连接。 -m state ! --state RELATED :除了无法识别的连接外的所有连接。
动作(-j active):
DROP:丢弃。 REJECT:允许。 ACCEPT:拒绝。 RETURN::结束在目前规则链中的过滤程序,返回主规则链继续过滤。 LOG:记录日志 --log-level NUM :日志等级。 --log-prefix STRING :日志前缀。 MASQUEARDE:不设置地址转换,而采用地址隐藏的策略来使的iptables自动取得转换地址。 MARK:防火墙标记,用来批量标识地址和端口。 --mark VALUE[/mask] SNAT:源地址转换。 --to-source IPADDR[:PORT] DNAT:目标地址转换。 --to-destination IPADDR[:PORT]
保存和导入
iptables-save [file] :保存规则到文件。 iptables-restore [file] :从文件导入规则。
常用命令组合示例:
iptables [-t filter] -L -n :显示指定的表规则状况,默认为filter表。 iptables -A INTPUT -d 192.168.1.1 -p tcp --dport 80 -j ACCEPT 放开80端口的请求。 iptables -A OUTPUT -s 192.168.1.1 -p tcp --sport 80 -j ACCEPT 放开80端口的响应。 iptables -t mangle -A PREROUTING -d 192.168.1.1 -p tcp -m mutilport --dports 22,80 -j MARK --mark 100 将22和80端口设置为一个防火墙标记100。 iptables -t NAT -A POSTROUTING -s 192.168.1.0 -p tcp -j SNAT --to-source 172.16.0.1 所有内网网段192.168.1.0的ip都将被映射为172.16.0.1这个ip iptables -t NAT -A PREROUTING -d 172.16.0.1 -p tcp -m mutilport --dports 22,80 -j DNAT --to-destination 192.168.1.1 所有目标ip 172.16.0.1的22,80请求都被转到192.168.1.1的相应端口上。 iptables -A INPUT -d 192.168.1.1 -p icmp --icmp-type 0 -j ACCEPT 允许icmp的响应报文。 iptables -A OUTPUT -s 192.168.1.1 -p icmp --icmp-type 8 -j ACCEPT 允许icmp的请求报文。 iptables -A FORWARD -d 192.168.1.3 -p tcp --dport 80 -j ACCEPT 允许目标地址为192.168.1.3的请求转发。
原创文章,作者:Net18_肖肖,如若转载,请注明出处:http://www.178linux.com/17185