配置rc.local
不同的操作系统,自启动文件rc.local位置不一样,建议先百度再继续,这里是ubuntu18.04的配置方法
ubuntu18.04不再使用initd管理系统,改用systemd。
然而systemd
很难用,改变太大,跟之前的完全不同。
使用systemd
设置开机启动
为了像以前一样,在/etc/rc.local
中设置开机启动程序,需要以下几步:
ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service
cat /etc/systemd/system/rc-local.service
在得到的rc-local.service
文件中,末尾加上
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
先检查/etc/rc.local
是否有执行权限(直接赋予权限也没有问题)
ls -l /etc/rc.local
然后赋予权限(+x
如果不行,可以试试777
,全部权限)
chmod +x /etc/rc.local
再rc.local
测试一下,重启看看/home/你的用户名/test.log
是否有数据
#!/bin/sh
echo "test rc " > /home/你的用户名/test.log
备份与还原
备份iptables规则,将规则文件保存到当前用户目录下。
iptables-save > ~/iptables.bak
还原iptables规则:
iptables-restore < ~/iptables.bak
常用语法
iptables命令的语法一般如下:
iptables [-flags] [chain] [options[extensions]] [ACTION]
iptables标志项与命令
-t table:制定要操作的表
-A:将一条或多条规则附加到指定链的末尾
-D:从链中删除某个规则
-P:设置链的缺省目标
-L:查看规则设置
-F:清除规则
iptables选项:
-p:指定协议
-d:指定目标地址
-s:指定源地址
--dport 端口号:指定目标端口
--sport 端口号:指定源端口
-i 接口名: 指定输入接口
-o 接口名:指定输出接口
iptables事件项:
ACCEPT:允许数据包通过
DROP:将数据包丢弃掉,这种方式会导致源端误认为数据包丢失,而不断发送新包,直到连接Timeout为止;
REJECT:将数据包丢弃,并回送一个destination unreachable的ICMP数据包给发送端,发送端收到这个数据包后,会立即终止连接动作。
iptables 可以操纵表:
filter 表
nat 表
mangle 表
raw 表
如果不指定,则默认操作filter表
每个表由若干 “链”(chains)组成
每条链由一条或数条 “规则” 组成
链
系统缺省的表为“filter”,该表中包含了3 个链:
INPUT:网络上其他主机发给本机的数据包;
FORWARD:由本机转发的数据包;
OUTPUT:本机发送出去的数据包;
每一条规则都是这样定义的:
如果数据包头符合这样的条件,就这样处理这个数据包。
当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件
如果满足,系统将根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条规则
如果该数据包不符合该链中任一条规则的话,系统就会根据该链预先定义的策略来处理该数据包
iptables操作实例
- 列出防火墙当前的规则:
iptables -t filter [表名] -L [链名]
- 清除table中的规则
iptables -t filter -F
- 设定默认策略
iptables -t filter[表名] -P INPUT[链名] DROP
- 添加规则—最简单的方式
iptables -t filter [表名] -A INPUT[链名] -p icmp[协议名] -j ACCEPT[动作]
- 删除规则
iptables -t filter [表名] -D INPUT[链名] -p icmp[协议名] -j ACCEPT[动作]
- 限制访问
iptables -t filter -A INPUT -p icmp -s 192.168.0.193 -j DROP
-s
后接的地址可以为某台主机的IP地址、某一个网段的网络地址,也可以是某个网站的域名-d
同上,不过改为了输出端口--dport
:限制目的端口--sport
:限制源端口
防火墙管理办法
当我们通过iptables添加完后规则后,规则就被存储在各个不同的链表中,但是机器重启后,这些规则通通都会消失。
解决方法:
1、将规则存储到规则文件中,然后将防火墙设置为自动启动
service iptables save
setup 或 chkconfig iptables on
2、通过将规则的设置命令编写为shell文件的形式;
shell脚本
在linux分区上编写,如
vi /路径/iptest.sh
iptest.sh
#!/bin/sh
XXXXXXX
赋予权限,启动(进入到你的iptest.sh
文件目录下)
chmod +x iptest.sh
./iptest.sh
添加到末尾rc.local
,exit 0
不添加会报错(至少我会qwq)
#! /bin/sh
/路径/iptest.sh
exit 0
练习参考
注意:icmp可以单向关闭,也就是说你可以ping别人,别人ping不到你。
脚本一:
1、编写脚本iptest.sh,功能如下:
1)iptest.sh清空所有存在的规则;
2)只开放22号端口(ssh、tcp);
3)禁止发送icmp包;
4)禁止发送DNS查询包;
5)INPUT默认规则为DROP;
6)OUTPUT默认规则为ACCEPT;
7)FORWARD默认规则为DROP ;
2、iptest.sh能随系统启动。
脚本二:
编写脚本iptest2.sh,功能如下:
1、不清空执行iptest.sh后所有存在的规则的情况下;
2、只允许icmp包发送出去;
3、禁止已开启的22号服务。
ANS
sh1
#!/bin/sh
iptables -t filter -F
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j DROP
iptables -t filter -A OUTPUT -p udp --sport 53 -j DROP
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -P FORWARD DROP
sh2
#!/bin/sh
iptables -t filter -D OUTPUT -p icmp -j DROP
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -t filter -D INPUT -p tcp --dport 22 -j ACCEPT