防火墙配置iptables,filewalld
https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html#DNATTARGET
三张表介绍:
filter负责过滤数据包,包括的规则链有,input,output和forward;
nat则涉及到网络地址转换,包括的规则链有,prerouting,postrouting和output;
mangle表则主要应用在修改数据包内容上,用来做流量整形的,给数据包打个标识,默认的规则链有:INPUT,OUTPUT、forward,POSTROUTING,PREROUTING;
五个链:
input匹配目标IP是本机的数据包,
output 出口数据包 , 一般不在此链上做配置
forward匹配流经本机的数据包,
prerouting用来修改目的地址,用来做DNAT 。如:把内网中的80端口映射到路由器外网端口上
postrouting用来修改源地址用来做SNAT。 如:内网通过路由器NAT转换功能实现内网PC机通过一个公网IP地址上网。
总结:iptables三个表,5个链接,结构如图:
安装安装iptables防火墙
yum installiptables-services #安装
iptable [-t 表名] 管理选项 [链名][条件匹配][-j目标动作或跳转]
配置文件位置:
[root@xuegod63 ~]#ls /etc/sysconfig/iptables
[root@xuegod63 ~]#systemctl start iptables.service
[root@xuegod63 ~]# chkconfig --listiptables
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
-A <链名> APPEND,追加一条规则(放到最后)
-I <链名> [规则号码] INSERT,插入一条规则
-R num:Replays替换/修改第几条规则
-D <链名> <规则号码 | 具体规则内容> DELETE,删除一条规则
ptables -D INPUT1(按号码匹配)
iptables -D INPUT-s 192.168.0.1 -j DROP(按内容匹配)
-P <链名> <动作> POLICY,设置某个链的默认规则
iptables -P INPUTDROP(不用加-j)
-F [链名] FLUSH,清空规则
-L [链名] LIST,列出规则
v:显示详细信息,包括每条规则的匹配包数量和匹配字节数
x:在 v 的基础上,禁止自动单位换算(K、M)
n:只显示 IP 地址和端口号码,不显示域名和服务名称
--line-number 可以查看到规则号
匹配条件
£ 流入、流出接口(-i、-o)
£ 来源、目的地址(-s、-d)
£ 协议类型 (-p)
£ 来源、目的端口(--sport、--dport)
£ -i <匹配数据进入的网络接口> #此参数主要应用于nat表,例如目标地址转换
£ -o 匹配数据流出的网络接口
£ -s <匹配来源地址>
£ -d <匹配目的地址>
£ -p <匹配协议类型>
£ --sport <匹配源端口>
£ --dport <匹配目的端口>
注意:--sport 和 --dport 必须配合 -p 参数使用
动作(处理方式)
-j ACCEPT
通过,允许数据包通过本链而不拦截它
-j DROP
丢弃,阻止数据包通过本链而丢弃它
-j SNAT --toIP[-IP][:端口-端口](nat 表的 POSTROUTING 链)
源地址转换,SNAT 支持转换为单 IP,也支持转换到 IP 地址池(一组连续的 IP 地址)
-j DNAT --to IP[-IP][:端口-端口](nat 表的 PREROUTING链)
目的地址转换,DNAT 支持转换为单 IP,也支持转换到 IP 地址池
-j MASQUERADE 伪装
附加模块
£ 按包状态匹配 (state)
£ 按来源 MAC 匹配(mac)
£ 按包速率匹配 (limit)
£ 多端口匹配 (multiport)
按包状态匹配 (state)
-m state --state 状态
状态:NEW、RELATED、ESTABLISHED、INVALID
NEW:有别于 tcp 的 syn #如果我们发送一个流的初始化包,状态就会在OUTPUT链 里被设置为NEW,当我们收到回应的包时,状态就会在PREROUTING链里被设置为ESTABLISHED。如果第一个包不是本地产生的,那就会在PREROUTING链里被设置为NEW状 态。
ESTABLISHED:连接态
RELATED:衍生态,与 conntrack 关联(FTP)
INVALID:不能被识别属于哪个连接或没有任何状态
按来源 MAC 匹配(mac)
-m mac --mac-source MAC
匹配某个 MAC 地址
按包速率匹配 (limit)
-m limit --limit 匹配速率 [--burst 缓冲数量]
用一定速率去匹配数据包
多端口匹配 (multiport)
-m multiport<--sports|--dports|--ports> 端口1[,端口2,..,端口n]
一次性匹配多个端口,可以区分源端口,目的端口或不指定端口
保存:service iptables save
1、开放20、21端口:
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT #默认情况一般服务与本机通讯以127.0.0.1来通讯的。
iptables -A INPUT -p tcp -m multiport --dports21,22,80 -j ACCEPT
-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 -jACCEPT
使用iptables搭建路由器,通过SNAT功能
启用内核路由转发功能:临时生效
[root@xuegod63 ~]#echo"1" > /proc/sys/net/ipv4/ip_forward
永久生效:
[root@xuegod63 ~]#vim /etc/sysctl.conf
改:#net.ipv4.ip_forward =0
为: net.ipv4.ip_forward =1
改完使配置生效:
[root@xuegod63 ~]# sysctl –p
配置之前,把前面的规则去除了,否认会达不到一定的效果
iptables -P INPUT ACCEPT
iptables –F
配置SNAT:
[root@xuegod63 ~]#iptables-t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to 192.168.1.63
或:
[root@xuegod63 ~]#iptables -t nat -APOSTROUTING -s 192.168.2.0/24 -oeth0 -j MASQUERADE # ADSL拨号上网.
使用DNAT 功能,把内网web服务器端口映射到路由器外网
做DNAT端口映射:
xuegod63:
[root@xuegod63 ~]# iptables -t nat -A PREROUTING -i eth0 -p tcp--dport 80 -j DNAT --to 192.168.2.2:80
或:
[root@localhost ~]# iptables -t nat -APREROUTING -d 192.168.1.63 -p tcp --dport 80 -j DNAT --to 192.168.2.2:80
iptables命令使用总则总结:
£ 所有链名必须大写
INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING
£ 所有表名必须小写
filter/nat/mangle
£ 所有动作必须大写
ACCEPT/DROP/SNAT/DNAT/MASQUERADE
£ 所有匹配必须小写
-s/-d/-m <module_name>/-p
修改配置的话只需要将/usr/lib/firewalld中的配置文件复制到/etc/firewalld中修改。恢复配置的话直接删除/etc/firewalld中的配置文件即可。
就需要把/usr/lib/firewalld/ssh.xml 文件拷贝到 /etc/firewalld/services/