1、使用iptables实现Linux服务器共享上网
https://www.cnblogs.com/LiuChang-blog/p/12342593.html
2、安装并启动iptables
yum -y install iptables iptables-services
systemctl start iptables
systemctl enable iptables
service iptables save
>> /etc/sysconfig/network
3、四表五链
四表:
filter: 数据过滤表
nat:地址转换表
mangle:包标记表
raw:状态跟踪表
五链
INPUT:入站规则
OUTPUT:出站规则
FORWARD:转发规则
PREROUTING:路由前规则
POSTROUTING:路由后规则
基本用法
iptables [-t 表名] 选项 [链名] [条件] [-j 目标操作]
iptables -t filter -i INPUT -p icmp -j REJECT
filter
链 | 源地址 | 源端口 | 目标端口 | 目标地址 | 协议 | 处理规则 | 备注 |
---|---|---|---|---|---|---|---|
INPUT | 1.1.1.1 | 80 | tcp | REJECT拒绝 | 拒绝1.1访问本机的80 | ||
2.2.2.2 | 20,21 | tcp | DROP丢弃 | 丢弃2.2对本机的20,21连接请求 | |||
3.3.3.3 | 443 | https | ACCEPT允许 | 允许3.3访问本机的443 | |||
4.4.4.4 | LOG记录日志/va/log | 记录4.4访问本机时的日志 | |||||
80 | 10.10.10.10(本机网卡1-IP) | REJECT | 禁止所有主机访问本机网卡1的80端口 | ||||
OUTPUY | 80 | 5.5.5.5 | REJECT | 出方向拒绝访问5.5.5.5的80 | |||
www.baidu.com | REJECT | 禁止访问百度 | |||||
FORWARD (转发规则) |
基本使用方法
语法格式:
iptables [-t 表名] 选项 [链名] [条件] [-j 目标操作]
例如:
iptables -t filter -I INPUT -p icmp -j ACCEPT
iptables -I INPUT -p icmp -j REJECT
iptables [-t 表名] 选项 [链名] [条件] [-j 目标操作]
例如:
iptables -t filter -I INPUT -p icmp -j ACCEPT
iptables -I INPUT -p icmp -j REJECT
注意事项与规律
> 可以不指定表,默认为filter表
> 可以不指定链,默认为对应所有的链
> 除非设置默认策略,否则必须指定匹配条件
> 选项/链名/目标操作用大小写字母,其余都小写
> 可以不指定表,默认为filter表
> 可以不指定链,默认为对应所有的链
> 除非设置默认策略,否则必须指定匹配条件
> 选项/链名/目标操作用大小写字母,其余都小写
目标操作:
> ACCEPT:允许通过/放行
> DROP:直接丢弃,不给出任何回应
> REJECT:拒绝通过,必要时会给出提示
> LOG:记录日志,然后传给下一条规则
> ACCEPT:允许通过/放行
> DROP:直接丢弃,不给出任何回应
> REJECT:拒绝通过,必要时会给出提示
> LOG:记录日志,然后传给下一条规则
类别 | 选项 | 描述 |
---|---|---|
添加规则 | -A | 追加一条防火墙到链的末尾位置 |
-I | 插入一条规则到链的开头(-I大写,后面加数字代表在第几行添加) | |
查看规则 | -L | 查看iptables所有规则 |
-n | 以数字形式显示地址,端口等信息 | |
--line-numbers | 查看规则时,显示规则的行号 | |
删除规则 | -D | 删除链内指定序号(或内容)的一条规则 |
-F | 清空所有的规则 | |
默认规则 | -P | 为指定的链设置默认规则 |
案例:
添加规则:
iptables -t filter -A INPUT -p tcp -j ACCEPT
iptables -I INPUT -p udp -j ACCEPT
//默认为filter表
iptables -I INPUT 2 -p icmp -j ACCEPT
//插入规则到filter表的INPUT链的第2行
iptables -nL INPUT --line-numbers
//注意参数的位置顺序,--line-numbers放在最后边,-n在L前
删除规则
iptables -D INPUT 3
//删除iptables中INPUT链的第3条规则
iptables -F
//清空所有规则
iptables -t nat/mangle/raw -F
//清空指定链的所有规则
默认规则:
iptables -t filter -P INPUT DROP
//设置默认规则
iptables -nL
CHain INPUT (policy DROP)
CHain INPUT (policy DROP)
类别 | 选项 | 用法 |
---|---|---|
通用配置 | 协议匹配 | -p 协议名称 |
地址匹配 | -s 源地址、-d 目标地址 | |
接口地址 | -i 接收数据的网卡、-o 发送数据的网卡 | |
隐含匹配 | 端口匹配 | --sport 源端口号、--dport 目标端口号 |
ICMP类型匹配 | --icmp-type ICMP类型 |
案例
iptables -t filter -I INPUT -p tcp -s 1.1.1.1 --dport 80 -j REJECT
//拒绝1.1访问本机的80
//拒绝1.1访问本机的80
iptables -I INPUT -p tcp -d 10.10.10.10 --dport 80 -j REJECT
//拒绝所有IP访问本机的网卡1(10.10)的80端口
//拒绝所有IP访问本机的网卡1(10.10)的80端口
iptables -t filter -I OUTPUT -p tcp -d www.baidu.com --dport 80 -j REJECT
//禁止本机在出方向上访问www.baidu.com的80端口
//禁止本机在出方向上访问www.baidu.com的80端口
- 练习题
禁止所有地址访问80
禁止h62访问本机任何端口
禁止所有地址访问:本机h60:80这个地址
禁止h63访问本机ens192网卡对应的私网IP
禁止h64访问本机80端口
禁止h64访问本机icmp协议
丢弃h20放过本机的所有包
丢弃10.0.10.0/24网络中所有主机发给本机的所有数据包
拒绝114.212.33.12使用tcp协议远程连接本机ssh
# 关机时执行
shell> mkdir -p /etc/network/if-post-down.d/
shell> vim /etc/network/if-post-down.d/iptables
#!/bin/bash
iptables-save > /etc/iptables.rules
# 开机时执行
shell> mkdir -p /etc/network/if-pre-up.d/
shell> vim /etc/network/if-pre-up.d/iptables
#!/bin/bash
iptables-restore < /etc/iptables.rules
shell> chmod +x /etc/network/if-pre-up.d/iptables
shell> chmod +x /etc/network/if-post-down.d/iptables
- 设置开机自动加载
shell> /etc/sysconfig/iptables
-I INPUT -p tcp -s 183.129.234.106 --dport 22 -j ACCEPT
-I INPUT -p tcp -s 183.129.234.106 --dport 3306 -j ACCEPT
-I INPUT -p tcp -s 183.129.234.106 --dport 6379 -j ACCEPT
-I INPUT -p tcp -s 192.168.30.10 --dport 3306 -j ACCEPT
FORWORD
iptables -A FORWARD -i tun0 -s 10.8.0.0/24 -d 192.168.99.130 -j ACCEPT
iptables -A FORWARD -i tun0 -s 10.8.1.0/24 -d 192.168.99.0/24 -j ACCEPT
iptables -A FORWARD -i tun0 -s 10.8.2.0/24 -d 192.168.99.131 -j ACCEPT