linux下iptables详解
1.selinux 关闭
vim /etc/sysconfig/selinux 设置方法: 1 #SELINUX=enforcing #注释掉 2 #SELINUXTYPE=targeted #注释掉 3 SELINUX=disabled #增加 4 :wq #保存,关闭。 5 shutdown -r now #重启
2.iptables 内网关闭,外网打开,大并发情况下,不能开iptables,影响性能,硬件防火墙。
iptables 工作流程小结
1.防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
2.如果匹配上规则,即明确表明是阻止还是通过,此时数据包就不再向下匹配新规则了。
3.如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
4.防火墙的默认规则是对应链的所有的规则执行完才会执行的。
5.iptables 配置实战:
iptables -V 查看iptables 版本
man iptables 查看iptables帮助
查看防火墙的状态
/etc/init.d/iptables status
iptables -nL
6.查看liunx内核默认加载模块
lsmod |egrep "nat|filter"
加载如下模块到linux内核
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
7.iptables 命令
-n 数字
-L 列表
-F 清除所有规则 ,只留下默认规则,允许所有通过。
-X 删除用户自定义的链
-Z 链的计数器清零
-t 指定表
--line-numbers 显示序号
-A添加规则到指定链的结尾,最后一条
-I添加规则到指定链的开头,是第一条
-D 删除规则 ##删除指定规则 iptables -D INPUT -p tcp --dport 1000 -j ACCEPT
这个区别的意义在意,规则是由上先下执行匹配;可以应用与防DDOS。
测试规则端口是否生效,可以再 cmd 上 telnet 10.0.0.18 80 看是否能连接。
iptables -I INPUT 2 -p tcp --dort 1000 -j ACCEPT (2为第二行,插入在第二行的前面)
-p协议 (all,tcp , udp,icmp). 默认all
--dport目的端口
--sport 源端口
-j (jump)处理的行为
-s 指定源地址
-d 指定目的地址
-i INPUT 匹配进入的网卡接口
-o OUTPUT 匹配出去的网卡接口
==========================
基本的处理行为:ACCEPT(接受),DROP(丢弃),REJECT(拒绝)
8. 查看某个服务的端口
netstat -lntup|grep mysql
netstat -lntup|grep ssh
拒绝ssh远程连接(加了这条无法用xshell进行远程连接了),iptables默认的就是filter表,可以不指定,下面两条相等。
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
iptables -A INPUT -p tcp --dport 22 -j DROP
-t指定filter表(不加这条,默认也是filter), -A增加规则,-p指定协议 --dport 指定端口,-j指定行为 DROP 为拒绝。
断掉后,得在远程主机,删除这条规则,或者清空规则才可以进行远程连接。
9.禁止网段连入
iptables -A INPUT -i etho -s 10.0.0.0/24 -j DROP
10.匹配端口范围(用冒号连接)--最佳写法
iptables -I INPUT -p tcp --dport 8080:8090 -j ACCEPT
还可以用列表形式添加多端口匹配 -m multiport
iptables -I INPUT -p tcp -m multiport --dport 21,80,8088,8080,3306 -j ACCEPT ,第一天允许,下面的不DROP 规则不匹配;
11.禁止ping (--imcp type8为ping)
iptables -I INPUT -p icmp --icmp-type 8 -j DROP
12 匹配网络状态
-m state --state
NEW :已经或将启动新的连接
ESTABLISHED : 已经建立的连接
RELATED:正在启动的新连接
INVALID:非法或无法识别的
13.允许关联的数据包通过(web服务不要使用FTP服务)
#others RELATED ftp协议
#允许关联的状态包
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
14.生产环境中iptables 配置
#清除所有规则 ipatbles -F #清除用户自定义的链 iptables -X #清除当前所有链的计数器 iptables -Z #允许ssh远程连接端口 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许网卡回环接口(服务器本机) iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT #设置DROP掉FORWARD,INPUT链,允许OUTPUT链 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT #允许指定网段通过(外网网段与内网网段) iptables -A INPUT -s 211.154.152.0/24 -p all -j ACCEPT iptables -A INPUT -s 192.168.152.0/24 -p all -j ACCEPT #允许对外提供服务80端口 iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允许icmp类型通过(所有ip都能ping) iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT # 允许关联的包通过(一般应用与ftp) iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #永久保存防火墙配置,预防重启后失效 /etc/init.d/iptables save 或用重定向方式保存(很少用) iptables-save >/etc/sysconfig/iptables
生产环境中
使用iptables -F 切忌(特别是托管机房)
要先执行
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
/etc/init.d/iptables save
然后执行
iptables -F
要不然,没有规则,全部是drop ,ssh 断开了,所有连接失效,很严重;
15.生产环境中iptables 维护
#编辑规则 vim /etc/sysconfig/iptables #加入想要的规则 -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT /etc/init.d/iptables reload ##改DROP 一定要线下先测试一通,避免把自己DROP掉 #封IP,第一行封,范围小,影响不大 iptables -I INPUT -p tcp -s 10.0.0.106 --dport 80 -j DROP
16 nat 表的核心功能: IP及端口的映射转换
1.共享上网
2.端口映射
17
扩展匹配
指定-m选项,表示用什么模块来匹配,如:
-m state --state
NEW,ESTABLISHED,RELATED 表示用state模块来匹配当前连接状态为这三种状态的连接
-m iprange
--src-range 用iprange模块匹配来源的ip地址范围
--dst-range 用iprange模块匹配目的的ip地址范围
-m multiport
--source-ports 用multiport模块来匹配来源的端口范围
--destination-ports 用multiport模块来匹配目的的端口范围
我们看如下一条例子来解读:
-A INPUT -p tcp -m iprange --src-range 121.21.30.36-121.21.30.100 -m multiport --destination-ports 3326,3327,3328 -m state --state NEW -j ACCEPT
这表示来自121.21.30.36-121.21.30.100这个地址范围的,请求端口为3326,3327,3328并且是新建的连接,都给予放行