乱读天书, 不求甚解
周祎骏的个人云笔记
Toggle navigation
乱读天书, 不求甚解
主页
Linux:系统配置
Linux:用户管理
Linux:优化排错
Linux:进程调度
Linux:文件系统
Linux:网络
Linux:系统服务
Linux:安全
Linux:内核
容器:Docker
容器:containerd
容器编排:Kubernetes
IAC:Terraform
大数据:Hadoop
大数据:Zookeeper
大数据:Hbase
消息队列:rsyslog
消息队列:kafka
数据库:MySQL
数据库:MongoDB
搜索引擎:Elasticsearch
时序数据库:OpenTSDB
网站服务:Nginx
编程:Bash
编程:Perl
编程:Python
编程:C
编程:JAVA
编程:Rust
版本控制:gitlab
知识管理:docusaurus
常用小工具
关于我
标签
Linux服务 3.0 iptables
2017-07-16 23:36:05
113
0
0
admin
> 基于netfilter/iptables 的安全策略 netfilter 在内核空间,控制数据包的过滤等,其过滤规则被放在链(chain)中。 iptables 在用户空间,帮助用户修改链中的规则。 #一些概念:  *图片来自于《鸟哥的linux私房菜》* ##链: netfilter在内核中的数据结构 **INPUT**:处理进入机器的数据包 **OUTPUT**:处理发送出去的数据包 **FORWARD**:处理转发的数据包 **PREROUTING**:在数据包进入路由前的链 **POSTROUTING**:在数据包发出之前经过的链 ##表: 用户操作netfilter的方式,把一些相似的逻辑放在一起,方便用户操作 **filter表**:负责过滤 **nat表**:负责网络地址转换 **mangle表**:解析报文,修改,再重新封装 *** #简单操作: ##导入导出配置 **iptables-save**:导出所有的配置到stdout -c 保存包和字节数 的计数 ``` iptables-save > /tmp/iptables ``` **iptables-restore**:导入所有的配置 -c 导入包和字节数 的计数 -n 不覆盖已有的配置,默认会清除所有已有的配置 ``` iptables-restore /tmp/iptables ``` ##iptables常用命令 ###查看iptables 配置 iptables -L -t filter/nat 显示某一个表的规则,默认filter -n 不进行dns 反查 -v 列出一些详细信息 *** ###清除iptables 配置 iptables -F 清除所有规则 iptables -X 清除所有自定义的链 iptables -Z 将流量计数清零 *** ###设置默认策略 -P 默认策略 默认丢弃进入的包,放行出去的包 ``` iptables -t filter -P INPUT DROP iptables -t filter -P OUTPUT ACCEPT iptables -t filter -P FORWARD ACCEPT ``` *** ###修改配置 ``` iptables [-AID 链名] [-io 网卡] [-p 协议] [-s 来源] [-d 目标] -j ACCEPT/DROP/REJECT/LOG -A 增加一条规则,加在最后 -I 插入一条规则,默认插在第一条 -D 删除一条规则 -i 通过该网卡进去的数据包 -o 通过该网卡出去的数据包 ``` 接收所有本地io发出的数据包 iptables -A INPUT -i io -j ACCEPT 拒绝所有192.168.100.1 来的数据包 iptables -A INPUT -s 192.168.100.1 -i eth0 -j REJECT 插入规则允许192.168.101.1 访问的规则,在第二行 iptables -I INPUT 2 -s 192.168.101.1 -i eth0 -j ACCEPT 允许192.168.0.2 通过tcp 访问本地22端口 iptables -A INPUT -i eth0 -p tcp -s 192.168.0.2 --dport 22 -j ACCEPT *(这里--dport代表数据包的目标端口 --sport 代表数据包来源的端口)* *** #其他使用场景 ##针对icmp 的规则 iptables -A INPUT -p icmp --icmp-type ICMP代号 -j ACCEPT/DROP/REJECT *** ##使用state模块 iptables -A INPUT -m state --state INVALID/ESTABLISHED/NEW/RELATED **INVALID**:无效的数据包 **ESTABLISHED**:已经连接的数据包 **NEW**:想要新建立连接的数据包 **RELATED**:与主机发送出去的数据包有关,比如是响应 ``` 已经连接的数据包通过,没有关的拒绝 iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -m state --state INVALID -j REJECT ``` *** ##使用mac模块 允许mac 地址为xx:xx:xx:xx:xx:xx的机器访问 iptables -A INPUT -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT *** ##DNAT **目标地址转换** 例如外部主机想要访问本机后面的服务,本机将其数据包转发给后面的服务。 是在PREROUTING链上做文章,数据包刚进来就把目标地址改了 需要打开内核的ipforward功能 echo 1 > /proc/sys/net/ipv4/ip_forward *将发送到本地1234端口的数据包转发到本地22端口* 方法一: iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 1234 -j DNAT --to-destination 192.168.0.106:22 方法二: iptables -t nat -A PREROUTING -p tcp --dport 1234 -j REDIRECT --to-ports 22 *注:* 1. 现在外部机器可以通过访问本机1234来访问本机22端口。但是本机不行 要本机也行需要修改OUTPUT链 iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 1234 -j REDIRECT --to-ports 22 2. 外来数据包不允许把目标地址或者源地址改成127.0.0.1,为了安全。 *** ##SNAT **源地址转换** 需要打开内核的ipforward功能 echo 1 > /proc/sys/net/ipv4/ip_forward 从192.168.0.1来的包,发出去的时候把源地址改成eth0的ip iptables -t nat -A POSTROUTING -s 192.168.0.1 -o eth0 -j MASQUERADE 从192.168.0.1来的包,发出去的时候把源地址改成192.168.100.1 iptables -t nat -A POSTROUTING -s 192.168.0.1 -o eth0 -j SNAT --to-source 192.168.100.1
上一篇:
Linux服务 2.3 SAMBA
下一篇:
Linux服务 4.1 DHCP
文档导航