参考: http://blog.51yip.com/linux/1404.htmlhtml
参考: https://aliang.org/Linux/iptables.html
linux
用途 | 链/表 |
---|---|
过滤到本机的流量: | input链 filter表 |
过滤到本地发出的流量: | output链 filter表 |
用途 | 链/表 |
---|---|
过滤转发的流量: | forward链 filter表 |
过滤转发的数据的源/目标进行修改(NAT) | pre-outing, post-routing |
iptables -L --list -t filter/nat -n, --numeric Numeric output. IP addresses and port numbers will be printed in numeric format. -F, --flush-chain -X, --delete-chain -p, --protocol protocol tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh
echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -s 172.16.93.0/24 -j SNAT --to-source 10.0.0.1 iptables -t filter -L iptables -t nat -L -n sudo iptables -F && sudo iptables -X && sudo iptables -F -t nat && sudo iptables -X -t nat iptables -P FORWARD ACCEPT iptables -t nat -L -n --line-number iptables save #保存cli规则 iptables -F #清除全部iptables规则 iptables -F -t mat # 清空nat表 参考: http://quenywell.com/10-usefull-iptables-rules-examples/ 清除IPTables规则 容许SSH入站链接 设置IPTables默认策略 只容许从特定网段访问SSH服务器 容许访问Loopback 容许外网Ping服务器 容许HTTP和HTTPS入站链接 容许使用邮件服务 容许使用外网DNS解析 同一条规则设置多个端口 默认是accept: 通常状况下,INPUT、OUTPUT、FORWARD链的默认策略都是ACCEPT。若是想更改默认策略为DROP,能够用如下命令(注意大小写): #iptables -P INPUT DROP #iptables -P OUTPUT DROP #iptables -P FORWARD DROP
- 列出规则 iptables -L - 插入一个规则 iptables -I INPUT 3 -p tcp -dport 22 -j ACCEPT - 删除一个规则 iptables -D INPUT 3 iptables -D INPUT -s 192.168.1.2 -j DROP - 删除全部规则 iptables -F -s ‘!’ 192.168.1.x/24 加上!排除地址
- 基于ip地址 -s 192.168.1.1 -d 10.0.0.0/8 - 基于接口 -i eth0 -o eth1 -排除参数 -s '!'192.168.1.0/24
控制到本机的网络流量安全
iptables -A INPUT -s 192.168.1.100 -j DROP iptables -A INPUT -p tcp --dport 80 -j DROP iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j DROP iptables -A INPUT -i eth0 -j ACCEPT 注意大小i,小i是指定接口。-I -D -A
- 禁止192.168.1.0/24到10.1.1.0/24的流量 iptables -A FORWARD -s 192.168.1.0/24 -d 10.0.0.0/24 -j DROP iptables save # 报错cli规则 iptables -F #清除全部iptables规则
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o eth0 -j SNAT --to-source 218.29.30.31 不加-t时默认是filter 语法参数: -I:第一行插入 -A:最后追加 -i/o:指的是数据要进入或出去所要通过的端口,如eth1,eth0,pppoe等 -p:你所要指定的协议 -s:指定来源ip,能够是单个ip如192.168.109.131,也能够是一个网络 192.168.109.0/24,还能够是一个域名如163.com,若是你填写的是域名系统会自动解析出他的ip并在iptables里显示 --sport:来源端口 -d:指定目标ip --dport:目标端口 -j:执行参数ACCEPT或DROP,REJECT通常不用 -A 在指定链的末尾添加(append)一条新的规则 -D 删除(delete)指定链中的某一条规则,能够按规则序号和内容删除 -I 在指定链中插入(insert)一条新的规则,默认在第一行添加 -R 修改、替换(replace)指定链中的某一条规则,能够按规则序号和内容替换 -L 列出(list)指定链中全部的规则进行查看 -E 重命名用户定义的链,不改变链自己 -F 清空(flush) -N 新建(new-chain)一条用户本身定义的规则链 -X 删除指定表中用户自定义的规则链(delete-chain) -P 设置指定链的默认策略(policy) -Z 将全部表的全部链的字节和数据包计数器清零 -n 使用数字形式(numeric)显示输出结果 -v 查看规则表详细信息(verbose)的信息 -V 查看版本(version) -h 获取帮助(help) 若是配置的是INPUT(进入),则来源ip是运程ip,目标端口就是本机;OUTPUT相反 iptables的执行优先级: iptables的执行顺序是自上而下,当有配置产生冲突时,前面执行的生效。
INPUT: dst IP is on the host, even it has multiple port with multiple subnet网络
OUTPUT: src IP is from the host, either portapp
FORWARD: Neither dst IP on the host nor src IP from the host
tcp
For example, to router A INPUT is: 192.168.10.1 -> 192.168.10.199 192.168.10.1 -> 192.168.2.1 OUTPUT is: 192.168.10.199 -> x.x.x.x 192.168.2.1 -> x.x.x.x FORWARD is: 192.168.10.1 -> 192.168.2.199 192.168.10.1 -> 192.168.8.1 192.168.10.1 -> 192.168.8.199
参考: http://blog.51cto.com/lustlost/943110oop
#开启22端口 iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT #关闭全部端口 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP #开启80端口,HTTP服务 iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT #开启3306端口,MYSQL服务 iptables -A INPUT -p tcp --dport 3306 -j ACCEPT iptables -A OUTPUT -p tcp --sport 3306 -j ACCEPT #开启53端口,DNS服务 iptables -A OUTPUT -p udp --dport 53 -j ACCEPT iptables -A INPUT -p udp --sport 53 -j ACCEPT iptables -A INPUT -p udp --dport 53 -j ACCEPT iptables -A OUTPUT -p udp --sport 53 -j ACCEPT #开启20,21端口,FTP服务 iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 20 -j ACCEPT iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT #因为FTP在上传下载中会使用到任意的端口,故先设置FTP使用的端口,再打开端口 vi /etc/vsftpd.conf #在配置文件的最下面 加入 pasv_min_port=30001 pasv_max_port=31000 iptables -A INPUT -p tcp --dport 30001:31000 -j ACCEPT iptables -A OUTPUT -p tcp --sport 30001:31000 -j ACCEPT #打开PING iptables -A OUTPUT -p icmp -j ACCEPT iptables -A INPUT -p icmp -j ACCEPT #替换安全的22,80输出端口 iptables -R OUTPUT 1 -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -R OUTPUT 2 -p tcp --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT #保存IPTABLES设置 service iptables save #查看是否保存成功 cat /etc/sysconfig/iptables #出现如下内容表明设置成功: # Generated by iptables-save v1.3.5 on Thu Sep 8 19:41:30 2011 *filter :INPUT DROP [103:6135] :FORWARD DROP [0:0] :OUTPUT DROP [12:964] -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT -A INPUT -p udp -m udp --sport 53 -j ACCEPT -A INPUT -p udp -m udp --dport 53 -j ACCEPT -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT -A INPUT -p tcp -m tcp --dport 30001:31000 -j ACCEPT -A INPUT -p icmp -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 22 -m state --state RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 3306 -j ACCEPT -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT -A OUTPUT -p udp -m udp --sport 53 -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 21 -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 20 -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 30001:31000 -j ACCEPT -A OUTPUT -p icmp -j ACCEPT COMMIT # Completed on Thu Sep 8 19:41:30 2011 #另外,按编号查看规则使用如下命令 iptables -L -n --line-number