I have an iptables script I want to run at boot.
I created /etc/rc.d/rc.local file with CHMOD 755 permissions which have worked on previous operating systems.
Root owns the file.
I also have #!/bin/bash as the first line.
I have also tried #!/bin/sh
I have also added a 5 second sleep thinking maybe something needs to finish.
I have temporarily disabled selinux to eliminate that as a cause.
The rc.local file looks like this:

sleep 5  

The miniptables file is also owned by root, chmod 755, starts with #!/bin/bash, contains some iptables commands, and has worked on hundreds of servers.
What am I missing?
Thanks in advance.

  • 1
    Try to avoid home-grown firewall scripts, if you can, and just use firewalld. – Michael Hampton Dec 28 '15 at 22:07

The /etc/rc.d/rc.local file doesn't have execute permissions by default, so set it executable:

# chmod +x /etc/rc.d/rc.local

Also, the file is not run unless the systemd rc-local service is enabled, but it is disabled by default. So you need to enable (and start) it:

# systemctl start rc-local
# systemctl enable rc-local

For systemd systems, it is usually better to write your own systemd service.

| improve this answer | |
  • It would be helpful if you offered explanations of what those commands do, instead of encouraging blind copy/paste sysadmin practices. – EEAA Dec 28 '15 at 21:59
  • unfortunately your suggestion did not work. I forgot to mention that I checked rc-local service as well. The execution bit was already set per chmod 755 but I did your command anyway. Here is the output: systemctl status rc-local ... Loaded: loaded (/usr/lib/systemd/system/rc-local.service; static; vendor preset: disabled) Active: active (exited) since Mon 2015-12-28 14:58:17 CST; 1h 0min ago ... systemctl is-enabled rc-local static systemctl enable rc-local The unit files have no [Install] section. They are not meant to be enabled using systemctl. ... – xivix Dec 28 '15 at 22:08
  • Add "logger test" call to /etc/rc.local and after reboot check journalctl if test record was added. – e42d3 Dec 28 '15 at 22:10
  • Added logger test and now it is working and I don't know why :( Thanks though – xivix Dec 28 '15 at 22:26

Create your script: vim /etc/rc.d/rc.local

Example script:

echo "test script"

Make script executable: chmod +x /etc/rc.d/rc.local
Fix SELinux context: restorecon -v /etc/rc.d/rc.local

Enable and start service:

systemctl enable rc-local.service
systemctl start rc-local.service
systemctl status rc-local.service
| improve this answer | |
  • What are you supposed to do while vim'ing? What does the rest of this do and why? – chicks Jul 24 '17 at 14:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.