Linux | iptables用法

请注意,本文编写于 541 天前,最后修改于 497 天前,其中某些信息可能已经过时。

iptables拥有强大的功能,配合Linux的路由转发就是一个可自定策略的路由器
可惜我是个渣渣

系统环境:CentOS6.7

iptables防火墙配置

# 开启iptables
service iptables start | stop | status | restart
# 开机运行
chkconifg iptables on
# 清除默认配置
iptables -F
# 永久生效
service iptables save
# 查看配置
cat /etc/sysconifg/iptables

# 语法格式
iptables -t 表名 管理选项 链名 匹配条件 -j 处理动作

# 表名 [默认4张表,功能不同]:
filter表:对到达防火墙服务器的ip包做过滤
nat表:...ip包中的源ip地址或目标ip地址或端口做转换
mangle表:...ip包打标记
raw表:...ip包做状态跟踪

# 管理选项 [默认对filter表操作]
-F 清空表中规则
-L 显示表中规则
-n 以数字方式显示ip地址及端口
--line-numbers 添加显示行号
-----------------------------
-A 表添加新规则,默认添加在末尾
-I 行号 ;插入新规则
-D 行号 ;删除某条规则
-P 设置链默认规则(ACCEPT/DROP)
*防火墙启动后默认所有表中所有链的默认规则都放行ACCEPT*

# 链名 [匹配数据包的传输方向]
INPUT        匹配进入防火墙本机的ip包
OUTPUT        匹配从防护墙本机出去的ip包
FORWARD     匹配经过防火墙主机的ip包
PREROUTING  处理路由前的ip包
POSTROUTING 处理路由后的ip包

匹配条件
-p 协议 tcp | udp |icmp ...
-s 源地址
-d 目的地址
--sport 源端口号 
--dport 目标端口号

处理动作 [决定如何处理与条件匹配的ip包]
ACCEPT 放行 
DROP   丢弃    (无反馈)
REJECT 拒绝   (反馈)
SNAT 源地址转换 (修改ip包)
DNAT 目的地址转换 (修改ip包)

For Examples:

# host61,只允许192.168.4.254的主机访问自己的ssh服务。
iptables -t filter -A INPUT -s 192.168.4.254 -p tcp --dport 22 -j ACCEPT
iptables -t filter -P INPUT  DROP
iptables -t filter -nL INPUT

# 在61主机上添加1条新的规则,允许网络中的所有主机访问本机的网站服务。
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT

# 在61主机上,不允许192.168.4.67主机访问本机的网站服务。
iptables -t filter -I INPUT 2 -s 192.168.4.67 -p tcp --dport 80 -j ACCEPT

# 在61可以ping网络中的其他主机 ,但其他主机不可以ping61主机
iptables -t filter -A INPUT -p icmp --help
iptables -t filter -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

# 在61上,仅允许主机254可以ping 主机61
iptables -t filter -A INPUT -s 192.168.4.254 -p icmp --icmp-type echo-request -j ACCEPT
service iptables  save

配置Linux网络防火墙

防火墙开启路由转发
客户端网关指向防火墙

# 拓扑:
host2.66--->eth1 host68 eth0 <---host4.67

# host68:
eth0:192.168.4.68
eth1:192.168.2.68
# 开启路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forword = 1
sysctl -p 

# host66:
eth1:192.168.2.66/24 gw:192.168.2.68
# host67:
eth0:192.168.4.67/24 gw:192.168.4.68

# host68:防火墙规则不允许所有ip包经过 
iptables -t filter -P FORWARD DROP
iptables -L FORWARD
# host68:放行67访问66主机ssh的ip包
iptables -t filter -A FORWARD 匹配条件 -j ACCEPT
条件1: -s 192.168.2.66 -d 192.168.4.67 -p tcp --dport 22
条件2: -s 192.168.4.67 -d 192.168.2.66 -p tcp --sport 22
# 放行所有主机访问网站的请求
iptables -t filter -A FORWARD -p tcp --dport 80 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --sport 80 -j ACCEPT

路由配置

将Linux配置成路由器,使用NAT表上网,POSTROUTING链

# 拓扑:
外网eth1:192.168.2.0/24
内网eth0:192.168.4.0/24

# 环境:
host68:
iptables -t filter -F
iptables -t filter -P FORWARD ACCEPT

host66:删除网关,192.168.2.66/24,搭建测试网站
host67:eth0-192.168.4.67/24 gw-192.168.4.68
host65: eth0-192.168.4.65/24 gw-192.168.4.68

# host68:
# 使用68公网ip共享上网
iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -o eth1 -j SNAT --to-source 192.168.2.68
# 映射内网67网站
iptables -t nat -A PREROUTING -i eth1 -d 192.168.2.68 \
-p tcp --dport 80 -j DNAT --to-destination 192.168.4.67

# 删除路由规则
iptables -t nat -nL
iptables -t nat -D PREROTING 1

Debian9.5 系统配置持久化iptables规则

此处评论已关闭