iptables

CentOS7 的防火墙配置与之前的版本iptables不一样,CentOS7这个版本的防火墙默认使用的是firewall:

1、开启和关闭

1.1 开启防火墙:

systemctl start firewalld.service  (centos7)

service iptables start

/etc/init.d/iptables start

1.2 关闭防火墙

systemctl stop firewalld.service (centos7)

service iptables stop

/etc/init.d/iptables stop

1.3 开启开机启动:

systemctl enable firewalld.service (centos7)

1.4 关闭开机启动:

systemctl disable firewalld.service (centos7)

2、四表五链

包过滤防火墙使用iptables 工具,即四表五链

里面含有4个功能表:

raw :确定是否对该数据包进行状态跟踪

mangle: 为数据包设置标记(较少使用)

nat :修改数据包中的源、目标IP地址或端口

filter :确定是否放行该数据包(过滤)

每个表专门写规则的地方(Chain-链)

五链:

INPUT:入站 :当收到访问防火墙本机地址的数据包(入站),应用此链中的规则

OUTPUT:出站 :当防火墙本机向外发送数据包(出站)时,应用此链中的规则。

FORWARD:转发 :当收到需要通过防火墙中转发送给其他地址的数据包时,应用此链中的规则

POSTROUTING:路由后转换 :在对数据包做路由选择之后,应用此链中的规则

PREROUTING:路由前转换 :在对数据包做路由选择之前,应用此链中的规则

3、iptables语法

 iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]

 注意:

 不指定表名默认为filter表

 不指定链名,默认为表内的所有链

 除非设定链的默认策略,否则必须指定匹配条件

 选项、链名、控制类型为大写字母,其余小写

3.1 链名

INPUT:入站 

OUTPUT:出站 

FORWARD:转发 

POSTROUTING:路由后转换

PREROUTING:路由前转换 

3.2 控制类型

ACCEPT :允许通过

DROP :直接丢弃,不会给出任何回应

REJECT :拒绝通过,必要时给出提示

LOG :记录日志信息,然后传给下一条规则继续匹配

3.3 选项

第二行插入禁Ping的规则

iptables -I INPUT 2 -p icmp -j ACCEPT

末尾添加禁tcp协议的规则

iptables -A INPUT -p tcp -j REJECT

查看filter表:

iptables -t filter -nvL

查看filter表,每秒钟刷新一次

watch n1 iptables -t filter -nvL

删除filter表中FORWORD链中第二条规则:

iptables -t filter -D FORWORD 2

清除filter表中的FORWORD链:

iptables -t filter -F FORWORD

为指定的链设置默认规则, 但只能是 ACCEPT 和DROP

iptables -t filter -P FORWARD DROP

 3.4 条件

通用匹配:

iptables -I INPUT -p icmp -j DROP

iptables -I INPUT -s 172.23.10.1/24 -j DROP

iptables -I INPUT -i eth0 -d 172.23.10.2/24 -j DROP

隐含匹配:

iptables -I FORWARD -s 172.23.10.3/24 --sport 21 -p tcp -j ACCEPT

iptables -I INPUT -p tcp --dport 20,21 -j DROP

iptables -A INPUT -p icmp --icmp-type 8 -j DROP   (8表示请求 =echo-request)

iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT  (3表示不可达)

iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT  (0表示回显=echo-reply)

显示匹配:

iptables -A INPUT -p tcp -m multiport --dport 80,21,443 -j ACCEPT

iptables -I FORWARD -p tcp -m iprange --src-range 172.23.10.2-172.23.10.8 -j ACCEPT

iptables -A INPUT -p tcp -m mac mac-source 00:11:ef:4d:3d:50 -j ACCEPT

禁止转发与正常tcp连接无关的非syn请求数据包(如伪造的网络攻击数据包)

iptables -I FORWARD -p tcp -m state --state NEW ! --syn -j DROP

3.5 规则备份和还原

iptables-save > /root/Desktop/iptables.txt

恢复还原

iptables-restore < /root/Desktop/iptables.txt

永久保存为默认规则

service iptables save

4 、filter表 和nat表

4.1  filter表

里面含有3个链:

INPUT

FORWARD

OUTPUT  :出站链,输出所有输出信息,包括拒绝信息

4.2 nat表

nat表 只有三个链:

PREROUTING :路由前转换 ,在对数据包做路由选择之前,应用此链中的规则

POSTROUTING :路由后转换 ,在对数据包做路由选择之后,应用此链中的规则

OUTPUT

4.2.1 源地址转换(SNAT)

主要是针对信息往外发的规则,内部想访问外部的服务。

假设linux服务器外部IP:16.29.4.20 ,内部IP为172.23.10.2 想访问web服务16.29.4.56

那么需要在服务器的外部做地址转换:

iptables -I POSTROUTING -p tcp -o eth1 -s 172.23.10.0/24 -j SNAT --to-source 16.29.4.20

如果外部地址是动态的变化,可以使用MASQUERADE,动态的更改为当前的外部IP :

iptables -I POSTROUTING -p tcp -o eth1 -s 172.23.10.0/24 -j MASQUERADE

前提都是符合 FORWARD 规则,才能到转换规则

4.2.2 目标地址转换(DNAT)

主要针对外部访问内部的服务器

假设内部web服务器为:192.168.10.1:8080,linux服务器外部IP:16.29.4.20 ,有一台PC:102.25.6.78想访问web服务

为了更加的贴切用户的使用,那么访问内部的8080端口,在外部就应该映射为80端口,用户就不用输入端口号了(http 默认为80端口)。

iptables -I PREROUTING -p tcp -i eth1 -d 16.29.4.20 --dport 80 -j DNAT --to-destination 192.168.10.1:8080

原文地址:https://www.cnblogs.com/BackingStar/p/12732671.html