1、iptables安装html
[root@localhost ~]# yum install iptables -y
[root@localhost ~]# yum install iptables-servicesweb
查看安装状况算法
[root@localhost ~]# rpm -qa|grep iptables
iptables-1.4.21-24.1.el7_5.x86_64
iptables-services-1.4.21-24.1.el7_5.x86_64
修改配置文件网络
[root@localhost ~]# vi /etc/sysconfig/iptablestcp
#firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
保存退出post
[root@localhost ~]#systemctl start iptables.servicethis
启动正常,安装成功。.net
[root@localhost ~]# systemctl enable iptables
[root@localhost ~]# iptables -nv -L --line-number //查看IP规则 ,--line-number 标上序号3d
2、iptables使用code
iptables的使用规则:
一、表 (table) 包含4个表(哪一个表是当前表取决于内核配置选项和当前模块):
4个表的优先级由高到低:raw-->mangle-->nat-->filter
raw---RAW表只使用在PREROUTING链和OUTPUT链上,由于优先级最高,从而能够对收到的数据包在链接跟踪前进行处理。一但用户使用了RAW表,在某个链上,RAW表处理完后,将跳过NAT表和ip_conntrack处理,即再也不作地址转换和数据包的连接跟踪处理了。
filter---这个规则表是预设规则表,拥有 INPUT、FORWARD 和 OUTPUT 三个规则链,这个规则表顾名思义是用来进行封包过滤的理动做。
net----此规则表拥有prerouting和postrouting两个规则链, 主要功能为进行一对1、一对多、多对多等网址转译工做(SNAT/DNAT)。
mangle--此规则表拥有prerouting、FORWARD、postrouting三个规则链,除了进行网址转译工做会改写封包外,在某些特殊应用可能也必须去改写封包(ITL、TOS)或者是设定MARK(将封包做记号,以进行后续的过滤)这时就必须将这些工做定义在mangles规则表中。
-t 指定使用个表( 3个表:filter,nat,mangle)(filter:INPUT(处理进入的包),FORWORD(处理经过的包),OUTPUT(处理本地生成的包);nat:PREROUTING (修改到来的包),OUTPUT(修改路由以前本地的包),POSTROUTING(修改准备出去的包);mangle:PREROUTING(修改路由以前进入的包),OUTPUT(修改路由以前本地的包))
例:iptable -t nat -A PREROUTING
二、链管理命令(这都是当即生效的)
-F 清空所选链 --> iptables -t nat -F 清空nat表的全部链
-N 根据给出的名称创建一个新的用户定义链 --> iptables -N inbound_tcp_web 表示附在tcp表上用于检查web的。
-X 删除指定的用户自定义链, 使用方法跟-N相同,可是在删除以前必需要将里面的链给清空了
-P 设置链的目标规则,设置默认策略, iptables -P INPUT (DROP|ACCEPT)默认是关的/默认是开的,好比: iptables -P INPUT DROP
-E 根据用户给出的名字对指定链进行重命名,-E oldname newname
-Z 清空链,及链中默认规则的计数器的(有两个计数器,被匹配到多少个数据包,多少个字节)--> iptables -Z :清空
1)INPUT链
INPUT链做为iptables的构建快,做用是控制目标为本地系统的数据包是否能够和本地套接字通讯,若是INPUT链中的第一条规则要求IPtables丢弃因此得数据包(或者INPUT链的策略设置为DROP),那么全部试图经过任何ip通讯方式(如TCP、UDP或ICMP)与系统直接通讯的努力都将失败。ARP工做在数据链路层而不是网络层,而iptables只过滤ip及其之上协议的数据包,因此iptables不能过滤arp协议的报文。
$IPTABLES -A INPUT -m state --state INVALID -j LOG --log-prefix "DROP INVALID" --log-ip-OPTIONS --log-tcp-options $IPTABLES -A INPUT -m state --state INVALID -j DROP $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
创建OUTPUT链规则集的命令以下所示:
$IPTABLES -A OUTPUT -m state --state INVALID -j LOG --log-prefix "DROP INVALID" --log-ip-options --log-tcp-options $IPTABLES -A OUTPUT -m state --state INVALID -j DROP $IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
2)FORWARD 链
filter表中的forward链提供了对经过防火墙接口转发数据包进行访问控制的能力:
$IPTABLES -A FORWARD -m state --state INVALID -j LOG --log-prefix "DROP INVALID" -- log-ip-options --log-tcp-options $IPTABLES -A FORWARD -m state --state INVALID -j DROP $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
3)网络地址转换
iptables的nat表专用于定义全部的NAT规则,在这个表中有两个链:PREROUTING和POSTROUTING,利用PREROUTING链将nat表中的规则应用到尚未经过内核中路由算法肯定应从哪一个接口传输的数据包,在这个链中处理的数据包也还没有通过filter表中的INPUT或PREROUTING链的处理
POSTROUTING链负责处理通过内核中的路由算法肯定传输的物理接口并即将从该接口出去的数据包,由这个链处理的数据包已经过filter表中的output或forward链的检查
$IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --to 192.168.10.3:80 $IPTABLES -t nat -A PREROUTING -p tcp --dport 443 -i eth0 -j DNAT --to 192.168.10.3:443 $IPTABLES -t nat -A PREROUTING -p tcp --dport 53 -i eth0 -j DNAT --to 192.168.10.4:53
三、规则,经常使用命令:
-N 新的规则-->iptables -N allowed 定义新的规则
-A 追加规则-->iptables -A INPUT
-D 删除规则-->iptables -D INPUT 1(编号)
-R 修改规则-->iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代现行规则,顺序不变(1是位置)
-I 插入规则-->iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一条规则,本来位置上的规则将会日后移动一个顺位
-L 查看规则-->iptables -L INPUT 列出规则链中的全部规则
-n:以数字的方式显示ip,它会将ip直接显示出来,若是不加-n,则会将ip反向解析成主机名。
-v:显示详细信息
-vv
-vvv :越多越详细
-x:在计数器上显示精确值,不作单位换算
--line-numbers : 显示规则的行号
-t nat:显示全部的关卡的信息
四、匹配 (包含匹配扩展和目标扩展,大多数均可以经过在前面加上!来表示相反的意思)
扩展匹配模块:tcp,udp,icmp,mac,limit,multiport,mark,owner,state,unclean,tos,多数后面会有参数,部分没有。
写法如(模块 参数):
state --state NEW , state --state ESTABLISHED,RELATED
tcp --tcp-flags SYN, ACK, FIN, RST SYN, tcp --syn
icmp --icmp-type echo-request
limit --limit 1/s --limit-burst 5 //每秒中最多容许5个新链接
扩展目标模块:LOG,MARK,TOS,MIRROR,SNAT,MASQUERADE,REDIRECT,DIAGNOSTICS,BUGS,COMPATIBILITY WITH IPCHAINS。
写法如(模块 参数):LOG --log-level 5 --log-prefix "IPTABLES:"
通用参数:
-p 协议 例:iptables -A INPUT -p tcp
-s 源地址 例:iptables -A INPUT -s 192.168.1.1
-d 目的地址 例:iptables -A INPUT -d 192.168.12.1
--sport 源端口 例:iptables -A INPUT -p tcp --sport 22
--dport 目的端口 例:iptables -A INPUT -p tcp --dport 22
-i 指定入口网卡 例:iptables -A INPUT -i eth0
-o 指定出口网卡 例:iptables -A FORWARD -o eth0
source--匹配源ip地址或网络
state 匹配一组链接状态, 这里state是一个逗号分割的匹配链接状态列表。可能的状态是:INVALID表示包是未知链接,ESTABLISHED表示是双向传送的链接,NEW 表示包为新的链接,不然是非双向传送的,而RELATED表示包由新链接开始,可是和一个已存在的链接在一块儿,如FTP数据传送,或者一个ICMP错误。
string--匹配应用层数据字节序列
comment--在内核内存中为一个规则关联多达256个字节的注释数据
扩展匹配
1)隐含扩展:对协议的扩展
-p tcp :TCP协议的扩展。通常有三种扩展
--dport XX-XX:指定目标端口,不能指定多个非连续端口,只能指定单个端口,好比
--dport 21 或者 --dport 21-23 (此时表示21,22,23)
--sport:指定源端口
--tcp-fiags:TCP的标志位(SYN,ACK,FIN,PSH,RST,URG)
对于它,通常要跟两个参数:
1.检查的标志位
2.必须为1的标志位
--tcpflags syn,ack,fin,rst syn = --syn
表示检查这4个位,这4个位中syn必须为1,其余的必须为0。因此这个意思就是用于检测三次握手的第一次包的。对于这种专门匹配第一包的SYN为1的包,还有一种简写方式,叫作--syn
-p udp:UDP协议的扩展
--dport
--sport
-p icmp:icmp数据报文的扩展
--icmp-type:
echo-request(请求回显),通常用8 来表示
因此 --icmp-type 8 匹配请求回显数据包
echo-reply (响应的数据包)通常用0来表示
2)显式扩展(-m)
扩展各类模块
-m multiport:表示启用多端口扩展
以后咱们就能够启用好比 --dports 21,23,80
五、目标(target)
-j 指定要进行的处理动做,经常使用的有:
DROP:丢弃
REJECT:明示拒绝
ACCEPT:接受
SNAT:基于原地址的转换
--to-source:指定原地址
好比咱们如今要将全部192.168.10.0网段的IP在通过的时候全都转换成172.16.100.1这个假设出来的外网地址:
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.1(外网有效ip)
这样,只要是来自本地网络的试图经过网卡访问网络的,都会被通通转换成172.16.100.1这个IP.
MASQUERADE(动态假装)--家用带宽获取的外网ip,就是用到了动态假装
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
DNAT目标地址转换
--to-destination:指定目标地址
iptables -t nat -A PREROUTING -d 192.168.10.18 -p tcp --dport 80 -j DNAT --to-destination 172.16.100.2
10.18访问80端口转换到100.2上
MASQUERADE:源地址假装
REDIRECT:重定向:主要用于实现端口重定向
MARK:打防火墙标记的
RETURN:返回 在自定义链执行完毕后使用返回,来返回原规则链
LOG: 将数据包信息记录到syslog
参考:
https://www.cnblogs.com/zclzhao/p/5081590.html
https://www.cnblogs.com/yinzhengjie/p/6256727.html
https://www.ibm.com/developerworks/cn/opensource/os-iptables/